lara-zeus/delia
Delia is a Laravel menu builder from Lara Zeus that makes it easy to define, store, and render navigation menus. Configure menus in code or the database, then output them in Blade with a clean, simple API for fast, maintainable site navigation.
Architecture fit. Delia is a Filament panel plugin, not a general-purpose Laravel library, and it should be evaluated as a plugin in the admin-panel layer rather than as application infrastructure. Its footprint is small and well-bounded: a per-user persistence table, a toggle affordance surfaced through Filament's render hooks, and a filtered navigation view. That shape fits cleanly into a standard Filament panel provider registration and does not require changes to domain models, routing, or the request lifecycle. The architectural risk is therefore not "will this contaminate our app" — it won't — but "does the feature belong in our admin panel at all." At 7 stars and 0 dependents, Delia is a narrow UX feature with a thin dependency surface; treat it as a bounded experiment inside a panel, not as a platform building block.
Integration feasibility. Feasible in an afternoon for a team already on Filament: composer require, publish config and migrations, migrate, register the plugin in the panel provider, republish assets, clear caches. The dominant uncertainty is version pairing, not effort. Delia 3.0.0 exists solely to support Filament 5, which means the package is coupled to your platform major and the install is really a resolution exercise. A dry-run install tells you the real PHP/Laravel/Livewire floors and whether filament/filament is constrained to ^5.0 only. Everything downstream depends on that answer.
Technical risk. Three risks matter to a TPM, in order:
src/*Plugin.php, the migrations, and the config, budgeted explicitly. If that hour is not available, the package is not ready to evaluate.canAccess()), tenancy (does the schema carry a tenant discriminator, or do bookmarks leak across tenants for multi-tenant users), cascade behavior on user and resource deletion, and N+1 query patterns on large nav trees. None of these are documented; all are verifiable in staging in under an hour each.Key questions.
Stack fit. Requires a Filament panel (v5 for Delia 3.x, v3/v4 for 2.x), Laravel and Livewire at the floors declared in composer.json, and standard asset publication for panel CSS/JS. Delia slots in beside existing panel plugins without competing for the same extension points. It does not replace Filament's native navigation — the intended composition is Delia as a pinned/frequently-used surface layered on top of the existing nav tree, so muscle memory is preserved and removal is non-destructive.
Migration path. Two distinct paths, and they should not be conflated:
^3.0, republish assets, run migrations, smoke-test navigation and the bookmark toggle — ideally in the same branch and the same PR. Write the rollback (revert lockfile, roll back migration, clear caches) before starting.In both cases the persistence migration is real (bookmarks are user-generated rows), so treat the schema change as a production change: review the migration file, confirm the foreign key behaves as you expect, and decide the table name before it ships — bookmarks collides easily with an existing app table, and renaming after data exists is avoidable work.
Compatibility. Pin the minor (^3.0.x equivalent), commit the lockfile, and treat Filament patch bumps as events that require re-running the plugin's smoke test — a thin plugin can break on patch-level changes without any signal from the vendor. Model overrides are supported through config, but if you override the model, keep the package's contract intact or the plugin's own Livewire components break at runtime in ways that are tedious to trace. If you fork or override the migration, record the fork decision in an ADR at that moment, because that is the line where "we use Delia" becomes "we maintain Delia."
Sequencing.
make() signature, migration schema (tenant column?), config knobs.config('features.delia') so removal is a one-line change.Maintenance. Low in absolute effort, non-zero in attention. The package is small and MIT, so the work is not patching but watching: version pairing with Filament majors, republishing assets after panel upgrades, and re-diffing any published Blade views you have edited (they fall out of sync silently). Assign a named internal owner. Without one, this dependency will be discovered only when a Filament bump breaks bookmarks and nobody knows when it stopped working.
Support. Vendor support is effectively absent at these adoption levels; the realistic support model is internal triage plus fork-or-reimplement as the escalation path. Plan the budget accordingly: adoption is cheap, but the decision to adopt includes accepting that the second line of support is your own team. Keep the feature flag so the fastest remediation is always "turn it off," not "debug it now."
Scaling. Two dimensions:
Multi-panel estates need a decision rather than a default: register Delia on internal panels only, and explicitly not on customer-facing ones.
Failure modes.
| Failure | Symptom | Detection | Mitigation |
|---|---|---|---|
| Dependency resolution conflict | Install blocks the Filament upgrade | Dry run before touching the lockfile | Version-pair discipline; separate branches |
| Silent persistence regression after a bump | Bookmarks stop saving; no error | CI Livewire assertion; DB assertion | Flag off, pin, fork |
| Tenancy leak | User in two tenants sees the other's bookmarks | Migration review; multi-tenant staging account | Scope query by tenant or restrict to single-tenant panels |
| Authorization drift | Bookmark links resolve to 403s | Policy review; test with a downgraded user | Wrap retrieval in a canAccess() filter |
| Stale compiled CSS / views | "It upgraded but looks broken" | Visual check post-upgrade | Recompile against Filament 5 preset; republish views |
| Orphan rows | Odd bookmark counts months later | Delete a throwaway user in staging | Verify cascadeOnDelete or add cleanup |
Ramp-up. Minimal per developer — the integration is a plugin registration, a config publish, and a migration, all familiar Filament mechanics. The non-obvious cost is the evaluation pass: roughly an hour of source and schema reading to establish version floors, tenancy behavior, and the plugin contract, plus a short pilot. Budget that explicitly and it is a day of work end to end for one engineer. Skip it and the cost reappears as production ambiguity around authorization and tenancy, which is the expensive place to learn.
The product framing to carry into the decision: this is a cheap UX experiment on internal surfaces, riding the Filament 5 upgrade, with a credible one-to-two-day internal build as the alternative. Adopt only where navigation friction is a voiced complaint and a fork owner can be named; otherwise close it out and spend the day on the thing users actually asked for.
How can I help you explore Laravel packages today?