efriandika/laravel-settings
A simple Laravel package for managing database-backed application settings, with helpers to get, set, and forget key-value values and optional caching for fast access.
settings table, a get/set API, a cache in front of it, and fallback defaults — is routinely needed by any product with admin-tunable values: pricing thresholds, feature toggles, integration endpoints, copy strings, rate limits, retry counts. The PM decision is not "adopt this package" but "do we build this one small seam ourselves or take a dependency." At 54 stars, a last release of January 2017, and a headline of L5.4 support, the honest answer is build it — the pattern is ~a day of work behind an interface, and you keep the code, the schema, and the upgrade path.get/set — so treat it as the floor, not the plan.Consider it when:
Look elsewhere when:
illuminate/* constraint will not resolve and the internal APIs it targets have moved. Assume incompatible until proven otherwise.set() bust the cache? is it per-process or shared?) before you trust it under load.Mandatory verification if anyone proposes adopting it: read composer.json for the PHP and illuminate/* constraints; confirm whether the cache layer invalidates on write and which driver it assumes; check the migration/schema for key length and uniqueness; confirm whether values are serialized or strings-only; check open-issue age and maintainer count. Compare against spatie/laravel-settings (actively maintained, typed, encrypted-at-rest options) and against "40 lines of code we own."
For executives — one paragraph: This is a small, abandoned utility that stores application settings in the database so values can change without a deploy. The capability is genuinely useful — it shortens incident response and removes a class of "config change" tickets from the roadmap — but the package itself was last released in 2017, targets Laravel 5.4, and has effectively no community behind it. I am not recommending we adopt it. I am recommending we spend roughly one engineering day building the same capability in-house, behind a single interface, so we own the schema, the caching, and the upgrade path. That is cheaper over any horizon longer than a year than carrying a 2017 dependency we would have to fork, and it unblocks the admin UI and audit trail we actually want to ship.
For engineering — the ask: Two days, timeboxed. (1) A one-day spike: a settings table, a repository behind an interface, a cache layer with explicit invalidation on write, and defaults — plus three contract tests. (2) A half-day comparison against spatie/laravel-settings and against simply using config + env for values that don't need runtime edits. Decision rule: if the spike is under a day and the contract tests pass, we own it; we revisit the package only if we inherit a Laravel 5.x app that already runs it. (3) Confirm on the way through: which of our current values genuinely need runtime editing versus which are just lazily placed in config. That last question usually shrinks the scope by half.
Framing to avoid: do not present this as adopting a settings framework or as an ecosystem-maturity signal. Fifty-four stars and a four-years-stale release are a reference implementation, not a foundation. Presenting it as momentum invites a comparison against maintained packages on the wrong axis and makes the eventual replacement conversation harder than it needs to be. The pitch is "we're building a small thing we will own," not "we found a library."
How can I help you explore Laravel packages today?