Weave Code
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
Laravel Menu

Laravel Menu Laravel Package

spatie/laravel-menu

Build HTML menus in Laravel with a fluent API. Add links via routes/actions/URLs, customize attributes and classes, and automatically set active items from the current request. Includes macros for reusable menu builders.

View on GitHub
Deep Wiki
Context7

Html menu generator for Laravel

Frequently asked questions about Laravel Menu
How do I create a basic menu using Spatie’s Laravel-menu package?
Use the fluent API to chain methods like `Menu::new()->action('HomeController@index', 'Home')`. Register it as a macro for reuse, e.g., `Menu::macro('main', fn() => Menu::new()->action(...)->setActiveFromRequest())`, then render it in Blade with `{!! Menu::main() !!}`.
Does this package support Laravel 10+ and PHP 8.0+?
Yes, it officially supports Laravel 9–13 and PHP 8.0+. Older versions (5.5–8) may work but aren’t actively tested. Check the [upgrade guide](https://github.com/spatie/laravel-menu#upgrading-to-20) for breaking changes between major versions.
Can I conditionally show menu items based on user permissions?
Absolutely. Use `addIfCan()` with Laravel’s gates: `Menu::new()->addIfCan('view-dashboard', 'Dashboard', route('dashboard'))`. This leverages Laravel’s built-in authorization system for seamless permission checks.
How do I customize menu item attributes (e.g., classes, IDs)?
Chain methods like `->class('active')` or `->id('home-link')` after defining an item. For dynamic classes, use `->class(fn($item) => $item->isActive() ? 'active' : '')`. Macros let you encapsulate reusable attribute logic.
Will this package work with Livewire or Inertia.js?
Yes, but with caveats. For Livewire, render menus directly in Blade. For Inertia.js, serialize menu data to JSON (e.g., via a custom macro) and rebuild the menu client-side. Avoid mixing Blade and Inertia for menus unless necessary.
Can I fetch menu items from a database instead of hardcoding them?
Not natively, but you can create a custom macro. For example, `Menu::macro('fromDatabase', fn() => Menu::new()->items(MenuItem::all()->map(...)))` to hydrate items from Eloquent models. Cache the result to avoid N+1 queries.
How do I test menu logic in PHPUnit?
Mock the `Menu` facade and assert output. Example: `Menu::shouldReceive('main')->andReturn($mockMenu); $this->assertStringContainsString('active', Menu::main());`. Test edge cases like permission checks with `Gate::shouldReceive('allows')`.
Does this package support caching for performance?
No built-in caching, but you can wrap menu generation in Laravel’s cache: `Cache::remember('menu', now()->addHour(), fn() => Menu::main())`. Use cache tags (e.g., `cache([tags: 'user-'.$user->id']))` for invalidation when user roles change.
What’s the best way to handle multi-language menus?
Use Laravel’s `trans()` helper in macros. Example: `Menu::macro('nav', fn() => Menu::new()->label(trans('menu.home')))`. For dynamic languages, pass the locale to the macro or use middleware to set it globally.
Are there alternatives if I need more dynamic menu features (e.g., nested menus from a database)?
For database-backed menus, consider `spatie/laravel-medialibrary` + custom logic or `orchid/software` (for admin panels). For nested menus, extend Spatie’s package with recursive macros or use `collective/html` for simpler cases. Evaluate trade-offs: Spatie’s package prioritizes simplicity over flexibility.
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.
codraw/framework-extra-bundle
codraw/messenger
codraw/security
codraw/mailer
codraw/contracts
codraw/profiling
codraw/dependency-injection
codraw/tester
codraw/core
nexmo/api-specification
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony