everlutionsk/navigation-bundle
A Symfony bundle for rendering multiple navigation instances that are registered dynamically via tagged services. It supports containers, nested items, routing, breadcrumbs, filtering, sorting, translation, and highlighting the current item.
Architecture fit — primary finding: this is not a Laravel package. everlutionsk/navigation-bundle is a Symfony bundle, not a Laravel package. It integrates through mechanisms Laravel does not provide: a Bundle class, a DependencyInjection extension, a compiler pass that collects services tagged as navigation items, and (in all likelihood) a Twig extension for rendering. Laravel's equivalents are service providers, tagged container bindings, and Blade. The bundle will not "boot" in a Laravel application in any supported sense. Any evaluation framed as "Laravel/PHP package" needs that corrected before a decision is made.
What is actually reusable. The README explicitly separates concerns: the bundle is thin orchestration/rendering glue, and the underlying navigation object model lives in the sibling package everlutionsk/navigation. That library is the realistic integration surface for a Laravel team — it is a plain PHP library with items, containers, route resolution, current-item highlighting, and filtering. The bundle adds Symfony DI wiring and a renderer on top.
Integration feasibility.
composer require, enable bundle, tag services, render. Low effort, well-trodden pattern, and the tagged-service registration model is exactly what Symfony is designed for.symfony/framework-bundle and conflict with Laravel's pinned Symfony components (http-foundation, http-kernel, routing, console), producing composer resolution failures or runtime boot errors.Technical risk.
Key questions to resolve before committing.
everlutionsk/navigation (core) genuinely framework-agnostic, and what are its PHP and dependency constraints?symfony/framework-bundle in a way that conflicts with a Laravel install?Assessment. Adopt only as a source of design ideas plus a small dependency, not as a framework integration. If the team is Laravel, treat this as "vendor the navigation library and write a ~1-day adapter." If the team is Symfony, it is a reasonable but under-supported convenience and should be evaluated against hand-rolling a compiler pass, which is not much code.
Stack fit.
everlutionsk/navigation and reproduce the bundle's value in Laravel idioms:
NavigationServiceProvider registering each navigation container as a singleton.$this->app->tag([...], 'navigation.item') and $this->app->tagged('navigation.item') — this maps almost one-to-one onto Symfony's tagged-service compiler pass and is the cleanest translation of the bundle's core idea.@navigation('main') directive replacing the Twig function.CurrentRouteResolver implementing the library's "highlight current item" contract against Laravel's Route::current().Migration path.
composer require everlutionsk/navigation, instantiate a container, render it in a Blade view, confirm no dependency conflicts with the Laravel version in use. This is the go/no-go gate.route() helper, current-item resolver.Compatibility considerations.
symfony/routing dependency is plausible and would need reconciliation with Laravel's pinned version).Sequencing. Gate everything on the spike. Do not schedule pilot work until dependency resolution and basic rendering are proven on the target Laravel version. If the spike fails on conflicts, fall back to hand-rolled navigation (a container class plus a Blade component is genuinely a few hundred lines) and revisit only if navigation complexity grows.
Maintenance. The realistic operating model is internal ownership with upstream as a reference. Budget a small but permanent maintenance line: dependency bumps on Laravel/PHP upgrades, and occasional review of upstream commits. The adapter code is yours; the library is effectively frozen. MIT licensing makes forking viable, which is the correct contingency to document now rather than after an abandonment.
Support. There is no vendor, no SLA, no community to lean on — 0 dependents means no one else is filing issues you can learn from. Support is entirely internal. This is acceptable for a small, single-purpose library and unacceptable for anything load-bearing without an owner named in the runbook.
Scaling. Rendering navigation is computationally cheap; the risk is not request throughput but construction cost. If navigation items are permission-aware or context-dependent, ensure containers are built once per request (singleton-scoped), not per render call. Watch for N+1 patterns if items resolve route parameters from the database. For large menus, cache the serialized item tree and invalidate on content change rather than rebuilding per request. Current-item highlighting is inherently per-request and cheap.
Failure modes to instrument.
symfony/framework-bundle into a Laravel app. Document the constraint explicitly in the repo README and in onboarding notes.Ramp-up. The API surface is small — items, containers, tags, rendering, current-item highlighting — and a mid-level developer can be productive in under a day. The real ramp cost is the framework bridge, which is bespoke knowledge held by whoever writes it. Mitigate with tests that assert rendered output for representative navigation trees, and a short internal note mapping each Symfony bundle concept to its Laravel equivalent. Keep the Blade renderer thin so that a future migration to a maintained package or hand-rolled solution is a contained change.
How can I help you explore Laravel packages today?