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

Nova Settings Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

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.

  • Adoption maturity: 8 stars, a v1.0.x line, and v1.0.12 being the first contribution from a new author. Treat the maintainer bench as one-to-two people.
  • Internal APIs: v1.0.12 exposes the current attribute value explicitly "for internal use." Anything built on it (custom field types) is unversioned surface area.
  • Cache correctness: stale reads after out-of-band DB edits are the classic silent-failure path.
  • Silent misconfiguration: a mistyped key returns the default rather than erroring — bugs surface as "the setting didn't apply," not as exceptions.
  • Secrets: the backing store is your application database. This is not a vault and should not be positioned as one.

Key questions to resolve before committing.

  1. Which Nova majors are supported, and how is that verified (composer constraints vs. tested matrix)?
  2. Does the read path cache, and is the cache invalidated on save? If not, who owns the caching wrapper?
  3. What authorization granularity exists per group/key — can we let ops edit branding but not integration credentials?
  4. Is there tenant scoping, or do we build our own model for per-tenant settings?
  5. What is the export/backfill path for settings currently living in config files or a homegrown table?
  6. What happens on a fresh environment / CI where the settings table is empty — do reads degrade to defaults?

Integration Approach

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.

  1. Spike (1 week): install in a non-production branch, define three scalar settings (string, boolean, select), prove the read/write/cache loop end-to-end.
  2. Boundary first: put all reads behind an internal SettingsService/repository with explicit defaults and caching. This is the decision that makes the vendor choice reversible.
  3. Pilot group: ship one low-blast-radius group (branding/copy) to a small admin cohort. Measure the ticket deflection it actually produces.
  4. Expand: integrations and operational knobs, once authorization and audit expectations are settled.
  5. Custom fields last: only if a bespoke editor is genuinely required — that is where the "internal use" API risk lands.

Operational Impact

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.

  • Stale cache after direct DB edits, seeders, or data migrations — route all writes through the package or flush explicitly.
  • Silent default returns from a key typo — enforce a config-declared key registry and fail loudly in tests.
  • Environment drift — production-edited values are data, not code; they do not travel with deploys. Seed anything that must be identical across environments.
  • Permission gaps — a settings screen is a production-behavior change surface; group-level authorization is not optional.
  • Un-tagged 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.

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.
uni-method/symfony-lib
tacticmedia/scim-server-bundle
neika-ai/symfony-bundle
mattleads/agent-publishing-bundle
glavweb/framework-bundle
glavweb/extra-bundle
glavweb/api-bundle
glavweb/admin-bundle
adachsoft/api-version-bundle
elsayed85/laravel-api-exceptions
ouhssini/laravel-demo-mode
daworks/ncloud-outbound-mailer-driver
gp247/cms
ignibyte/aic-gates
nexa-merchant/blog
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager