Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filament Db Config Laravel Package

inerba/filament-db-config

DB Config is a lightweight Filament plugin offering a database-backed key/value store for application settings and editable content. Manage config values and content directly from your Filament admin panel without touching files or redeploying.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Thin, single-purpose layer: a JSON-backed key/value table plus Filament admin surfaces. It slots in cleanly for the narrow case it targets — labels, contact info, hero copy, feature toggles, small editable blocks — where a developer would otherwise hand-build a settings page.
  • Poor fit for anything typed, sensitive, or governed: no value schema, no encryption-at-rest, no revision history, no environment promotion. Configuration stored here lives only in the database, so it leaves version control, code review, and rollback behind.
  • The package competes directly with Spatie Settings and says so in its own README. The honest trade is type safety and structure for zero boilerplate.

Integration feasibility

  • Low effort. composer require → publish config + migration → php artisan migrate → php artisan make:db-config {Group} → fill in fields. Reads via db_config(), @db_config, or the static class; safe_db_config() for boot-time paths.
  • Hard compatibility gate: Laravel 12 and Filament 4/5 only, on a JSON-capable DB (MySQL 5.7+/MariaDB 10.2.7+/Postgres/recent SQLite). On Filament 3 or Laravel ≤11 you are blocked outright.
  • Documentation is internally inconsistent and will cost hours: the Getting Started section shows a form(Form $form) method while Advanced Usage and the bundled agent skill use content(Schema $schema); the README documents make:db-config {name} {panel} with a second argument while the shipped SKILL.md explicitly forbids one. Verify every signature against the installed version before your team writes patterns around it.
  • The README claim "no migrations to write — ships with its own schema" is a marketing overstatement: you publish and own a migration that lands in your app. You therefore own the table's shape, and package-side schema changes on upgrade require manual reconciliation.

Technical risk

  • Adoption signal is weak: 37 stars, 0 dependents, single maintainer, no vendor. This puts a critical admin surface on a bus-factor-1 dependency. There is no evidence of a security review.
  • Cache default TTL is null (forever). Cache invalidation correctness is therefore a production-critical behavior, not an optimization detail.
  • Storage is untyped JSON: renaming a key or changing a field type silently orphans data, and nothing enforces required keys.
  • No audit trail, no approvals, no undo. Any user with access to the generated page can rewrite public-facing copy.
  • The package ships agent-facing instructions that tell coding assistants not to write tests for settings pages and not to create files manually — a governance signal to note if your team uses AI-assisted workflows, since the skill contradicts the README.

Key questions

  1. Who maintains this, and what is the stated plan for Filament 6? What did the Filament 3→4→5 transitions cost?
  2. Does a write invalidate the cache cluster-wide, or only the local store? Is there a documented flush?
  3. What is the intended authorization model for generated pages — canAccess(), policies, or nothing beyond panel access?
  4. Multi-tenancy and localization are unaddressed: can settings be scoped per tenant or per locale, or is the group key global?
  5. What happens on a deploy that runs before migrate? Is the missing-table path graceful?
  6. Practical payload ceiling — how much rich text/JSON per group before getGroup() becomes a per-request cost?

Integration Approach

Stack fit

  • Requires a Laravel 12 app with an existing Filament 4/5 panel, a shared cache store (Redis/Memcached), and a JSON-capable database. If you are on Filament 3, stop here — there is no backport path.

Migration path

  • In: two vendor:publish tags (config and migrations), migrate, then one make:db-config call per settings surface. Roughly half a day for a first working page.
  • Out: minimal lock-in. The db_config table is a plain key/value JSON store, so exiting is a script that reads rows and writes them into config files or a typed Settings class. Budget under a day. The real switching cost is any Blade templates that adopted @db_config.

Compatibility

  • The package registers a global db_config() function and a @db_config Blade directive at boot — check for name collisions with existing helpers, and confirm CI/container boot tolerates a missing table (safe_db_config()).

Sequencing

  1. Branch spike: install, migrate, one page, one read on a public render, one write, then verify propagation across two web nodes with your real cache driver. Do not proceed without this.
  2. Write a one-page internal standard before anyone seeds content: which values live in config/ vs the database, group naming convention, and the rule "no secrets, no per-tenant data."
  3. Scaffold only pages you need today. Avoid turning it into a CMS — repeaters and rich text are supported, but there is no revision history to recover from an editing mistake.
  4. Add canAccess()/policy gating to every generated page against a dedicated permission, not just panel access.
  5. Seed defaults via getDefaultData() plus a seeder so fresh environments aren't blank and staging/prod start aligned.
  6. Adopt on the read side last, using safe_db_config() in providers, middleware, and any boot-time path.

Operational Impact

Maintenance

  • Ongoing cost is low: a config file and a handful of generated page classes. The recurring cost is upgrade coupling — Filament majors reshape the Schema/Form API, and a 37-star install base won't surface your breakage. Reserve about half a day per Filament major version.

Support

  • GitHub issues only, no commercial support, thin issue history. Your edge case is probably unreported, and response time is unknown. Treat the author as a courtesy channel, not an SLA.

Scaling

  • Read cost is negligible behind a shared cache. Two scaling caveats: getGroup() loads every key in a group, so keep groups small and avoid parking large rich-text blobs where they are read on every page render; and cold-cache stampedes on high-traffic pages are unmitigated by the package.

Failure modes

  • Deploy ordered before migrate → missing table → app-wide 500 on any page touching the helper.
  • Local/file cache with multiple web nodes → stale, divergent settings between servers ("the logo changed on one request out of three").
  • Writes that bypass the package (raw SQL, seeders, another tool) don't invalidate cache → settings appear not to save.
  • Key renames or field-type changes → silent data orphaning with no schema to catch it.
  • Unrestricted editing → any panel user can alter public copy with no audit log, no approval, no undo.
  • TTL-forever plus no documented flush → recurring "why won't the setting change" tickets.

Ramp-up

  • Roughly 0.5–1 engineer-day for a single developer. Higher for a team: the form() vs content() split and the README/agent-skill contradiction reliably cause rework. Publish a short internal readme pinning the package version, the group naming convention, the authorization requirement, and the "no secrets" rule.

Verdict

  • Adopt as a narrowly scoped settings/content store behind an explicit permission, with a shared cache driver and a named owner. Do not adopt if you need encrypted values, per-tenant or per-locale settings, change history, or environment-promoted configuration — Spatie Settings or a small in-house model is the better long-term bet. A composite score of ~19 with 37 stars and zero dependents reads correctly here: acceptable as a convenience, not as a foundation.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table