vaslv/filament-topbar-menu
A Filament 5 plugin that adds a configurable topbar menu right after the logo, linking to external URLs or named Laravel routes with nested dropdowns, icons and favicons, visibility rules, automatic caching, a full resource with drag-and-drop reordering, a responsive mobile panel, and 13 bundled tra...
composer require and a migration.resource(false), ->mobileSidebar(), renderHook(), mobile(false)) let one codebase serve an admin panel with full management and a public/light panel that only displays the menu. That supports decisions about whether to split panels.Consider it when all of the following hold:
Look elsewhere (or build) when:
roles key not editable in the form and depends on a hasAnyRole() method on the user model (e.g. spatie/laravel-permission). If our authorisation story is different, this is friction.navigation(false) and want the in-sidebar mobile variant — there is no sidebar to render into.Diligence to complete before adoption: confirm Filament 5 is actually our target; run the demo seeder in a staging panel; verify the mobile behaviour on a long-navigation panel (this is where the second-button UX either delights or confuses); review the favicon fetching path against our SSRF/egress policy; check ext-intl presence since two behaviours degrade silently without it; and check CI matrix expectations (MySQL/Postgres, PHP 8.2–8.4) against our infrastructure.
For executives — one paragraph. We have a decision to make about how our admin panel links out to the rest of our internal tools. Rather than hard-coding a navbar and paying engineering every time a link changes, we can adopt a small, MIT-licensed Filament plugin that turns that menu into an admin-managed list: our ops team adds, reorders, and hides links themselves, with sensible visibility rules and full theme consistency. It is cheap to try, cheap to remove, and it converts a recurring engineering chore into a self-service task. The trade-off is that it is a young, single-maintainer package with limited public adoption, so we should treat it as a low-criticality component, pin the version, and be ready to fork it — which the licence permits.
For engineering — the case. It is a thin, well-bounded plugin: one table, one Filament resource, one render hook (TOPBAR_LOGO_AFTER), no layout overrides, no compiled assets, and it reuses Filament's own topbar, dropdown, and sidebar classes so it inherits our theme and dark mode for free. It handles the awkward parts we would otherwise get wrong: cached rendering with automatic invalidation, route resolution that skips missing routes instead of throwing, per-item target semantics that don't get silently overridden by config, favicon resolution kept out of the render path, and a mobile presentation that doesn't bury the menu under the panel's own navigation. It ships with tests, PHPStan, Pint, a changelog with a documented release process, and a CI matrix covering PHP 8.2–8.4, prefer-lowest, MySQL/Postgres, and the no-ext-intl case — unusual rigour for a package this size. Known limits: two levels only, no rich permission UI, and a single-maintainer bus factor. Recommended posture: adopt behind a pinned constraint, exercise it in one panel first, and keep the migration/config publishable so we retain an exit path.
For the design/UX partner. The desktop menu is rendered with Filament's own top-navigation components, so it is pixel-identical to what users already see, including active-item highlighting and spacing. On mobile it becomes its own slide-in panel with its own button next to the hamburger — a deliberate choice so the menu isn't lost beneath a long sidebar — with an in-sidebar variant available via one method call if a panel's navigation is short.
How can I help you explore Laravel packages today?