vespakoen/menu
Laravel package for building and rendering database-backed menus. Create multiple menus, nest and order items, attach links, and output navigation in Blade with a simple API. Useful for headers, sidebars, and admin navigation.
ItemList abstraction is the unit of decision for "how do we represent depth-aware content?"ItemList at a non-existent depth no longer throws — directly de-risks features where end users construct uneven trees (menu builders, CMS page trees, drag-and-drop category editors). Those are exactly the surfaces where a sparse or partially-built tree would previously surface as a 500. This is a green light to keep such features on the roadmap without budgeting custom defensive wrappers.Caveat for planning: this assessment is based solely on the 3.0.4 release note. The 3.0.x line should be treated as a major-version boundary — confirm the 3.0.0 breaking-change notes and the package's semver guarantees before committing to an upgrade slot, and verify whether the new non-throwing behavior is a silent default or configurable, since it changes observable behavior for consumers relying on the old exception.
Consider it when:
Look elsewhere or build in-house when:
Adoption criteria before committing: read the 3.0.0 upgrade guide, confirm the exception-to-empty behavior is documented and intentional, check release cadence and open-issue health, and pilot it on one non-critical surface (e.g., admin menu rendering) before touching customer-facing navigation.
For executives: This is a small, low-risk maintenance upgrade to a library we use for nested content structures like menus and category trees. The change fixes a failure mode where the application could error out when a page asked for a level of the tree that hadn't been built yet — the kind of edge case that produces a broken admin screen or a 500 during a CMS edit. There is no new feature work, no migration, and no change to our roadmap; the value is reduced incident surface and less custom defensive code. One caution: it changes a failure into a silent empty result, so we should confirm that matches the intended user experience before rolling it out.
For engineering: Patch release on the 3.0.x line. ItemList access at a non-existent depth no longer throws; it now returns without erroring. Practical consequences: callers that relied on catching that exception need review, empty-state rendering becomes the default path for sparse trees, and any test asserting a throw must be updated. No API additions or deprecations noted in this release. Before upgrading, pull the 3.0.0 release notes to confirm the breaking-change surface if we are coming from 2.x, check whether the new behavior is configurable, and add a regression test that walks an intentionally uneven tree. Upgrade is safe to schedule in a normal maintenance window; it is a good moment to audit where we currently wrap calls in try/catch defensively, since some of that scaffolding may now be dead code.
How can I help you explore Laravel packages today?