konekt/menu
Konekt Menu is a Laravel package for building and rendering hierarchical menus with an expressive PHP API. It supports submenus, icons, permissions, active-state detection, and Blade rendering, making it easy to define navigation once and reuse it throughout your application.
konekt/menu replaces a recurring, low-differentiation build task—routing-aware menus, active-state detection, permission-gated nav items—with a small MIT library. This frees engineering capacity for differentiating features rather than re-implementing menu trees in every Laravel surface.konekt/acl) turns "hide what they can't do" from a per-controller chore into a declarative configuration.Consider it when:
konekt/acl for permission-driven visibility, and the package is idiomatic to that stack.Look elsewhere when:
To executives: This is a $0-license, small-footprint Laravel component that lets us stop hand-building navigation menus and start shipping user-facing features faster. It standardizes how we render menus and—critically—how we hide navigation that a user's role shouldn't see, which reduces accidental exposure of admin surfaces and lowers audit findings. The tradeoff is maturity: the project has a small community (28 stars, no downstream dependents), so we should treat it as an accelerator, not a foundation. Mitigation is cheap—MIT license, small codebase, and a realistic option to vendor or fork if upstream stalls.
To engineering: It's a thin, readable abstraction over Laravel routing for menu trees, with first-class active-state detection, translatable labels, named menu containers, and permission-aware items when paired with the Konekt ACL package. It removes repetitive Blade markup and the usual off-by-one active-class bugs. Risks are honest: small maintainer base, no dependents to piggyback on, and Laravel version support is on us to verify before adoption. Recommendation: pilot it behind a single navigation surface, keep menu definitions in config so a fork or swap stays a contained change, and treat the admin menu editor as a separate, later decision.
How can I help you explore Laravel packages today?