ferdiunal/nova-settings
A Laravel Nova package for managing application settings from the Nova admin panel. It provides a settings UI and storage for editable configuration values, making runtime settings easy to view and update without code changes.
Architecture fit. The package is a thin Nova presentation layer over spatie/laravel-settings: Spatie owns typed settings definitions, persistence, and the read API; this package owns the admin editing surface inside Nova. That split is the single most important architectural fact for a TPM — most of what you'd actually depend on at runtime (storage schema, typed casting, caching behavior) belongs to a mature, widely adopted dependency, while the added value here is a CRUD screen you would otherwise build yourself (1–2 sprints plus ongoing field-type maintenance). It fits cleanly only if the application already runs Laravel Nova; without Nova it delivers zero value, and if the org is moving toward Filament/Inertia/Livewire admin panels, this is a dead-end dependency.
Integration feasibility. Low-ceremony: composer require, publish config and migrations, migrate, register the tool in NovaServiceProvider, read via the settings helper. The realistic first-value delivery is days, not sprints, assuming a Nova-provisioned environment. The friction is not installation but decisions — table naming, key registry ownership, caching, and who is authorized to edit which group.
Technical risk.
Key questions to resolve before committing.
Stack fit. Laravel + Nova + PHP, with spatie/laravel-settings as the effective persistence dependency and a standard settings table. The stack fit is binary: Nova yes or Nova no. There is no meaningful partial adoption.
Migration path. Two realistic sources of truth to migrate from: scattered config/*.php values, and an existing homegrown settings table (naming collision on a generic settings table is a real hazard — resolve it in the published migration before running it, not after). Recommended path: inventory the values that genuinely need non-developer editing, define them as typed fields grouped by domain (mail, branding, integrations, feature flags), backfill from existing config, then flip reads over one group at a time. Keep config as the default/seed and the Nova editor as an override so environments stay reproducible.
Compatibility. Pin ^1.0 and upgrade deliberately. The package's composer constraints are the authority on Nova compatibility — do not upgrade Nova independently of a compatibility check. Because the risky surface is bounded (custom field subclasses only), patch bumps within 1.0 should be low-cost, but the pin should be a conscious policy, not inertia.
Sequencing.
SettingsService/repository with explicit defaults and caching. This is the decision that makes the vendor choice reversible.Maintenance. Budget for ownership transfer. A one-to-two-maintainer community package at v1.0.x should be tracked as "we may fork or replace this in 12–18 months," not as infrastructure. Concrete cost: pinning discipline, changelog review each release, and a lightweight test that exercises any custom field subclass so a patch release fails loudly.
Support. There is no SLA, no security review, and no LTS. If the org has vendor-risk gates, this will not clear them without a named internal owner. The mitigating factor is genuine: because the read layer is Spatie's and our access is behind our own service boundary, replacement is a contained change rather than a refactor. Say that explicitly when seeking approval.
Scaling. Settings are read often and written rarely — the textbook caching case, and also the textbook performance trap. Uncached, a settings lookup becomes a per-request database query; the required guardrail is wrapping reads in a cache with invalidation on save, whether or not the package does it for you. Multi-tenant scale is the harder constraint: if scoping isn't supported out of the box, this package should hold global configuration only, with tenant-aware settings modeled as a first-class Eloquent model.
Failure modes to design against.
vendor:publish overwriting customized config — publish once, commit, diff before re-publishing.Ramp-up. Engineering ramp-up is near-zero for anyone who has shipped a Nova tool; the install-to-first-setting path is hours. The real ramp-up is organizational: product, ops, and support need a documented runbook (what's editable, by whom, how changes are logged, how to revert), and support needs the triage order — row exists → cache fresh → key name matches → the field actually saved. Without that, "the setting didn't take" becomes an engineering ticket every time, which defeats the point of buying this.
How can I help you explore Laravel packages today?