Drag-and-drop menu manager for MoonShine 4.x admin panel. Organize menu items across multiple zones (sidebar, topbar, bottom bar), reorder groups and standalone items, toggle visibility — all from a visual interface.
- Multi-zone layout — distribute menu items across sidebar, topbar, and bottom bar
- Drag-and-drop — reorder groups and individual items (including nested items within groups)
- Visibility toggle — hide/show individual items or entire groups
- Per-user configuration — optionally save menu layout per MoonShine user
- Bottom bar controls — "always visible" toggle for the bottom bar zone
- Dark mode — full support for MoonShine's dark theme
- Responsive — works on mobile devices
- PHP 8.2+
- Laravel 11+
- MoonShine 4.x
composer require goodappr/moonshine-menu-managerphp artisan migrateThis creates two tables:
menu_item_configs— stores item positions, zones, visibility, and parent relationshipsmenu_zone_settings— stores per-zone settings (e.g. bottom bar "always visible")
php artisan vendor:publish --tag=moonshine-menu-manager-configThis publishes config/moonshine_menu_manager.php:
return [
// Enable/disable the menu manager globally
'enabled' => true,
// Available zones
'zones' => ['sidebar', 'topbar', 'bottom_bar'],
// Default active zones for layouts without saved config
'default_layout_zones' => ['sidebar', 'topbar', 'bottom_bar'],
// Layout-specific overrides (reserved for future use)
'layouts' => [],
// Save menu configuration per MoonShine user
'per_user' => false,
];In your MoonShine layout class (e.g. app/MoonShine/Layouts/MoonShineLayout.php), add the CustomMenuManager trait:
<?php
declare(strict_types=1);
namespace App\MoonShine\Layouts;
use MoonShine\CustomMenuManager\Traits\CustomMenuManager;
use MoonShine\Laravel\Layouts\AppLayout;
final class MoonShineLayout extends AppLayout
{
use CustomMenuManager;
// The trait overrides build(), getSidebarComponent(), getTopBarComponent(),
// getBottomBarComponent(), and getHeaderComponent() to support multi-zone menus.
}The package auto-registers the menu manager page. A gear/grid icon appears in the sidebar — clicking it opens the manager.
If the page returns 404, add to the pages array in config/moonshine.php:
'pages' => [
// ...
'menu-manager' => \MoonShine\CustomMenuManager\Pages\MenuManagerPage::class,
],php artisan config:clear
php artisan view:clear
php artisan cache:clear- Navigate to the menu manager page (click the grid icon in the sidebar)
- Reorder — drag items by the ↕ handle within a zone
- Move between zones — use the zone dropdown on each item or group
- Group management — use the group dropdown to move items between groups
- Visibility — click the eye icon to hide/show items or groups
- Save — click "Сохранить" to persist changes
The package discovers all menu items registered in your MoonShine application via the MenuManagerContract. It flattens the menu tree and allows you to:
- Reassign items to different zones (sidebar → topbar, etc.)
- Reorder items within zones
- Move items between groups or make them standalone
- Hide items from the rendered menu
Configuration is stored in the database and loaded on every request via the MenuConfigService.
Set per_user to true in the config file to allow each MoonShine user to have their own menu layout:
// config/moonshine_menu_manager.php
'per_user' => true,When enabled, menu configurations are scoped to the authenticated MoonShine user. When no user-specific config exists, the default menu is shown.
moonshine-menu-manager/
├── config/moonshine_menu_manager.php
├── database/migrations/
├── resources/
│ ├── css/ js/
│ └── views/
├── src/
│ ├── Components/ Models/ Pages/
│ ├── Providers/ Services/ Traits/
├── images/
├── composer.json
├── LICENSE
└── README.md
| Class | Responsibility |
|---|---|
MenuDiscoveryService |
Discovers all menu items/groups from MoonShine's MenuManager |
MenuConfigService |
Loads/saves menu configuration from the database |
MenuManagerPage |
Admin page with the visual menu editor |
MenuManagerComponent |
MoonShine component that renders the editor UI |
CustomMenuManager |
Trait that integrates the manager into your layout |
MIT License. See LICENSE for details.

