Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Route Names Laravel Package

dragon-code/laravel-route-names

Automatically generates names for your Laravel routes based on controller classes and methods, so you never name routes by hand. Keeps naming consistent across your app, makes refactoring safer, and works alongside your existing route definitions.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

What it does. dragon-code/laravel-route-names hooks into Laravel's route registration lifecycle and derives route names automatically from the route definition (typically controller/action or URI shape), removing the need to hand-write ->name('users.index') on every route. Value is purely developer-ergonomics: less boilerplate, more consistent naming across a large route surface.

What changed in 2.2.0. One functional commit: Laravel 13 compatibility (#58). The remaining three entries (#54, #56, #57) are README banner and preview-image changes, two of them authored by a bot. There are no feature additions, no deprecations, no breaking changes, and — critically — no changes to naming derivation, collision handling, precedence over explicit ->name(), or route-cache behavior. The release is a compatibility bump and nothing more.

Revised read on upstream status. The prior assessment treated the package as archived and therefore dead. 2.2.0 partially contradicts that: the maintainer is still shipping, and has pre-emptively added Laravel 13 support rather than letting the package rot. The correct characterization is now compatibility-only maintenance by a single maintainer, not abandonment. That is a meaningful downgrade of the "dead dependency" risk — but it is not a clean bill of health. It answers "will it break on the next Laravel major?" with "probably not, promptly." It does not answer any of the substantive questions about correctness, which remain untouched by this release.

Architecture fit. Unchanged. A standard Laravel service provider with a small footprint — low coupling, contained install-time blast radius. The concern is where it sits: route names are a framework-level contract consumed by route(), URL generation, signed URLs, redirects, and assertRouteIs. A package that mutates that contract on every boot operates in a high-leverage, high-risk seam despite its small code size. A compatibility-only release does not reduce the leverage of that seam.

Integration feasibility. Unchanged and trivial: composer require, optional config publish, opt-in per route file or globally. No database, no migrations, no queue or cache dependency. An engineer can evaluate it in an afternoon.

Technical risk — the release improves one item and leaves the rest intact:

  • Maintenance mode, single maintainer. Archived upstream. Revised: actively released, but the sole functional change across this cycle was a version-compatibility commit. All 2.x maintenance appears to flow through one person (@andrey-helldar in every functional commit). This is bus-factor-1 infrastructure on a framework-contract seam — better than archived, still not comfortable.
  • Zero dependents and 25 stars. Unchanged. There is still no ecosystem validation, no downstream project that has stress-tested this against a real, large route table, and no community that will surface regressions before we do. Laravel 13 support existing is not evidence that anyone runs it.
  • Opportunity score 2.87. Unchanged; the underlying gap it fills is narrow, and the boilerplate it removes is low-cost to solve in-house or via a project convention.
  • Collision and override semantics remain unknown. This is now the largest open risk, precisely because 2.2.0 did nothing here. If auto-generated names collide across modules, or if the package overwrites explicit ->name() calls, the failure is silent — wrong URLs, broken signed URLs, and green tests asserting the wrong thing. Nine minor versions in, undocumented collision behavior is a stronger signal than it was before.
  • Frontend coupling. Unchanged. With Ziggy or any route-name bridge, auto-generated names become a public API contract between backend and frontend; renaming a controller method silently renames a JS-visible route.

Key questions to resolve before adoption:

  1. Does it ever override an explicit ->name()? Is precedence configurable? (Unanswered by 2.2.0.)
  2. How are duplicate generated names detected — exception, warning, or silent last-write-wins? (Unanswered by 2.2.0.)
  3. Does it survive php artisan route:cache with identical output to uncached boot? (Unanswered by 2.2.0.)
  4. Which Laravel majors are supported, and is the archived state a retirement or a "done" signal? Partially resolved. Laravel 13 is now supported; the package is maintained, not retired — but on a compatibility-only cadence. The "done signal" interpretation is still plausible for the feature set.
  5. Is there an actively maintained fork, or a successor package? (Moot for now — upstream is alive, though thinly.)
  6. What does route:list look like afterward — is the route table still reviewable in code review?

Integration Approach

Recommendation: still do not take a runtime dependency. Consume it as a one-time scaffolding tool. The release does not change the calculus — it removes the "abandonware" objection and leaves the "unvalidated, single-maintainer, undocumented-collision-semantics" objections standing.

Stack fit. Reasonable for a conventional Laravel monolith or modular monolith with a large, convention-driven route surface. Poor fit for anything with a JS route bridge, public API versioning, or route names treated as a stable contract.

Migration path (preferred, unchanged):

  1. Install in a scratch branch only.
  2. Run it against the existing route files and capture the generated names.
  3. Materialize those names as explicit ->name() calls and commit them.
  4. Remove the package from composer.json.

This yields the consistency benefit with zero ongoing dependency and makes route names visible in code review — which is the property we actually want. The fact that upstream now supports Laravel 13 does not change the fact that the output is static and the dependency is avoidable.

Migration path (fallback, if runtime generation is genuinely desired). Previously: fork-and-own was mandatory because upstream was archived. Revised: forking is no longer mandated by abandonment, but a lighter mitigation is now defensible — pin the exact version, add it to the dependency register with a named owner, subscribe to releases, and gate Laravel major upgrades on a 2.x release that covers the new major. Given the package's demonstrated willingness to ship major-version support, "vendor with monitoring" is a reasonable substitute for "fork and own," provided collision semantics are resolved first (see sequencing). If the semantics cannot be established by inspection, revert to fork-and-own.

Compatibility and sequencing.

  • 2.2.0 claims Laravel 13 support; verify against our current and next major before any pilot. Do not take the changelog line as evidence — run it.
  • Pilot on a single low-risk route file with no signed URLs and no frontend route bridge.
  • Diff route:list output before and after; any delta must be explainable.
  • Deliberately construct a collision and an explicit-->name() override case in the pilot and record the observed behavior. These are the two questions the release did not answer and cannot be resolved by changelog.
  • Run the full test suite plus route:cache in CI.
  • Only then expand, module by module, with a freeze on renames during rollout.

Operational Impact

Maintenance. The archived-status objection is downgraded. Residual obligation: watch releases (low volume — one functional commit this cycle), gate Laravel major upgrades on a corresponding package release, and periodically review generated names as controllers are refactored. The real cost is not patching, it is the absence of anyone else exercising the code — we would be among the only production consumers, so we would find the bugs.

Support. Still no meaningful upstream issue triage or release-note depth beyond commit titles. Internal ownership must be explicit — a named team and a line in the dependency register. The single-maintainer dependency should be recorded as a bus-factor risk regardless of how thin the integration is.

Scaling. Boot-time cost is negligible even at a few thousand routes. The scaling risk is organizational and unchanged: as more modules and teams add routes, the probability of a generated-name collision rises, and collisions are silent. Any global naming scheme becomes a coordination point — a team cannot rename a controller method without potentially breaking another team's URL generation. A Laravel 13 compatibility bump does nothing for this.

Failure modes to instrument:

  • Silent name collision causing wrong URL resolution.
  • Signed URL verification failures after an incidental controller rename.
  • Frontend route() calls in JS breaking on backend refactor (if Ziggy is present).
  • Divergence between cached and uncached route tables.
  • Third-party packages registering their own named routes being renamed underneath — a package expecting route('horizon.index') will not find it.
  • Tests that pass because they assert the generated name rather than the intended one.
  • Silent breakage on the next Laravel major if our upgrade lands before the package's compatibility release (previously impossible because upstream was archived; now a scheduling dependency we must track).

Ramp-up. Engineer ramp-up is minutes — idiomatic Laravel, thin API. The hidden cost is tribal knowledge: developers must internalize the naming derivation rules to predict what name a route will receive. With hand-written names that knowledge lives in the file; with generation it lives in the package source. The package remains lightly documented — the 2.2.0 diff added banner images, not docs — so this is a durable onboarding tax for a modest boilerplate reduction.

Bottom line. 2.2.0 is a compatibility commit, not a capability or correctness release. It retires the strongest argument against the package — abandonment — and leaves every other one intact: no dependents, no ecosystem stress-testing, undocumented collision and override semantics, and a single maintainer whose cadence is "keep it compiling." The decision does not flip. Harvest the naming output once, commit it explicitly, and keep it out of production. If a team insists on runtime generation, the bar is now "demonstrate collision and override behavior in a pilot" rather than "find a maintained fork."

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console