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

Filament Navigation Laravel Package

ryangjchandler/filament-navigation

Filament Navigation is a Laravel/Filament package for building and managing site navigation menus in the admin panel. It offers a drag-and-drop menu builder with custom links, model-linked items, and simple Blade rendering for flexible navigation.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What the package is: ryangjchandler/filament-navigation is a Filament admin-panel plugin that gives editors a tree-builder UI for site navigation menus. Menus are persisted as Navigation records keyed by a handle (e.g. main, footer) and resolved in application code/Blade by that handle. It is the "editors own the menu, developers own the layout" pattern, implemented as a first-party-style Filament resource rather than a bespoke CRUD.

Architecture fit

  • Strong fit for any Laravel app already running a Filament panel: it registers as a plugin (resource + Livewire builder), so it inherits the host panel's auth, policies, routing, and styling with almost no glue code.
  • It is a content package, not a routing package. It does not own URL resolution, middleware, or SEO. That keeps the blast radius small but means link validation, redirects, and sitemap inclusion remain our responsibility.
  • The menu tree is stored as a denormalised payload on the Navigation record rather than as relational rows. This is the central architectural trade-off: cheap reads and trivial reordering, no referential integrity, no per-item querying, and no DB-level audit of individual links.
  • Beta status means the public contract is the handle string plus a render helper. Handles are effectively code identifiers referenced in templates, so the schema can churn but the handle naming convention must be treated as an interface we govern.

Integration feasibility

  • Low effort: composer require, publish + run the migration, register the plugin in the panel provider, seed a main menu, render in the layout. Realistically an afternoon for a developer familiar with Filament, half a day of review.
  • No external services, no queue workers, no additional infrastructure. Single migration, single table family.
  • Rendering into Blade and into API responses both need a thin adapter we write (caching + array/JSON shaping), since the package's job ends at "give me the active tree."

Technical risk

  • Pre-1.0 churn. Six betas in, version pinning is mandatory ("ryangjchandler/filament-navigation": "1.0.0-beta6"). Any ^1.0@beta constraint invites a surprise breaking change into CI.
  • Handle integrity is the top production risk, and this release is directly relevant. Per the notes, editing a navigation's name previously overwrote its handle. Because templates and controllers resolve menus by handle, that behaviour could silently blank a live menu after a routine content edit — a content-editor action causing an outage. v1.0.0-beta6 ("Stop name overriding handle on edit page") removes that class of incident. Net: risk reduced, no new risk introduced.
  • Behaviour change to confirm: the fix is scoped to the edit page. We must verify that handle auto-generation from name still occurs on create (expected, and desirable), and that the handle field is now editable only deliberately. Any team that was using the name field as an indirect way to rename handles loses that shortcut — which is the point, but it belongs in the editor runbook.
  • Single-maintainer dependency. The release is one PR from a first-time contributor with an otherwise maintainer-driven cadence. Bus factor and abandonment risk are real, though the surface area is small enough that forking or reimplementing is days, not months.
  • Unvalidated link targets. Editors can store arbitrary URLs/route references; nothing prevents a typo shipping to production. Needs a validation or link-check step.
  • Blob storage. No foreign keys into pages/posts, so deleting a page leaves a dead menu link. If we later want "menu item points at a Page model", this package will not do it without custom link types.

Key questions

  1. Filament version support matrix — is this branch v3-only, and is v4 supported or planned? This gates our panel upgrade timeline.
  2. Multi-panel and multi-tenant scoping: are menus global, per-panel, or per-tenant? What is the isolation story if we run several brands in one install?
  3. Cache invalidation: is there a save/delete hook or model event we can hang cache-busting off, or do we wrap rendering ourselves?
  4. Does the package ship policies/permissions, or do we author them so only comms/marketing roles can edit menus?
  5. Are link types extensible (route, URL, model reference, anchor) or fixed? This determines whether "link to a product" is possible natively.
  6. Migration strategy from beta6 to 1.0 — will published migrations be amended (requiring manual reconciliation) or appended?
  7. Localisation: per-locale menus (one handle per locale) or translated labels within one tree?

Integration Approach

Stack fit

  • Requires Laravel with a Filament panel; PHP and Livewire come along with Filament, so no new runtime dependencies for a Filament shop.
  • If we have no Filament panel, the cost calculus changes completely: this package is not worth standing up Filament for. In that case use a simpler menu package or a hand-rolled resource.
  • Pairs naturally with a Blade layout that already has hardcoded nav markup — that markup becomes the fallback and the seed data.

