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 Pinnable Navigation Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a presentation-layer plugin for Filament 5 panels: it registers via 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.
  • That narrow scope is the core architectural argument in its favour: the blast radius of failure is navigation cosmetics, not data integrity or authorization. A rendering regression or an abandoned dependency degrades UX; it does not breach tenant boundaries or corrupt state.
  • It does, however, sit on Filament's navigation rendering path, which is among the more frequently refactored areas of the framework. Every Filament minor release that touches nav groups, clusters, or collapsed-sidebar behaviour is a potential break. Evidence of this is already in the changelog: v1.0.2 fixed clustered items leaking into the main sidebar (#1), v1.0.4 fixed pinned items in collapsed sidebar (#4), v1.0.5 fixed pin button positioning and collapsed icon centering (#7). Five patch releases in the first series is a signal of a young package still finding its edges against real-world panel configurations.

Integration feasibility

  • Hard requirement: PHP ^8.2 and Filament ^5.0. This is a binary gate. If the target panel is on Filament 3 or 4, this package is simply not an option until the Filament upgrade ships — there is no backport path.
  • Installation is a single 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.
  • Default persistence is browser localStorage, keyed by panel and authenticated user. This is the path of least resistance: no migration, no schema ownership, no DBA review, no data-retention question. It is also the path with the most user-visible limitation — pins do not follow a user across devices or browsers, and are lost in incognito or with cleared storage.
  • Database persistence is opt-in (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.
  • Configuration surface is small but meaningful for a TPM: 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

  1. Are we on Filament 5 today, and if not, when? Everything else is contingent. If the answer is "Q4 at the earliest," this package is a roadmap note, not a decision.
  2. Is localStorage persistence acceptable to the business? If users will file tickets saying "my pins vanished when I switched laptops," the answer is no, and we must budget for DB mode plus its schema and tenancy implications.
  3. Do we want 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?
  4. How crowded is our navigation already? Pinning is a remedy for long, deep sidebars. If our panel has six items, this is a solution without a problem and the honest answer is "defer."
  5. Do we need admin- or org-level pin curation (e.g., "everyone gets these five shortcuts by default")? The package offers per-user pins only; org-level defaults would be bespoke work.
  6. What is our exit plan? Who owns the fork if the maintainer goes dormant, and what's the trigger (no release for two Filament minors, or an unfixed nav regression)?
  7. Does anything else in our panel already hook navigation — clusters, custom nav groups, third-party nav plugins? The v1.0.2 cluster fix tells us this is a known collision surface and belongs in the test plan.

Integration Approach

Stack fit

  • Good fit for a standard Laravel + Filament 5 admin panel using Filament's default navigation. No additional runtime dependencies, no queue workers, no external services.
  • Poor fit where navigation is heavily customised in Blade, or where multiple packages already extend the sidebar. Overlapping nav customisations are the highest-probability source of visual regressions.
  • Ships prebuilt CSS/JS through Filament's asset manager, so it works in deployments that build PHP only — a real convenience for teams without a Node step in CI.
  • No multi-tenant primitives. Single-tenant panels: fine either mode. Multi-tenant panels: localStorage mode is safe by accident (per-user browser scope), DB mode is not safe by default and needs a tenant_id column plus a scoped query overlay.

Migration path

  1. Confirm Filament 5 on the target panel. If not, sequence the Filament upgrade first; do not attempt a parallel adoption.
  2. Pilot on one panel, ideally a non-customer-facing internal admin, with show_in_resource and accordion_mode set deliberately rather than inherited.
  3. Start in localStorage mode. Zero schema change, zero DBA involvement, trivial rollback (remove plugin, remove composer line). This is the cheapest way to learn whether the feature earns its keep.
  4. Only then decide on DB persistence — driven by a concrete requirement (cross-device continuity, auditability, or org-level defaults), not by preference. If approved, publish migrations, name the migration owner, and extend the table for tenancy before first production write.
  5. Lock the version in 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.
  6. Document the removal recipe in the panel's runbook: one composer remove, one line deleted, done. That cheapness is the package's best risk mitigant and should be written down while it's fresh.

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

  • Place this after the Filament 5 upgrade lands and stabilises, and after the panel's navigation information architecture is settled. Pinning paper over a badly organised sidebar is a false fix; reorganise first, then offer pinning as a power-user accelerator.
  • Treat it as a UX experiment with a kill criterion: if a pilot panel shows low pin adoption after four weeks, remove the package rather than carry an unused dependency. Committing to the exit criterion up front is what makes a low-maturity dependency a defensible choice.

Operational Impact

Maintenance

  • Recurring cost is upgrade absorption, not code authoring. Budget a few hours per Filament minor release to bump the package and re-run the compatibility matrix; the 1.0.x history suggests the maintainer patches reasonably quickly, but not instantly.
  • No internal code to maintain in localStorage mode. DB mode adds a table to the estate, which means migrations on every Laravel upgrade path and a named owner.
  • Vendor concentration risk is the headline: one maintainer, no dependents, no visible SLA. Mitigate with version pinning, an internal fork option reserved under MIT, and a documented trigger for exercising it. Cheap because the code is small.

Support

  • Support load should be low but non-zero: the predictable tickets are "my pins disappeared" (cleared storage, incognito, different browser, or a panel-ID change after a rename) and "the pin star overlaps my custom icon."
  • Note that localStorage keys are scoped per panel ID — renaming a panel ID silently orphans every user's pins. That is a one-line operational footgun worth putting in the runbook.
  • Maintainer support is best-effort via GitHub issues, with a commercial route (custom work, tailored forks) available through the vendor. That's actually a reasonable escalation ladder for a package this size — free OSS with a paid off-ramp beats a package with no off-ramp.
  • README and changelog are adequate for what the package does; documentation gaps are around advanced/multi-tenant use, not basic setup.

Scaling

  • Performance impact is negligible. localStorage mode adds no server work at all. DB mode adds a small per-page-read scoped to one user; in realistic panels (tens of thousands of users) this is noise next to Filament's own query load.
  • Write volume is bounded by how often humans click a star. Non-issue.
  • The scaling concern is operational, not technical: as the number of panels and Filament plugins grows, so does the surface for nav conflicts, and each new panel needs to be checked against the matrix.

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

  • Engineering: under an hour to install, register, and verify on a pilot panel for anyone comfortable with Filament plugins. Total internal knowledge is a plugin registration line and a published config file — no specialist to hire, no training debt.
  • End users: pinning is a near-universal interaction metaphor. Expect zero formal training; the affordance (a star in the sidebar) should be self-evident, and show_in_resource extends it to the page header for discoverability. A single line in the release notes is proportionate.
  • Rollout: pilot one panel, behind the plugin line itself as the feature flag (removing it is the rollback). Capture adoption signal from day one — how many distinct users pin at least one item, and which items are pinned most — because that data is what converts this from an interesting add-on into a justified dependency, or justifies removing it cleanly.
  • Product measurement: the value hypothesis is reduced navigation time for power users. Pinning adoption plus a directional drop in sidebar-search or nav-click depth is enough to make the call. Do not over-instrument a 12-star UI plugin; measure enough to decide keep-or-kill, and then decide.
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.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table