PHPackages                             laravel-settings/settings - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Parsing &amp; Serialization](/categories/parsing)
4. /
5. laravel-settings/settings

ActiveLibrary[Parsing &amp; Serialization](/categories/parsing)

laravel-settings/settings
=========================

Simple settings management package for Laravel

v1.0.4(1mo ago)29MITPHPPHP ^8.2

Since Feb 17Pushed 3mo agoCompare

[ Source](https://github.com/laravel-settings/settings)[ Packagist](https://packagist.org/packages/laravel-settings/settings)[ Docs](https://github.com/laravel-settings/settings)[ RSS](/packages/laravel-settings-settings/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (16)Versions (6)Used By (0)

Laravel Settings
================

[](#laravel-settings)

A flexible and powerful settings management package for Laravel applications. Store and retrieve settings using an Eloquent-like syntax with support for multiple storage drivers and multilingual values.

---

Features
--------

[](#features)

- Simple, expressive Eloquent-like syntax (`where`, `groupBy`, `sort`, `search`, ...)
- Supports multiple data types: arrays, strings, nested objects
- Supports multiple storage drivers: `database`, `file`, `redis`, `cache`
- Multilingual / localization support
- Blade directives for easy use in views
- CRUD operations: `save`, `create`, `update`, `delete`

---

Requirements
------------

[](#requirements)

- PHP &gt;= 8.1
- Laravel &gt;= 10.x

---

Installation
------------

[](#installation)

Install the package via Composer:

```
composer require laravel-settings/settings
```

### Publish Migrations

[](#publish-migrations)

```
php artisan vendor:publish --provider="LaravelSettings\Settings\Providers\SettingsServiceProvider" --tag="settings-migrations"
```

### Publish Config

[](#publish-config)

```
php artisan vendor:publish --provider="LaravelSettings\Settings\Providers\SettingsServiceProvider" --tag="settings-config"
```

### Run Migrations

[](#run-migrations)

```
php artisan migrate
```

---

Configuration
-------------

[](#configuration)

After publishing, open `config/settings.php` to choose your preferred driver:

```
'driver' => env('SETTINGS_DRIVER', 'database'),
```

Supported drivers: `database`, `file`, `redis`, `cache`

---

Basic Usage
-----------

[](#basic-usage)

### Save Settings

[](#save-settings)

```
setting('website')->save([
    'name'  => 'My Website',
    'email' => 'admin@example.com',
]);
```

### Retrieve Settings

[](#retrieve-settings)

```
echo setting('website')->name;   // My Website
echo setting('website')->email;  // admin@example.com
```

### Create

[](#create)

```
setting('website')->create(['name' => 'My Website']);
```

### Update a Specific Field

[](#update-a-specific-field)

```
setting('website')->update('name', 'New Name');

echo setting('website')->name; // New Name
```

### Delete

[](#delete)

```
setting('website')->delete();

setting('website')->name; // null
```

---

Nested Data
-----------

[](#nested-data)

Store and access deeply nested values using dot notation:

```
setting('permissions')->save([
    'roles' => [
        'owner' => [
            'title' => 'Administrator',
            'users' => ['create', 'update'],
        ],
    ],
]);

// Access nested values as objects
echo setting('permissions')->roles->owner->title; // Administrator

// Update a deeply nested value using dot notation
setting('permissions')->update('roles.owner.title', 'Super Admin');

echo setting('permissions')->roles->owner->title; // Super Admin

// Update a nested array
setting('permissions')->update('roles.owner.users', ['show', 'edit']);

setting('permissions')->roles->owner->users->toArray(); // ['show', 'edit']
```

---

Working with Lists
------------------

[](#working-with-lists)

Store and manipulate a list of items:

```
setting('products')->save([
    ['title' => 'C Title', 'price' => 30],
    ['title' => 'A Title', 'price' => 10],
    ['title' => 'B Title', 'price' => 20],
]);

// Get the first and last item
setting('products')->first()->title; // C Title
setting('products')->last()->title;  // B Title

// Iterate over items
setting('products')->each(function ($item, $index) {
    echo $item->title;
});

// Get all as array
setting('products')->get();
setting('products')->toArray();
```

---

Eloquent-like Methods
---------------------

[](#eloquent-like-methods)

### sort()

[](#sort)

Sort items by any field, ascending or descending:

```
setting('products')->sort('title', 'asc');
setting('products')->toArray();
// titles: ['A Title', 'B Title', 'C Title']

setting('products')->sort('title', 'desc');
setting('products')->toArray();
// titles: ['C Title', 'B Title', 'A Title']
```

### groupBy()

[](#groupby)

Group items by a shared key:

```
setting('schedule')->save([
    ['room_id' => 1, 'day' => 'Monday',  'time' => '09:00'],
    ['room_id' => 2, 'day' => 'Monday',  'time' => '09:00'],
    ['room_id' => 1, 'day' => 'Tuesday', 'time' => '10:00'],
    ['room_id' => 2, 'day' => 'Tuesday', 'time' => '11:00'],
]);

$groups = setting('schedule')->groupBy('room_id');

count($groups[1]); // 2  (Monday + Tuesday for room 1)
count($groups[2]); // 2  (Monday + Tuesday for room 2)
```

### where()

[](#where)

Filter nested items by a key/value pair:

```
setting('staff')->save([
    'roles' => [
        'owner_one'   => ['admin' => 'Ahmed', 'title' => 'Title One'],
        'owner_two'   => ['admin' => 'Ali',   'title' => 'Title Two'],
        'owner_three' => ['admin' => 'Ahmed', 'title' => 'Title Three'],
    ],
]);

$result = setting('staff')->where('admin', 'Ahmed');

// Returns only items where admin === 'Ahmed'
// { owner_one: {...}, owner_three: {...} }

echo $result->owner_one->title;   // Title One
echo $result->owner_three->title; // Title Three
```

### search()

[](#search)

Search nested keys by a partial string match:

```
setting('roles')->save([
    'roles' => [
        'owner_one'   => ['title' => 'Title One',   'des' => 'des one'],
        'owner_two'   => ['title' => 'Title Two',   'des' => 'des two'],
        'owner_three' => ['title' => 'Title Three', 'des' => 'des three'],
        'editor'      => ['title' => 'Editor',      'des' => 'can edit'],
    ],
]);

$result = setting('roles')->search('owner');

// Returns all keys that contain 'owner'
// { owner_one: {...}, owner_two: {...}, owner_three: {...} }

echo $result->owner_two->title; // Title Two
```

---

Multilingual Support
--------------------

[](#multilingual-support)

Store values in multiple locales and retrieve them by locale:

```
setting('website')->save([
    'name'  => ['ar' => 'اسم الموقع', 'en' => 'Website Name'],
    'email' => ['ar' => 'البريد',     'en' => 'Email'],
]);

// Access a specific locale directly
echo setting('website')->name; // اسم الموقع
echo setting('website')->name; // Website Name
```

Pass a locale as the second argument to resolve values automatically:

```
setting('website', 'ar')->first()->name; // اسم الموقع
setting('website', 'en')->first()->name; // Website Name
```

Works the same with lists of items:

```
setting('posts')->save([
    [
        'name'  => ['ar' => 'مرحبا', 'en' => 'Hello'],
        'email' => ['ar' => 'البريد', 'en' => 'Email'],
    ],
]);

$firstAr = setting('posts', 'ar')->first();
echo $firstAr->name; // مرحبا

$firstEn = setting('posts', 'en')->first();
echo $firstEn->name; // Hello
```

---

Blade Directives
----------------

[](#blade-directives)

### @setting

[](#setting)

Output a single field value:

```
{{-- Simple field --}}
@setting('website', 'name')

{{-- Nested field using dot notation --}}
@setting('website', 'roles.owner.title')

{{-- Localized field --}}
@setting('website', 'name.ar')
```

### @eachSetting / @endEachSetting

[](#eachsetting--endeachsetting)

Loop over a list of settings. The default variable is `$item` if no alias is provided:

```
{{-- Default variable: $item --}}
@eachSetting('products')
    {{ $item->name }} - {{ $item->email }}
@endEachSetting

{{-- Custom variable alias --}}
@eachSetting('products' as $product)
    {{ $product->name }} - {{ $product->email }}
@endEachSetting

{{-- Loop over a nested key using dot notation --}}
@eachSetting('language_items.admins' as $admin)
    {{ $admin->name }} - {{ $admin->email }}
@endEachSetting
```

---

File / Image Storage
--------------------

[](#file--image-storage)

```
// Store uploaded file and save its path
$path = $request->file('logo')->store('website', 'public');

setting('website')->save(['logo_path' => $path]);

// Retrieve the stored path
echo setting('website')->logo_path; // website/logo.png
```

---

Available Drivers
-----------------

[](#available-drivers)

DriverDescription`database`Stores settings in a database table (default)`file`Stores settings as JSON files`redis`Stores settings in Redis`cache`Stores settings using Laravel Cache---

License
-------

[](#license)

This package is open-sourced software licensed under the MIT license.

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance85

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~9 days

Total

5

Last Release

53d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/67fff42dd59d75c27de2eaa338c05cccf7aa29b35e0e6b2763278bbaa51efaed?d=identicon)[Ali-Hassan-Ali](/maintainers/Ali-Hassan-Ali)

---

Top Contributors

[![Ali-Hassan-Ali](https://avatars.githubusercontent.com/u/69222334?v=4)](https://github.com/Ali-Hassan-Ali "Ali-Hassan-Ali (3 commits)")

---

Tags

jsonlaravelconfigurationSettingsdriverlaravel-settingsjson-settings

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/laravel-settings-settings/health.svg)

```
[![Health](https://phpackages.com/badges/laravel-settings-settings/health.svg)](https://phpackages.com/packages/laravel-settings-settings)
```

###  Alternatives

[sbsaga/toon

🧠 TOON for Laravel — a compact, human-readable, and token-efficient data format for AI prompts &amp; LLM contexts. Perfect for ChatGPT, Gemini, Claude, Mistral, and OpenAI integrations (JSON ⇄ TOON).

6115.6k](/packages/sbsaga-toon)[thewunder/conphigure

Framework Agnostic Configuration Library

3115.9k](/packages/thewunder-conphigure)[json-mapper/laravel-package

The JsonMapper package for Laravel

25170.4k3](/packages/json-mapper-laravel-package)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
