PHPackages                             inerba/filament-db-config - 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. [Admin Panels](/categories/admin)
4. /
5. inerba/filament-db-config

ActiveLibrary[Admin Panels](/categories/admin)

inerba/filament-db-config
=========================

A Filament plugin for database-backed application settings and editable content, with caching and easy page generation.

v1.3.4(2mo ago)329.1k↓40%1MITPHPPHP ^8.2CI passing

Since Aug 19Pushed 2mo agoCompare

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

READMEChangelog (10)Dependencies (12)Versions (19)Used By (0)

[![header](./.github/resources/inerba-db-config.webp)](./.github/resources/inerba-db-config.webp)

DB Config – Lightweight settings &amp; content manager for Filament
===================================================================

[](#db-config--lightweight-settings--content-manager-for-filament)

[![Latest Stable Version](https://camo.githubusercontent.com/9ceb26443e67e643aabae7034cd882a782c84725999612d0a3337f6c4ce22386/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f696e657262612f66696c616d656e742d64622d636f6e666967)](https://packagist.org/packages/inerba/filament-db-config)[![Run Tests](https://github.com/inerba/filament-db-config/actions/workflows/tests.yaml/badge.svg)](https://github.com/inerba/filament-db-config/actions/workflows/tests.yaml)[![GitHub Workflow Status](https://camo.githubusercontent.com/2d2500fa57489456bf22bc707e9e257d6cd3bcad250a40b2f44807485c4be340/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f696e657262612f66696c616d656e742d64622d636f6e6669672f636f64652d7374796c652e796d6c3f6272616e63683d6d61696e266c6162656c3d436f64652532307374796c65267374796c653d666c61742d737175617265)](https://packagist.org/packages/inerba/filament-db-config)[![Total Downloads](https://camo.githubusercontent.com/3019a0faa01050195a5898c0de507727e5a9413beffbfb3926b096b803ae951f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f696e657262612f66696c616d656e742d64622d636f6e666967)](https://packagist.org/packages/inerba/filament-db-config)[![License](https://camo.githubusercontent.com/c603b9651a17feb497d73cb91d9e138d5da4d6c30eafd941eb9ee6fa963225c9/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f696e657262612f66696c616d656e742d64622d636f6e666967)](https://packagist.org/packages/inerba/filament-db-config)

⭐ Star this repo if it helps you - it truly motivates us to do more. 🙏😊

[![Share on X](https://camo.githubusercontent.com/bace1cda478fdf584bd7dd0874de3edea69618e4a9ccba7593e6c6b31e9d839a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73686172652d3030303030303f6c6f676f3d78266c6f676f436f6c6f723d7768697465)](https://x.com/intent/tweet?text=Check%20out%20this%20project%20on%20GitHub:%20https://github.com/inerba/filament-db-config%20%23OpenIDConnect%20%23Security%20%23Authentication)[![Share on Facebook](https://camo.githubusercontent.com/da7b29f4c37eba4372d852b927ecc46efcae580e8f88242478a9d02eace41d89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73686172652d3138373746323f6c6f676f3d66616365626f6f6b266c6f676f436f6c6f723d7768697465)](https://www.facebook.com/sharer/sharer.php?u=https://github.com/inerba/filament-db-config)[![Share on LinkedIn](https://camo.githubusercontent.com/c784204dafe41419e762cd51b144f8f95d30530531f19e1115c7dfe39e0e3b97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73686172652d3041363643323f6c6f676f3d6c696e6b6564696e266c6f676f436f6c6f723d7768697465)](https://www.linkedin.com/sharing/share-offsite/?url=https://github.com/inerba/filament-db-config)[![Share on Reddit](https://camo.githubusercontent.com/879a64eb31484073c82e0f31f705534ff309018cc53dad0cee5fb2af66391180/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73686172652d4646343530303f6c6f676f3d726564646974266c6f676f436f6c6f723d7768697465)](https://www.reddit.com/submit?title=Check%20out%20this%20project%20on%20GitHub:%20https://github.com/inerba/filament-db-config)[![Share on Telegram](https://camo.githubusercontent.com/af75de7248bf475b4d6f3f60bb4f1d6f06830ea69c3a9bac2d3cc2028c25e293/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f73686172652d3030383843433f6c6f676f3d74656c656772616d266c6f676f436f6c6f723d7768697465)](https://t.me/share/url?url=https://github.com/inerba/filament-db-config&text=Check%20out%20this%20project%20on%20GitHub)

DB Config is a Filament plugin that provides a simple, database-backed key/value store for **application settings** and **editable content**.
It’s ideal both for storing configuration (like site name, contact info, labels) and for managing page sections (homepage hero, landing blocks, about text, etc.) without the need for a full CMS.

- 🔑 Store application settings in a simple key/value table
- 📝 Manage editable content (homepages, landing pages, about sections)
- ⚡ Use any Filament form fields or layouts — including third-party ones
- 🗄️ Transparent caching, no extra boilerplate, zero external deps

It provides a clean set of simple helpers for reading and writing values, with transparent caching under the hood, and persists data as JSON in a dedicated table.
It is framework-friendly and requires no custom Eloquent models in your app.

[![DB Config GIF Demo](./.github/resources/demo.gif)](./.github/resources/demo.gif)

**Table of Contents**- [DB Config – Lightweight settings &amp; content manager for Filament](#db-config--lightweight-settings--content-manager-for-filament)
    - [Requirements](#requirements)
    - [Installation](#installation)
    - [🚀 Getting Started](#-getting-started)
    - [Configuration](#configuration)
    - [Advanced Usage](#advanced-usage)
        - [Generate a settings page](#generate-a-settings-page)
        - [Creating a widget 🆕](#creating-a-widget-)
        - [Read &amp; write values](#read--write-values)
            - [Read a value (helper)](#read-a-value-helper)
            - [Blade directive](#blade-directive)
            - [Read a value (class)](#read-a-value-class)
            - [Write a value](#write-a-value)
            - [Read an entire group as associative array](#read-an-entire-group-as-associative-array)
            - [Facade (optional)](#facade-optional)
        - [Set Default Values](#set-default-values)
        - [Working with nested values](#working-with-nested-values)
    - [How it works](#how-it-works)
        - [Database](#database)
        - [Caching behavior](#caching-behavior)
        - [Return values and defaults](#return-values-and-defaults)
    - [Why use DB Config when Spatie Settings already exists?](#why-use-db-config-when-spatie-settings-already-exists)
    - [Security considerations](#security-considerations)
    - [Testing](#testing)
    - [Plugin Skill: filament-db-config](#plugin-skill-filament-db-config)
    - [Versioning](#versioning)
    - [License](#license)

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

[](#requirements)

- PHP version supported by your Laravel installation
- Laravel 12
- A database engine with JSON support (MySQL 5.7+, MariaDB 10.2.7+, PostgreSQL, SQLite recent versions)
- Filament 4 or Filament 5

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

[](#installation)

1. **Install the package** via Composer:

    ```
    composer require inerba/filament-db-config
    ```
2. **Publish the assets** (Configuration and Migration):

    ```
    php artisan vendor:publish --tag="db-config-migrations"
    ```
3. **Run the migration**:

    ```
    php artisan migrate
    ```

    This command executes the migration file that you just published, creating the `db_config` table (or the custom table name you defined in the config file) in your database. Your package is now ready to use!

Tip

If you want to use a custom table name instead of `db_config`, edit the configuration file `config/db-config.php` before running the migration. See the [Configuration](#configuration) section for details.

🚀 Getting Started
-----------------

[](#-getting-started)

Get up and running in just a few steps:

1. **Generate Your First Settings Page**

    ```
    php artisan make:db-config Website
    ```

    This command creates a new Filament page (e.g., App/Filament/Pages/WebsiteSettings.php). You can repeat this step for more pages as needed.

Note

The generator will automatically add the “Settings” suffix to the page name for consistency (e.g., WebsiteSettings), but you can use any group name you wish.

2. **Define Your Fields**

    Open the generated page and customize the form() method with your desired fields:

    ```
    public function form(Form $form): Form
    {
        return $form
            ->components([
                TextInput::make('site_name')->label('Site Name'),
                TextInput::make('contact_email')->label('Contact Email'),
                Toggle::make('maintenance_mode')->label('Maintenance Mode'),
            ])
            ->statePath('data');
    }
    ```

Note

You may use **any Filament form fields or layout components - including third-party ones -** to build your settings and content pages, giving you full flexibility in how data is structured and edited.

3. **Save and Edit Settings from the Admin Panel**

    You can now edit these settings directly in your Filament admin panel—no extra boilerplate needed.
4. **Use Your Settings Anywhere**

    Retrieve your configuration values easily:

    - In PHP:

        ```
        $siteName = db_config('website.site_name', 'Default Site Name');
        ```
    - In Blade:

        ```
        {{ db_config('website.site_name', 'Default Site Name') }}

        @db_config('website.site_name', 'Default Site Name')
        ```

**That’s it!** 🎉

Define your fields, save from the admin panel, and access your settings anywhere in your Laravel app.

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

[](#configuration)

You can customize the behavior of the package by publishing the configuration file:

```
php artisan vendor:publish --tag="db-config-config"
```

**Details****Table Name**: By default, settings are stored in the db\_config table. You can change this by modifying the table\_name value. This is useful to avoid collisions or to follow a specific naming convention.

```
'table_name' => 'db_config',
```

**Cache Behavior**: The package uses caching to minimize database queries. You can fine-tune the cache settings.

- **prefix**: All cache keys generated by the package will use this prefix. Changing this can prevent collisions with other cache keys in your application.
- **ttl**: Defines the cache lifetime in minutes. By default, it's null, which means settings are cached forever. You can specify a number of minutes to have the cache expire periodically.

```
'cache' => [
    'prefix' => 'my-app-settings',
    'ttl' => 60, // Cache for 1 hour
],
```

Advanced Usage
--------------

[](#advanced-usage)

### Generate a settings page

[](#generate-a-settings-page)

DB Config ships with an Artisan generator and an abstract Page class to quickly scaffold Filament settings pages.

```
php artisan make:db-config
```

**Details**Arguments can be omitted: if you don’t provide them, the command will enter interactive mode and prompt you for the group name (name) and, optionally, the panel (panel). You can also pass them on the command line to avoid interactive prompts.

Parameters:

- `name`: the settings group name (e.g. `website`). It is used to generate the class name (singular, capitalized).
- `panel` (optional): the Filament panel to create the page in (e.g. `Admin`). If omitted the default panel is used.

Examples:

```
php artisan make:db-config website            # default panel
php artisan make:db-config website admin      # specific panel (e.g. Admin)
```

What is generated:

- A Page class at `app/Filament/{Panel}/Pages/{Name}Settings.php` (the class name is the singular form of `{name}` + `Settings`, e.g. `WebsiteSettings.php`).

Behavior:

- The command does not overwrite existing files: if the class already exists it will warn and leave the file intact.
- Names are normalized: the class uses the singular form of the provided name.

Note: the generated class extends `Inerba\DbConfig\AbstractPageSettings`.

Page lifecycle and saving:

- On `mount()`, the page loads all settings for the given group (defined by `settingName()`) via `DbConfig::getGroup()` and fills the page content state.
- A built-in header action “Save” persists the current state by calling `DbConfig::set("{group}.{key}", $value)` for each top-level key present in the page content.

Defining the page content:

- Implement `protected function settingName(): string` to define the group name (e.g. `website`).
- Implement `public function content(Schema $schema): Schema` and return your content schema.
- Set `->statePath('data')` so the page state is bound to the `$data` property and saved correctly.

Example page content (Filament schema):

```
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;

public function content(Schema $schema): Schema
{
    return $schema
        ->components([
            TextInput::make('site_name')->required(),
            // ... other inputs
        ])
        ->statePath('data');
}
```

### Creating a widget 🆕

[](#creating-a-widget-)

Create a **custom widget** as per the [Filament instructions](https://filamentphp.com/docs/4.x/widgets/overview#custom-widgets)

and extend it as shown in the example:

```
namespace App\Filament\Resources\Post\Widgets; // depending on your app structure

use Filament\Schemas\Schema;
use Inerba\DbConfig\AbstractWidgetSettings;

class BlogSettings extends AbstractWidgetSettings
{
    /**
     * Get the name of the setting.
     *
     * @return string The name of the setting.
     */
    protected function settingName(): string
    {
        return 'blog-settings';
    }

    /**
     * Provide default values for the settings.
     *
     * @return array The default data for the settings.
     */
    public function getDefaultData(): array
    {
        return [];
    }

    /**
     * Define the form schema for the settings page.
     *
     * @param  Schema  $schema  The schema instance.
     * @return Schema The modified schema with components.
     */
    public function form(Schema $schema): Schema
    {
        return $schema
            ->components([
                // Form components go here
            ])
            ->statePath('data');
    }
}
```

### Read &amp; write values

[](#read--write-values)

The simplest way to manage values is through the **Filament pages scaffolded by DB Config**:
you can define the fields you need (text inputs, toggles, repeaters, rich text, even third-party components) and edit them directly in the admin panel.
All changes are saved automatically in the `db_config` table and cached for fast access.

For programmatic access, the package also provides simple helpers and static methods:

#### Read a value (helper)

[](#read-a-value-helper)

```
db_config('website.site_name', 'Default Name');
```

#### Read a value safely (with exception handling)

[](#read-a-value-safely-with-exception-handling)

For scenarios where database access might fail (e.g., during migrations, maintenance, or bootstrapping), use the `safe_db_config()` helper. It catches any exceptions and returns the default value instead of crashing your application:

```
safe_db_config('website.site_name', 'Default Name');
```

This is particularly useful in:

- Service providers or middleware that run before the database is fully initialized
- Fallback scenarios where you want graceful degradation
- Development or CI environments where the database might not always be available

Tip

Use `safe_db_config()` in critical paths where a configuration failure should not interrupt the application flow.

#### Blade directive

[](#blade-directive)

You can also access values directly inside Blade templates:

```
@db_config('website.site_name', 'Default Name')
```

#### Read a value (class)

[](#read-a-value-class)

```
\Inerba\DbConfig\DbConfig::get('website.site_name', 'Default Name');
```

#### Write a value

[](#write-a-value)

```
\Inerba\DbConfig\DbConfig::set('website.site_name', 'Acme Inc.');
```

#### Read an entire group as associative array

[](#read-an-entire-group-as-associative-array)

```
\Inerba\DbConfig\DbConfig::getGroup('website');
// => [ 'site_name' => 'Acme Inc.', 'contact' => ['email' => 'info@acme.test'] ]
```

#### Facade (optional)

[](#facade-optional)

```
\Inerba\DbConfig\Facades\DbConfig::get('website.site_name');
```

Note

these values are **not** part of Laravel’s config() cache. Always use db\_config() or @db\_config instead of config(). The `db_config()` helper is auto-registered by the package and is the recommended way to read values in application code.

### Set Default Values

[](#set-default-values)

You can provide default values for your settings page. This is useful for pre-filling the form with sensible defaults when it's accessed for the first time. It guides the user by showing recommended settings, which they can then adjust or save directly to establish a working configuration without manual setup.

To define default values, simply override the getDefaultData() method in your settings page class and return an array of key-value pairs.

Example:

```
    use Filament\Forms\Components\TextInput;
    use Filament\Forms\Components\Toggle;
    use Filament\Schemas\Schema;

    /**
     * Set the default values to pre-fill the form.
     *
     * @return array
     */
    public function getDefaultData(): array
    {
        return [
            'posts_per_page' => 10,
            'allow_comments' => true,
        ];
    }

    public function form(Schema $schema): Schema
    {
        return $schema
            ->components([
                TextInput::make('posts_per_page')->required(),
                Toggle::make('allow_comments'),
            ])
            ->statePath('data');
    }
}
```

When the settings page is loaded, the getDefaultData() method provides the initial values to populate the form fields. These defaults are only used if no value for a given field has been previously saved to the database.

It's important to note that these default values are not persistent until the user explicitly clicks the "Save" button.

### Working with nested values

[](#working-with-nested-values)

DB Config uses a `group.setting` format for keys, with optional nested sub-keys resolved from JSON.

- The first segment is the **group**
- The second is the **top-level key**
- Any remaining segments are treated as nested paths inside the JSON value

Example:

```
// Store a nested structure
\Inerba\DbConfig\DbConfig::set('profile.preferences', [
    'theme' => 'dark',
    'notifications' => ['email' => true, 'sms' => false],
]);

// Read a nested value with default
db_config('profile.preferences.theme', 'light'); // 'dark'

// Read a missing nested value
db_config('profile.preferences.timezone', 'UTC'); // 'UTC'
```

How it works
------------

[](#how-it-works)

Settings are organized by a two-part key: `group.setting`, with optional nested sub-keys (e.g. `group.setting.nested.key`).

Under the hood:

- **Database Storage:** Settings are stored in a database table (by default `db_config`), with one row per `(group, key)`. The actual settings are stored as a JSON payload in the `settings` column.
- **Intelligent Caching:** Reads are cached to ensure high performance. By default, they are cached forever, but you can configure a specific TTL (Time To Live) in the config file.
- **Configurable Cache Keys:** The cache key is generated using a configurable prefix (`db-config` by default) followed by the group and setting (e.g., `db-config.website.site_name`).
- **Automatic Cache Invalidation:** Writes automatically clear the corresponding cache entry, ensuring that data always stays fresh.

### Database

[](#database)

The `db_config` table contains:

- `id` (bigint, primary key)
- `group` (string)
- `key` (string)
- `settings` (json, nullable)
- `created_at`, `updated_at` (timestamps)

There is a unique index on (`group`, `key`). Timestamps are present but not used by the package logic and may remain null depending on your database defaults.

> This package stores settings as JSON. Ensure your chosen database supports JSON columns. For SQLite (common in tests), JSON is stored as text and works transparently for typical use cases.

### Caching behavior

[](#caching-behavior)

To minimize database traffic, DB Config comes with a powerful caching layer. Here’s how it works:

- **Default Behavior:** By default, settings are cached **forever**. The first time a setting is read, it's fetched from the database and stored in the cache. All subsequent reads will hit the cache directly, making them incredibly fast.
- **Automatic Cache Invalidation:** When you use `DbConfig::set()` or the "Save" action on a settings page, the cache for the affected `(group, setting)` pair is automatically cleared. This ensures that the next read will fetch the fresh value from the database.
- **Configurable TTL:** You can change the default behavior by setting a `ttl` (Time To Live) in minutes in the `config/db-config.php` file. If a TTL is set, the package will use a temporary cache that expires after the specified duration.
- **Manual Cache Clearing:** When debugging, you can clear the entire framework cache using `php artisan cache:clear` to reset all cached settings.

### Return values and defaults

[](#return-values-and-defaults)

- If a value or nested path does not exist, the provided default is returned.
- If the stored JSON value is `null`, the default is returned.
- `getGroup()` returns an associative array of all settings for the group, or an empty array if none exist.

Why use DB Config when Spatie Settings already exists?
------------------------------------------------------

[](#why-use-db-config-when-spatie-settings-already-exists)

Both [DB Config](https://github.com/inerba/filament-db-config) and the official [Spatie Laravel Settings Plugin](https://github.com/filamentphp/spatie-laravel-settings-plugin) solve a similar problem - managing application settings in Laravel + Filament - but they take very different approaches.
Spatie Settings focuses on **strict typing, validation, and integration with your domain logic**, while DB Config is designed to be **lightweight, flexible, and quick to set up**, even for editable content blocks.

**Show comparison table between DB Config and Spatie Settings**The table below highlights the key differences so you can choose the right tool for your project:

FeatureDB ConfigSpatie Laravel Settings Plugin**Setup**Ready to use, no extra classes or migrationsRequires a dedicated `Settings` class for each group, plus migration to register it**Data storage**Single `db_config` table with JSON valuesEach group stored as its own settings record (linked to its Settings class)**Boilerplate**None requiredA new PHP class must be created for every settings group**Access**Dot notation, supports nested keys in JSONStrongly typed properties defined in the Settings class**Cache**Built-in, refreshed automatically on writeBuilt-in, but usually configured explicitly**Ideal for**Application settings and editable page content (homepage, blocks, texts)Strictly typed, validated settings tightly bound to app logic**Content usage**Can store full page sections (homepage, landing, about, etc.)Not designed for CMS-like use**Dependencies**No external depsRequires `spatie/laravel-settings`Choose **DB Config** if you want:

- A **lightweight key/value system** for both settings and content.
- Minimal setup, no boilerplate code.
- Flexibility to manage simple settings and even **page content** directly in Filament.

Choose **Spatie Laravel Settings Plugin** if you need **strict typing, validation, and DTOs** as part of your domain logic.

Security considerations
-----------------------

[](#security-considerations)

Caution

DB Config is a place for values you want admins to edit safely at runtime, not for infrastructure secrets (API keys, DB credentials).

Values are not encrypted by default. If you need encryption, apply it before using the package’s helpers to read or write values.

Testing
-------

[](#testing)

This package comes with a full test suite powered by Pest. To run the tests, first install the development dependencies:

```
composer install
```

Then, run the test suite from the root of the project:

```
./vendor/bin/pest
```

The package also uses GitHub Actions to automatically run tests on every push and pull request, ensuring that the code remains stable and reliable.

Plugin Skill: filament-db-config
--------------------------------

[](#plugin-skill-filament-db-config)

This package includes a Boost Agent Skill (`resources/boost/skills/filament-db-config/SKILL.md`) that provides guidance and strict conventions for creating database-backed settings pages with the `db-config` / `filament-db-config` workflows.

To use it, you must have [Laravel Boost](https://laravel.com/ai/boost) installed and run the command `php artisan boost:install`.

Versioning
----------

[](#versioning)

This package follows semantic versioning. Use a version constraint compatible with your Laravel version as shown in the installation section.

License
-------

[](#license)

The MIT License (MIT). See the LICENSE file for more details.

###  Health Score

50

—

FairBetter than 96% of packages

Maintenance84

Actively maintained with recent releases

Popularity35

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity57

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 98.2% 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 ~12 days

Total

16

Last Release

81d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c9951f7bf6251c81aceb7df0a295359cd0d2356543350c6a1a988d4b60f3f981?d=identicon)[inerba](/maintainers/inerba)

---

Top Contributors

[![inerba](https://avatars.githubusercontent.com/u/5882517?v=4)](https://github.com/inerba "inerba (111 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (2 commits)")

---

Tags

cmsfilament-pluginfilamentphplaravellaravelfilamentfilament-pluginlaravel-filament

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/inerba-filament-db-config/health.svg)

```
[![Health](https://phpackages.com/badges/inerba-filament-db-config/health.svg)](https://phpackages.com/packages/inerba-filament-db-config)
```

###  Alternatives

[awcodes/filament-quick-create

Plugin for Filament Admin that adds a dropdown menu to the header to quickly create new items.

246177.6k7](/packages/awcodes-filament-quick-create)[caresome/filament-neobrutalism-theme

A neobrutalism theme for FilamentPHP admin panels

303.2k](/packages/caresome-filament-neobrutalism-theme)[a909m/filament-statefusion

Filament StateFusion is a powerful FilamentPHP plugin that seamlessly integrates Spatie Laravel Model States into the Filament admin panel. This package provides an intuitive way to manage model states, transitions, and filtering within Filament, enhancing the user experience and developer productivity.

3010.8k1](/packages/a909m-filament-statefusion)[openplain/filament-tree-view

Tree view for Filament resources - drop-in replacement for Table with drag-and-drop hierarchical data management

318.5k](/packages/openplain-filament-tree-view)[andreia/filament-ui-switcher

Add a modal with options to switch between different UI layouts and styles (colors, fonts, font sizes).

233.8k](/packages/andreia-filament-ui-switcher)[craft-forge/filament-language-switcher

Zero-config language switcher for Filament admin panels. Automatically scans available translations, renders dropdown with country flags, persists selection via sessions.

1016.4k](/packages/craft-forge-filament-language-switcher)

PHPackages © 2026

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