opscale-co/nova-dynamic-resources
Opscale's Nova Dynamic Resources lets you define Laravel Nova resources at runtime from configuration or database tables, generating dynamic fields, filters, actions, and metrics—eliminating repetitive boilerplate resource classes and speeding up admin panel development.
Architecture fit
opscale-co/nova-dynamic-resources is a Laravel package that extends Laravel Nova by allowing resource fields to be defined dynamically (schema/config-driven) rather than hard-coded in PHP resource classes. It fits cleanly into the standard Laravel package model — service provider registration, Nova tool/field bootstrapping, and config publishing — so it composes with an existing Nova installation without altering the host application's domain layer. The v1.12.0 addition of a multiselect catalog-backed field strengthens the fit for admin panels where selection options are data-driven (e.g., taxonomy, product catalogs, lookup tables) instead of enumerated in code, which is the primary reason teams adopt dynamic resource packages in the first place.
Integration feasibility The change is additive and shipped as a minor version (1.12.0), so integration effort is low: no migration is required for existing field definitions, and adoption is opt-in per field. Feasibility is high provided the team already runs Nova at a compatible major version and has a working dynamic-resource schema. The catalog-backed behavior implies the package resolves option sets from application data or a configured provider — the main integration work is confirming that resolution path (Eloquent model/query vs. custom resolver) matches how the host app models its catalogs.
Technical risk
Key questions
{id,label} objects) and are they stable across catalog mutations (renamed/deleted entries)?Stack fit Assumes Laravel + Nova with the package already or newly installed via Composer. The multiselect field is a Nova field type surfaced through the package's dynamic schema, so it requires no changes to the host application's controllers or routing. If catalogs live in Eloquent, the field can reuse existing models; if they live behind a service or external API, a resolver/adapter will be needed.
Migration path
^1.12 in composer.json and run composer update opscale-co/nova-dynamic-resources in a branch.vendor:publish --force only where safe).Compatibility Minor release with no stated breaking changes; existing dynamic field definitions should be unaffected. Confirm the installed Nova major version remains within the package's supported range, and validate that array-valued fields serialize correctly through any existing API resources, exports, or Nova filters.
Sequencing Pilot field → staging validation (persistence, validation, catalog resolution) → confirm option-loading performance on the largest catalog → production rollout per resource → documentation update for internal field-definition conventions. Keep the previous version pinned in the lockfile for a fast rollback window.
Maintenance Low incremental maintenance: one dependency bump plus internal docs for the new field type. Catalog-backed fields shift some ongoing ownership to whoever maintains the catalog data — option hygiene (renames, deprecations, deletions) now has UI-visible consequences, so a data-ownership convention is worth defining.
Support Anticipate support requests around "my saved selections disappeared" (catalog entries deleted/renamed) and "the dropdown is slow" (large catalogs without search). Because the release note is thin, the team should treat upstream docs/source as the source of truth and capture internal notes from the pilot.
Scaling Primary scaling concern is option-volume, not request-volume: catalogs in the thousands of entries require server-side search and pagination to stay usable. Stored arrays also grow index/detail payloads and can complicate filtering and reporting queries; consider whether multiselect values need a normalized join table for analytics.
Failure modes
string column or strict validator.Ramp-up Minimal for developers already familiar with the package (new field type in an existing schema DSL). Expect a short learning curve for admins defining dynamic resources, and roughly half a day of engineering to pilot, validate, and document.
How can I help you explore Laravel packages today?