van-ons/filament-navigation
Filament Navigation is a Filament plugin that adds a Navigation resource for building structural navigation menus with a clean drag-and-drop UI. Install via Composer, run migrations, publish assets, and register the plugin in your panel provider.
Architecture fit. van-ons/filament-navigation is a deliberately narrow package: it registers a Navigation Filament resource with a drag-and-drop tree editor, persists menus in a package-owned table, and leaves retrieval/rendering to the host application. For a Laravel app that already runs Filament v4 for its admin surface, this is close to a zero-architecture-change addition — no routing layer, no template engine, no content-model abstraction, no opinion about our frontend. The blast radius is confined to (a) one migration, (b) published frontend assets, (c) one Blade partial we own.
The caveat a TPM must price explicitly: this package solves authoring, not rendering. It gives editors a menu builder and gives us a structured tree; recursive rendering, active-state detection, URL resolution, caching, and cache invalidation are all ours. That is a feature (no frontend lock-in) and a cost (we own the visible output and its bugs). It should be budgeted as the latter.
Integration feasibility. Low. The documented path is three commands (composer require van-ons/filament-navigation:^2.0, php artisan migrate, php artisan filament:assets) plus one ->plugin(FilamentNavigation::make()) line in a panel provider. No service-provider configuration of consequence, no queues, no scheduled jobs, no external service, no credential handling. A single engineer can validate it in an afternoon against a throwaway panel.
Technical risk. The risk is not code quality — it is supply-chain continuity and hard version coupling:
ryangjchandler/filament-navigation, discontinued upstream in August 2025. Van Ons (a Dutch agency) has kept the original author's credit and split the line: v1 for Filament ≤v3, v2 for Filament v4+. That is a responsible fork, but continuity now rests on one agency rather than a foundation-backed project.Mitigating factors: MIT license, full source in vendor/, a plain JSON column, no compiled binary or opaque service. If Van Ons walks away, vendoring or forking is realistic for a package this size. That exit is cheap enough to plan for rather than assume away.
Key questions.
handle (or equivalent) enforced at the database level, or only in the form? Our seeding and template contract both assume lookup returns exactly one record.composer.json declare, and does the CI matrix actually cover the version we run — or only latest?docs/compatibility.md, and does it match our composer.lock?Stack fit. Good, and strictly conditional. If Filament v4 is already our admin stack, this is additive. Adopting Filament solely to obtain a menu builder is not justifiable — a hand-rolled CRUD resource is less total weight than a new admin framework plus a plugin. Confirm the Filament dependency first; the rest follows.
Migration path. Two starting states:
ryangjchandler/filament-navigation: verify the fork's schema matches what we already have on disk before running migrations, then swap the Composer requirement and the namespace/plugin class. Because the fork is lineage-preserving this is usually a composer + use statement change, but the migration must be diffed, not trusted. The v1→v2 jump is separate and is effectively a hard cutover tied to a Filament v4 upgrade — treat it as one project, not two.Compatibility. Treat version pinning as the primary control: pin the Filament major, pin the package major, and gate upgrades on the package's documented compatibility matrix rather than on ^ resolution. Verify PHP version floor and that our Filament minor is in CI. Record the pinned pair in our dependency policy so a composer update can't silently move us across a breaking boundary.
Sequencing. A defensible order for a TPM to schedule:
Total realistic first-menu effort: 3–5 engineer-days, of which the package itself is well under one.
Maintenance. Code maintenance is near-zero; dependency maintenance is the recurring line item. The release history is Dependabot-driven — Tailwind, PostCSS, autoprefixer, Sortable bumps — meaning the JS build chain, not the PHP, is the drift surface. Budget a small recurring allowance to test and bump this package alongside Filament majors. The fork's single-maintainer-agency status means we should be prepared to contribute a patch upstream rather than wait on one.
Support. No vendor SLA. Support is a community GitHub issue tracker plus an agency's goodwill. The realistic escalation path is: read the source in vendor/, patch locally, optionally upstream a PR. That's acceptable for a package of this size, and should be stated plainly to stakeholders rather than implied as "supported."
Scaling. The access pattern is highly asymmetric: menus are read on essentially every page render and written a handful of times per quarter. The table stays tiny; the risk is render-path cost. Cache the resolved tree (per handle, per locale if applicable) and invalidate on save — that reduces the package to a cold-path authoring tool. Asset publishing adds a step to every deploy that touches the package; it belongs in the pipeline, not in a runbook someone remembers.
Failure modes. Ranked by likelihood and blast radius:
filament:assets on deploy — editor UI breaks silently for admins; frontend still renders. Catch with a smoke check post-deploy.Ramp-up. A Laravel developer familiar with Filament is productive on this package in half a day; a developer unfamiliar with Filament carries the framework learning curve, not the plugin's. The genuine ramp-up cost is the rendering partial and access control — that's ordinary application work with no plugin-specific trapdoors — plus a short handover note on version pinning and the fork/vendor exit. Document both, and the package becomes operationally boring, which for a menu builder is the correct outcome.
How can I help you explore Laravel packages today?