nowo-tech/dashboard-menu-bundle
A PHP bundle for adding a configurable dashboard menu to your application. It helps organize admin navigation and expose menu items consistently, with simple configuration for integrating dashboard links into Symfony-based projects.
Architecture fit. nowo-tech/dashboard-menu-bundle is a Symfony bundle, not a Laravel package. It ships the standard Symfony bundle surface: a DI extension for configuration, Twig templates and Twig functions for rendering, a JSON API controller layer, and a tree model backed by parent + position fields. There is no ServiceProvider, no config/*.php Laravel-style config, no Blade integration, and no Illuminate contracts. The "Laravel/PHP package" framing in the brief should be corrected before any planning: for a Laravel application the fit is effectively zero out of the box, and the only routes are (a) a fork/port, (b) a rewrite of an equivalent menu service, or (c) drop the dependency. For a Symfony 7/8 application the fit is good — it is a self-contained, framework-native concern with a small, explicit contract (config → menu tree → Twig render + JSON read model).
Integration feasibility. Mechanically straightforward on Symfony: composer require, register the bundle, publish/author a menu tree definition, wire the permission check, render via Twig or consume the JSON endpoint. The deliberate absence of Gedmo/Stof extensions is a genuine plus — it removes a transitive tree-behavior dependency and the associated upgrade friction, and keeps the persistence contract portable. The unknown is the permission model: the description says "permissions" but not through what abstraction (Symfony Security voter, role strings, a callable, an interface to implement). That single unknown is the largest determinant of integration effort and must be confirmed from source before committing.
Technical risk. High, and almost entirely supply-chain rather than technical:
| Risk | Signal | TPM read |
|---|---|---|
| Adoption | 0 stars, 0 dependents | No external validation; you will be the first real consumer |
| Maintenance | Single-org publisher (nowo-tech) |
Bus factor of one; no community backstop |
| Maturity | Metadata anomaly — "last release 2026-10-26" is a future date | Release provenance should be verified before pinning |
| Compatibility | Symfony 7 and 8 only, PHP 8.2+ | Correctly narrow, but ties you to the newest Symfony majors |
| Security | No CVE history, no disclosure policy documented | Unexamined attack surface in the permission/rendering path |
| Overall score | 20/100 | Treat as "evaluate, do not adopt as critical path" |
Key questions to resolve before a decision.
Stack fit. Symfony 7/8 only. The package is not a candidate for a Laravel codebase. If the target application is Laravel, the honest TPM recommendation is to not integrate and instead budget a small internal menu service (a tree table with parent_id/position, a policy-gated resolver, and a JSON resource) — the package's feature set is genuinely small enough that a port costs more than a clean implementation.
Migration path. For a Symfony app currently hand-rolling dashboard menus: strangler-style. Introduce the bundle behind a feature flag for one non-critical dashboard, render its Twig output into an existing layout slot, and keep the legacy menu as the fallback. The JSON API lets you migrate the front-end navigation incrementally without a template rewrite. No data migration is implied, since entries are configuration-driven — confirm this, as a DB-backed tree would add a schema migration step.
Compatibility. Pin to the exact released tag and record the PHP/Symfony constraints in the app's composer.json. Because the bundle targets Symfony 7/8 and PHP 8.2+, it effectively sets a floor on your framework upgrade cadence — a bundle lag on Symfony 9 will block your own upgrade. Validate the declared matrix against the repo's CI before trusting it.
Sequencing.
Maintenance. The dominant cost is not code churn but dependency ownership. With a single publisher and zero dependents, your team is realistically the de facto maintainer for any bug you hit. Budget a named owner and a standing allowance for patch-level forks, even if you never use it. The "no Gedmo/Stof" design decision reduces long-term upgrade drag and is a point in the bundle's favor.
Support. Community-only, no SLA, no documented security disclosure channel. That is acceptable for a dashboard navigation concern and unacceptable for anything in the auth or payment path — which reinforces keeping this strictly scoped to presentation.
Scaling. The workload is cheap and cache-friendly: menu trees are small, read-mostly, and near-static per role. Render or serialize once per role and cache; invalidate on menu configuration change rather than per request. The JSON API is stateless and horizontally scalable as-is. Scaling is not where this package will hurt you.
Failure modes to instrument.
parent cycle or duplicate position producing a silently missing or reordered menu. Add a validation check on startup/CI.Ramp-up. Low for a Symfony developer: the public surface is configuration, a handful of Twig functions, one controller, and a documented tree schema — roughly 1–2 days to productive use, plus half a day specifically on the permission model. For a Laravel-only team the ramp-up is not a learning curve but a port project measured in weeks, which is the central reason to expect this package to be declined under the stated stack.
How can I help you explore Laravel packages today?