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.
Basis and confidence: Assessed from the README-level description, the v1.2.5 release note ("Added Support to L5.4"), the stated license and star count. No composer.json, changelog history, CI matrix, or issue tracker was inspected. Conclusions about version support and dependency health are hypotheses to verify, not findings.
Architecture fit: The package is a thin convenience layer, not an architectural component — a database-backed key-value store with get/set, a service provider, a facade, and a cache in front of the table. It slots into the Laravel idiom cleanly. The real architectural question is not "does it fit" but "do we want runtime-mutable application settings at all," because that is a product and operations decision the package quietly makes for us:
config/ is versioned and diffable; a settings table is per-environment state that must be seeded, promoted, and reconciled. Settings drift between staging and production is now possible.config(), environment variables, and feature-flag tooling already cover most of the stated use case. We should be able to name the gap this fills — typically "non-engineers must change a value without a deploy" — before funding an integration.Integration feasibility: Mechanically small. The effort is in registration and lifecycle, not code:
config/app.php by hand and must be documented in the runbook, or fresh environments boot broken.illuminate/* constraints almost certainly exclude PHP 8 and Laravel 9+. On a current application, composer require will fail outright; the realistic path is a maintained internal fork, which converts a dependency decision into a maintenance commitment.Technical risk: Dominated by lifecycle, not code quality.
set on one node can leave others serving stale values indefinitely — a class of bug that shows up as "the setting didn't take" and is expensive to diagnose.Key questions:
composer.json constraints for PHP and illuminate/*, and does our target application actually resolve them?Recommendation: Treat the package itself as a reference implementation, not a dependency. The capability is roughly a migration plus a hundred lines of a typed repository behind an interface, or an actively maintained alternative such as spatie/laravel-settings. Adopt efriandika/laravel-settings only if the consuming service is genuinely pinned to Laravel ≤5.4 and the time saved outweighs a fork obligation.
Stack fit: Entirely determined by our Laravel baseline. On a legacy 5.x application this is a drop-in enabler. On Laravel 9/10/11/12 it will not resolve and is not a candidate without a fork. Decide the stack question first; it collapses the rest of the evaluation.
Build vs. buy vs. fork:
| Option | Cost | Risk | When to choose |
|---|---|---|---|
| Adopt as-is | ~1 day | Abandoned upstream; fork likely within a year | Legacy 5.4 app, short remaining lifespan |
| Internal fork | ~2–3 days initial, ongoing ownership | We own it, but we control it | Legacy app with a long tail, or a specific bug to fix |
| Native implementation | ~2–4 days | None beyond our own code | Any modern stack; recommended default |
| Maintained alternative | ~1–2 days | Depends on that project's cadence | Feature parity needed and a live maintainer matters |
Migration path: Regardless of choice, put the capability behind a narrow internal seam — a SettingsRepository interface with get/set/forget and explicit typing — and let exactly one adapter class know about the package. This costs hours now and turns any future rip-and-replace into a single-file change. If adopting, pin the exact version (1.2.5), not a caret range, and loosen only after contract tests are green.
Compatibility checks before merging:
composer why-not against the target application to surface conflicts early.settings table name does not collide with an existing or planned table.Sequencing:
Maintenance: Assume we own the integration and, in practice, the package. Budget recurring effort for version-pin reviews, Composer conflict triage at every PHP and Laravel upgrade, and periodic re-checks of upstream activity. If upstream stays dormant — the base case given a 2017 last release — the fork decision should be made deliberately and early, with the MIT license verified as permitting it, rather than discovered during an incident.
Support: No SLA. Establish an internal owner, an escalation path, and a documented procedure for changing a setting in production — including who may do it and what evidence is retained. Settings that alter behaviour without a deploy and without an audit trail are a governance gap, and someone in risk or audit will eventually ask.
Scaling: The package adds a read on a path that is presumably cached; the table stays small. No meaningful scaling risk from the package itself. The scaling axis that does matter is cache invalidation across nodes: with one app server this is a non-issue, with several it becomes a consistency question that must be answered before rollout, not after the first "stale value" report.
Failure modes:
"false" evaluates truthy, "0" and "" are ambiguous; a wrong coercion flips a feature on.Ramp-up: Low for any Laravel-fluent engineer — the surface is a provider, a facade, and a few methods, well under a day to first working integration. The real ramp-up is organisational: someone must own the settings-change process, the upgrade-and-watch obligation, and the eventual fork-or-replace decision. Assign that owner before adoption. A convenience package that nobody owns is how a two-day win becomes a recurring line item.
How can I help you explore Laravel packages today?