devletes/filament-pinnable-navigation
Filament plugin that lets users pin sidebar navigation items into a dedicated Pinned group, with localStorage or database persistence, configurable icons, group title, accordion mode, and a page-header pin toggle for resources.
Architecture fit
PinnableNavigationPlugin::make() on a panel and injects a synthetic "Pinned" navigation group, sidebar toggle controls, and an optional page-header pin/unpin action on resource index pages. It does not touch models, policies, or business logic.Integration feasibility
composer require plus one plugin registration line, with an optional config publish. Realistically under an hour for a working pilot on a panel that already meets the version constraints.database_enabled), requires publishing the package migration and creating pinned_navigation_items. That shifts the package from "stateless UI add-on" to "owns a table in our schema," which raises the bar: migration review, backup/retention policy, and questions about tenancy columns the package does not ship.accordion_mode (default true) changes navigation-group behaviour panel-wide, not just for pinned items. Adopting the package with defaults therefore silently alters existing navigation UX for every user — this needs an explicit decision, not an inherited default.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Single-maintainer, bus-factor 1 | Medium | Authored by an individual who also sells Filament contract work; the README's "Need something custom?" section is a commercial funnel. Support continuity is not contractual. |
| Ecosystem immaturity | Medium | 12 stars, 0 dependents, opportunity score 34.23. No independent production validation to lean on. |
| Upgrade churn against Filament 5 | Medium-High | Six releases in the 1.0.x line, four of them bug fixes against navigation edge cases. Expect to absorb upgrades rather than pin-and-forget. |
| Version lock to Filament 5 | Medium | Constrains the panel's framework upgrade timetable; the package must ship a compatible release before we can move. |
Shipped minified assets (dist) |
Low-Medium | Convenient for container builds that skip a frontend toolchain, but the distributed JS is not easily reviewed or patched in place. Audit once at adoption. |
| No first-class multi-tenancy | Medium (conditional) | Only material if DB persistence is enabled in a multi-tenant panel; the shipped table has no tenant column, so scoping would need custom work. |
| MIT licence / forkability | Positive | Worst case, we vendor or fork. The code surface is small enough that a fork is a day of work, not a quarter. |
Key questions
accordion_mode on? The default changes global navigation behaviour. Who signs off on that UX change, and have we tested it against panels with many groups?Stack fit
tenant_id column plus a scoped query overlay.Migration path
show_in_resource and accordion_mode set deliberately rather than inherited.composer.json (exact or tilde-pinned), and add a composer outdated check to the weekly ritual so Filament 5 minor releases get paired with a compatible package release.Compatibility matrix to test, not assume
| Surface | Why it matters |
|---|---|
| Panels using Filament clusters | Direct history of leakage into main sidebar (fixed in 1.0.2) |
| Collapsed sidebar state | Fixes in 1.0.4 and 1.0.5; verify icons, dropdown, and pin affordances |
| Custom theme / CSS overrides | Pin icons and group styling may inherit unexpected tokens |
| Mobile / narrow viewport | Sidebar behaves differently; pin toggles must remain reachable |
| Third-party nav-altering plugins | Highest risk of duplicate or suppressed controls |
| Resource index pages with custom header actions | show_in_resource inserts a pin action into the page header; check for crowding |
Sequencing against the roadmap
Maintenance
Support
Scaling
Failure modes
| Failure | User-visible impact | Mitigation |
|---|---|---|
| Filament 5 minor release breaks the plugin | Pinned group misrenders or disappears | Version-pin Filament and the package together; stage upgrade first |
| Asset bundle fails to load (CDN, cache, CSP) | Pin buttons silently absent — no error shown | Add a smoke check to post-deploy verification on one panel |
| localStorage cleared / incognito / device switch | Pins lost, users perceive data loss | Set expectations in release notes; escalate to DB mode if it becomes a complaint pattern |
| Panel ID renamed | All existing pins orphaned | Change-control note; treat panel ID as a stable identifier |
| DB mode in multi-tenant panel without scoping | Pins visible across tenants | Block DB mode until tenant column and query scope are in place |
accordion_mode left at default |
Navigation behaviour changes for all users unannounced | Explicit config decision, called out in the release note |
| Maintainer goes dormant | No fixes for future Filament versions | Fork under MIT; assign an owner and a trigger threshold now |
Ramp-up
show_in_resource extends it to the page header for discoverability. A single line in the release notes is proportionate.How can I help you explore Laravel packages today?