Migration path

  1. Spike in a feature branch: install, publish migrations, register plugin in a non-production panel, create main and footer.
  2. Port existing hardcoded menus into the builder as seed data; commit a seeder so environments are reproducible.
  3. Replace layout markup with the render call, wrapped in our own cache-aware helper with a hardcoded fallback so a missing/renamed handle degrades to the static menu instead of an empty header.
  4. Only then open the UI to editors, with the handle field documented as developer-owned.
  5. Publish the migration into our own database/migrations and treat the package's schema as ours to manage from that point.

Compatibility

  • Pin to the exact beta (1.0.0-beta6) and record the pin rationale; upgrade deliberately with a changelog read each time.
  • Confirm PHP/Laravel/Filament constraints against our locked versions before starting — the most common beta-install failure is a Filament major-version mismatch.
  • Validate on our oldest supported PHP in CI, not just local.

Sequencing

  • Phase 1 (week 1): spike + render helper + fallback + cache. Deliverable: feature-flagged, no editor access.
  • Phase 2 (week 2): seeder, permissions/policy, editor runbook, link validation.
  • Phase 3: enable for one low-risk menu (footer) → observe → roll out to main and any locale variants.
  • Gate all of it behind a config flag so reverting to hardcoded markup is a one-line change during the first month.

Operational Impact

Maintenance

  • Low ongoing code maintenance; the real cost is upgrade stewardship. Budget a recurring half-day per beta bump for changelog review, dependency resolution, and a smoke test of menu rendering.
  • We own the published migration and the handle naming convention. Renaming a handle is a code change plus a deploy, not a content edit — document this loudly, because the beta6 fix now makes that distinction enforceable in the UI.
  • Fork readiness: keep the render helper behind our own interface so replacing the package is a swap, not a rewrite.

Support

  • Community-supported only: GitHub issues/PRs, no SLA, no vendor to escalate to. Acceptable for a non-revenue-critical nav menu; not acceptable for anything on the checkout path.
  • Internal support model: dev team owns the package and handle registry; comms/marketing owns menu content and ordering. That boundary needs to be explicit or editors will file tickets for "the menu is empty."

Scaling

  • Read path is a small indexed lookup plus tree decode; with a cache layer in front it is effectively free. Fine for high-traffic marketing sites.
  • Write path is a single record update — concurrent editors on the same menu will last-write-wins, so for a large editorial team restrict edit rights per handle.
  • Degradation points are editorial, not technical: very large menus (hundreds of items) become unwieldy in the builder, and per-locale duplication multiplies records linearly. Neither is a traffic-scaling concern.

Failure modes

  • Handle drift → template resolves nothing → blank navigation on production. Primary mitigation is beta6 itself; secondary is our fallback-to-static-menu wrapper.
  • Deleted/renamed target → 404 from the menu. Mitigate with a scheduled link check and a review queue.
  • Missing migration in a new environment → resource loads but queries fail. Mitigate with deploy checklist and a seeder-based smoke test in staging.
  • Upgrade schema drift → payload shape changes between betas; mitigate by pinning and by validating decoded items before render.
  • Permission gap → editors gain panel access and can alter every menu. Ship policies in the same release as editor access, not after.
  • Cache staleness → editors save, visitors see the old menu. Hook cache-busting into the model save/delete events from day one.

Ramp-up

  • Developer: ~0.5–1 day to productive, mostly Filament conventions and the render helper.
  • Editor: minutes — it is a drag-and-drop builder; the training content is not the UI but two rules: never rename a handle, and check links before publishing.
  • TPM/owner: needs to maintain a handle registry (main, footer, legal, per-locale variants), a link-validation policy, and an upgrade log — the artefacts that keep a beta dependency from becoming tribal knowledge.

Verdict on v1.0.0-beta6: a small, targeted bugfix that removes a genuine production hazard (name edits silently overwriting handle values referenced by code). It does not change the integration shape and introduces no new dependencies or migration steps. Proceed with the pinned version; no architectural reassessment required. The only action item is confirming create-time handle auto-generation still behaves as expected and briefing editors that handle changes are now a deliberate, developer-coordinated action.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core