PHPackages                             caydeesoft/menu-manager - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Templating &amp; Views](/categories/templating)
4. /
5. caydeesoft/menu-manager

ActiveLibrary[Templating &amp; Views](/categories/templating)

caydeesoft/menu-manager
=======================

Config-driven Laravel menu manager for Blade sidebar navigation, top menus, dropdowns, and permission-aware links.

v1.0.4(3w ago)016↓50%MITPHPPHP ^8.2

Since May 14Pushed 3w agoCompare

[ Source](https://github.com/Caydeesoft/MenuManager)[ Packagist](https://packagist.org/packages/caydeesoft/menu-manager)[ Docs](https://github.com/caydeesoft/menu-manager)[ RSS](/packages/caydeesoft-menu-manager/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (2)Dependencies (2)Versions (6)Used By (0)

Laravel Menu Manager
====================

[](#laravel-menu-manager)

Config-driven Laravel menu manager for Blade sidebar navigation, top menus, dropdown menus, and permission-aware admin panel links.

Menu Manager lets you define Laravel navigation menus in one config file and render them with one reusable Blade view. Configure menu items, named routes, route parameters, HTML tags, CSS classes, Font Awesome icons, dropdowns, and Spatie permission checks from `config/menu-manager.php`.

Features
--------

[](#features)

- Config-driven Laravel sidebar and top navigation menus.
- One reusable Blade renderer for multiple menu locations.
- Permission-aware links using Laravel authorization and Spatie permissions.
- Dropdown menu support with configurable wrapper, toggle, and child classes.
- Route parameters, icons, custom attributes, active classes, and raw HTML items.
- Publishable config and views for Laravel admin panels and dashboards.

Install
-------

[](#install)

```
composer require caydeesoft/menu-manager
```

Publish the config:

```
php artisan vendor:publish --tag=menu-manager-config
```

Menu Location
-------------

[](#menu-location)

After publishing, configure all menus here:

```
config/menu-manager.php

```

Package source config:

```
vendor/caydeesoft/menu-manager/src/config/menu-manager.php

```

Direct package development config:

```
src/config/menu-manager.php

```

Config Structure
----------------

[](#config-structure)

Each menu has a `view` section and an `items` section:

```
return [
    'menus' => [
        'sidebar' => [
            'view' => [
                'wrapper' => [
                    'tag' => 'ul',
                    'class' => 'sidebar-nav',
                    'attributes' => [
                        'role' => 'list',
                    ],
                ],
                'header' => [
                    'tag' => 'li',
                    'class' => 'sidebar-header',
                    'attributes' => [
                        'role' => 'presentation',
                    ],
                ],
                'item' => [
                    'tag' => 'li',
                    'class' => 'sidebar-item',
                    'active_class' => 'active',
                ],
                'link' => [
                    'class' => 'sidebar-link',
                ],
                'icon' => [
                    'tag' => 'i',
                    'class' => 'align-middle',
                ],
                'label' => [
                    'tag' => 'span',
                    'class' => 'align-middle',
                ],
            ],
            'items' => [
                [
                    'type' => 'header',
                    'title' => 'Main',
                    'position' => 1,
                ],
                [
                    'type' => 'item',
                    'title' => 'Dashboard',
                    'route' => 'backend.admin_dashboard',
                    'icon' => 'fas fa-home',
                    'position' => 2,
                ],
            ],
        ],
    ],
];
```

That renders:

```

    Main

            Dashboard

```

Rendering
---------

[](#rendering)

Use the generic renderer for any configured menu:

```
@include('menu-manager::menu', ['menu' => 'sidebar'])
```

Convenience aliases are also available:

```
@include('menu-manager::sidebar')
@include('menu-manager::top')
```

Both aliases use the same generic Blade renderer internally.

Item Types
----------

[](#item-types)

### Header

[](#header)

```
[
    'type' => 'header',
    'title' => 'Revenue',
    'position' => 20,
],
```

### Item

[](#item)

```
[
    'type' => 'item',
    'title' => 'Transactions',
    'route' => 'backend.transaction.index',
    'icon' => 'fas fa-dollar-sign',
    'permission' => 'view_transaction',
    'position' => 22,
],
```

### Item With Route Params

[](#item-with-route-params)

```
[
    'type' => 'item',
    'title' => 'Activity Log',
    'route' => 'backend.logs.index',
    'params' => [
        'user' => 1,
    ],
    'icon' => 'fas fa-pen',
    'position' => 41,
],
```

### Dropdown

[](#dropdown)

```
[
    'type' => 'dropdown',
    'title' => 'Settings',
    'icon' => 'fas fa-tools',
    'permission' => 'view_settings',
    'position' => 50,
    'children' => [
        [
            'type' => 'item',
            'title' => 'General',
            'route' => 'backend.settings.general',
            'permission' => 'view_settings',
            'position' => 1,
        ],
    ],
],
```

Configure dropdown HTML in the menu `view` section:

```
'dropdown' => [
    'tag' => 'li',
    'class' => 'sidebar-item',
    'toggle' => [
        'class' => 'sidebar-link collapsed',
        'attributes' => [
            'data-bs-toggle' => 'collapse',
            'aria-expanded' => 'false',
        ],
    ],
    'children' => [
        'tag' => 'ul',
        'class' => 'sidebar-dropdown list-unstyled collapse',
        'attributes' => [
            'role' => 'list',
        ],
    ],
],
```

### Raw HTML

[](#raw-html)

Use `html` for special menu entries that do not fit the standard item shape:

```
[
    'type' => 'html',
    'html' => 'Light',
    'position' => 1,
],
```

Per-Item Classes And Attributes
-------------------------------

[](#per-item-classes-and-attributes)

You can override classes on any item:

```
[
    'type' => 'item',
    'title' => 'Dashboard',
    'route' => 'backend.admin_dashboard',
    'icon' => 'fas fa-home',
    'item_class' => 'sidebar-item custom-item',
    'link_class' => 'sidebar-link custom-link',
    'icon_class' => 'align-middle text-primary',
    'label_class' => 'align-middle fw-bold',
    'link_attributes' => [
        'data-turbo' => 'false',
    ],
    'position' => 2,
],
```

Permissions
-----------

[](#permissions)

The menu is built only for authenticated users.

- `permission` shows the entry when the user has that permission.
- `permissions` shows the entry when the user has at least one listed permission.
- Entries without `permission` or `permissions` are visible to any authenticated user.

Dropdown children are filtered by permission too.

Sorting
-------

[](#sorting)

Items are sorted by `position` in ascending order.

Views
-----

[](#views)

Publish views only if you need to change the renderer itself:

```
php artisan vendor:publish --tag=menu-manager-views
```

Published views:

```
resources/views/vendor/menu-manager/menu.blade.php
resources/views/vendor/menu-manager/sidebar.blade.php
resources/views/vendor/menu-manager/top.blade.php
resources/views/vendor/menu-manager/partials/items.blade.php
resources/views/vendor/menu-manager/partials/attributes.blade.php

```

Releases
--------

[](#releases)

Releases are documented automatically by GitHub Actions when a semantic version tag is pushed:

```
git tag v1.0.0
git push origin v1.0.0
```

The release workflow validates Composer, installs dependencies, runs PHPUnit, and creates a GitHub release with generated release notes.

Update `CHANGELOG.md` before tagging.

MCP Compatibility
-----------------

[](#mcp-compatibility)

This package is a Laravel Composer package, not a Model Context Protocol server. It includes `MCP.md` and `llms.txt` for AI/agent-friendly project metadata, but it does not publish an MCP `server.json` because it does not expose MCP tools, resources, prompts, or transport.

###  Health Score

41

—

FairBetter than 87% of packages

Maintenance94

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

26d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/b45f83595087e9d2a3e2af6b69cdb1867d10bba2edc06182e8a09e47fb73f2ea?d=identicon)[dennis.kiptoo](/maintainers/dennis.kiptoo)

---

Tags

laravelbladepermissionnavigationmenu-managersidebaradmin-panellaravel-menuspatie-permissiondropdown-menu

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/caydeesoft-menu-manager/health.svg)

```
[![Health](https://phpackages.com/badges/caydeesoft-menu-manager/health.svg)](https://phpackages.com/packages/caydeesoft-menu-manager)
```

###  Alternatives

[tightenco/jigsaw

Simple static sites with Laravel's Blade.

2.2k449.3k30](/packages/tightenco-jigsaw)[robsontenorio/mary

Gorgeous UI components for Livewire powered by daisyUI and Tailwind

1.5k531.0k21](/packages/robsontenorio-mary)[moonshine/moonshine

Laravel administration panel

1.3k239.9k72](/packages/moonshine-moonshine)[hasinhayder/tyro-dashboard

Tyro Dashboard - Beautiful admin dashboard for managing Tyro roles, privileges, users, and settings

5222.7k](/packages/hasinhayder-tyro-dashboard)[technikermathe/blade-lucide-icons

A package to easily make use of Lucide icons in your Laravel Blade views.

18379.7k9](/packages/technikermathe-blade-lucide-icons)[hasinhayder/tyro-login

Tyro Login - Beautiful, customizable authentication views for Laravel 12 &amp; 13

2443.7k5](/packages/hasinhayder-tyro-login)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
