nedwors/navigator
nedwors/navigator is a Laravel package for building navigation menus in PHP. Define links and groups, manage active states, integrate with your routes, and render consistent, maintainable navigation across your application with a simple API.
Scope of this review: the assessment is based solely on v3.0.0 release metadata (Laravel 13 support added; PHP 8.2 and Laravel 12 support removed). No source, changelog history, or prior assessment exists in the record, so capability-level findings below are inferences from the versioning signal and must be validated against the package's actual code and docs before any adoption decision.
Architecture fit: The package follows the standard Laravel package contract implied by framework-version coupling — a service provider registered through composer auto-discovery, likely a facade and a publishable config file, and integration through the framework's container, config, and possibly queue/event subsystems. That is a low-friction fit for a conventional Laravel application. The material signal is not the feature set but the versioning posture: the maintainer treats major framework versions as major package versions and does not carry overlapping support. That is defensible engineering hygiene, but it means the package's supported-version window is only as wide as one Laravel major.
Integration feasibility: Straightforward for greenfield or already-modernized services. Composer constraint resolution is the only real integration surface: laravel/framework ^13.0 plus php ^8.3 (or higher). Any application still on Laravel 12 cannot install 3.x at all — this is a hard resolver failure, not a runtime degradation, which is the preferable failure mode because it surfaces at composer update rather than in production.
Technical risk:
Key questions for the maintainer:
Stack fit: Suitable for services already on, or actively planning, Laravel 13 on PHP 8.3+. It is a non-starter for any service pinned to Laravel 12 until either the framework or the package constraint moves. Because the package now tracks exactly one framework major, our stack-fit decision becomes a function of our Laravel upgrade cadence, not of the package's features. That inverts the usual evaluation order and should be made explicit in the decision record.
Migration path: Treat this as a framework-upgrade workstream with a package bump attached, not a dependency bump. Recommended path:
composer.json, and record current Laravel and PHP versions per service.Compatibility: Two hard gates — php >= 8.3 and laravel/framework ^13.0. Verify transitive constraints too: packages that cap the framework below 13, or that themselves still require PHP 8.2-era dependencies, will produce resolver conflicts that read as this package's fault but are not. Run composer why-not laravel/framework 13.* before assigning blame. Also confirm the framework's own PHP floor aligns; a mismatch here is a common source of confusing resolution errors.
Sequencing: Upgrade PHP runtime → upgrade Laravel to 13 → upgrade this package to 3.x → run the package's config-publish and migration steps if any exist. Keep the middle two steps as separate commits or PRs so failures are attributable. If the package publishes config or assets, diff the published files across the major to catch silent default changes. Do not bundle this with unrelated dependency updates.
Maintenance: Low ongoing effort if we stay on the current Laravel major; the package becomes effectively self-maintaining inside a modernized estate. The recurring cost is organizational rather than technical: we inherit the maintainer's release cadence as a recurring, mandatory upgrade obligation, roughly once per Laravel cycle. Budget for it as standing capacity rather than as an ad hoc project.
Support: The critical operational question is the 2.x support window. If 2.x is security-maintained for a defined period, we have a runway and this is a manageable upgrade. If 2.x is effectively abandoned the day 3.0.0 shipped, any service we cannot move to Laravel 13 is now consuming unpatched third-party code — an audit and risk-acceptance item, not just a backlog item. Get this in writing before the assessment is finalized.
Scaling: No scaling implications are discernible from release metadata. Framework-version coupling has no bearing on request throughput, queue depth, or data volume. Scaling risk from this change is nil.
Failure modes:
^3.0 — loud, early, cheap. Mitigate by pinning constraints explicitly rather than using floating ranges.Ramp-up: Minimal for engineers already fluent in Laravel — the integration surface is conventional and the upgrade is mechanical. The genuine ramp-up cost sits with platform and release engineering, who must sequence a coordinated PHP + framework + package upgrade across multiple services and negotiate exceptions for laggards. Estimate half a day per service for a straightforward upgrade, plus a coordination overhead that scales with the number of services in the estate.
Bottom line: v3.0.0 is a routine and technically sound release whose operational significance far exceeds its code delta. The feature risk is negligible; the policy risk — single-major support with no announced overlap — is the actual decision variable. Recommend conditional approval: adopt 3.x for services on or moving to Laravel 13, and gate broad rollout on written confirmation of the 2.x maintenance window and of v3's runtime-equivalence to 2.x.
How can I help you explore Laravel packages today?