aura/router
Aura\Router is a fast, standalone PHP routing library with PSR-7 support, named routes, route groups, and flexible matching for web apps and APIs.
Architecture fit — weak for a Laravel core, plausible at the edges.
Aura.Router is a standalone matcher: it takes a request, a RouteCollection, and returns a Route plus params. Laravel's Illuminate\Routing is not a router in that sense — it is a request-lifecycle orchestrator that also owns middleware priority sorting, controller/closure dispatch, implicit and explicit model binding, route:cache compilation, named-route URL generation, signed URLs, rate limiting, domain/subdomain grouping, resource & API shorthand, fallback routes, and Precognition. Aura covers roughly the "match method + path to a name and parameters" slice, which is the smallest part of what a Laravel app depends on. Treating it as a drop-in replacement would mean re-implementing the other ~70% in-house, with no upstream to lean on. Where it does fit is a framework-agnostic library or a PSR-7 service that must run both inside and outside Laravel.
Integration feasibility — feasible only behind an interface we own.
There is no first-party Laravel service provider, no facade, no route:list equivalent, and Aura's dispatcher (aura/dispatcher) is not PSR-15, so any middleware bridge is custom glue. A realistic integration is: a RouterInterface port in our codebase, with an Illuminate\Routing adapter as the default and an Aura adapter used by exactly one service. Note the ecosystem signals: 500 stars, 0 recorded dependents, and an opportunity score of 26 — this is a mature but low-momentum package, effectively single-maintainer (Paul M. Jones). That is a maintainability consideration, not a disqualifier, but it means we are the integration team of record.
Technical risk.
route:cache: Aura has no equivalent compiled-route artifact we can rely on; high-route-count services will regress on cold start until proven otherwise.route() / URL::signedRoute(); any Blade or API response emitting URLs becomes a compatibility surface.Illuminate\Http\Request → PSR-7 → matcher adds a conversion layer and an extra failure point in the hot path.Key questions for the team.
Illuminate\Routing fail today — PSR-7 interop at the edge, framework independence for a reusable package, or something else?route()-equivalent URL generation and route caching on day one, and has anyone measured the gap?nikic/fast-route (far larger install base) or Slim's router for PSR-7 use cases?Stack fit.
Poor for a Laravel application's primary routing table. Reasonable for (a) a shared PHP library that must not depend on illuminate/*, or (b) a new PSR-7 microservice inside a Laravel-centric estate. It is a poor fit as a standardization choice, because it introduces a second routing mental model the team must hold alongside Laravel's.
Migration path — do not swap the router. The defensible sequence is incremental and reversible:
RouterInterface (match request → route name + params) that our domain code consumes.Illuminate\Routing as the production implementation for all existing apps — zero behavior change.route:cache and URL-generation parity gaps are closed and benchmarked.Compatibility checks before committing.
nyholm/psr7, laminas-diactoros, guzzlehttp/psr7) and whether we already ship one — adding a second PSR-7 implementation is a real footgun given immutability/interop quirks.Sequencing.
Timebox a 1–2 week spike on a single non-critical, low-traffic surface (an internal webhook receiver or a package that genuinely must run in both Laravel and non-Laravel contexts). Gate the decision on three demonstrable outcomes: parity on 404/405 and param binding, a working URL-generation story, and a measured cold-start delta versus route:cache. If any gate fails, the answer is "keep Illuminate\Routing," and that is a successful outcome of the spike.
Maintenance. We own the bridge, the adapter tests, and the upgrade work across Aura majors. Release cadence is slow (last release April 2025) but non-trivial majors mean scheduled migration work. With one effective maintainer and 0 recorded dependents, upstream will not absorb our integration bugs and there is no community of Laravel users to search when something breaks. Budget ongoing ownership, not a one-time integration.
Support. Aura's documentation is competent but framework-agnostic; nothing in it maps to Laravel idioms. On-call engineers debugging a routing incident will be reading source for two routers instead of one. Internal runbooks and a short internal training note are prerequisites, not nice-to-haves.
Scaling. Routing itself is not the bottleneck at typical route counts. The risk is cold start and horizontal scale-out: Laravel's compiled route cache is a meaningful advantage for high-replica deployments, and Aura has no comparable built-in artifact. Horizontal scaling also multiplies the cost of any per-request PSR-7 conversion. Benchmark at our expected route count (not a 10-route demo) before signing off.
Failure modes to instrument.
Allow header behavior.Ramp-up. Low for the small number of engineers who will touch the adapter (a few days with the docs and source). Non-trivial for the broader team, which now has two routing vocabularies. Assume 1–2 sprint-equivalents of fully loaded engineering effort for the spike plus a production-grade adapter, before any business value is realized — against a package whose opportunity score (26) suggests limited leverage.
How can I help you explore Laravel packages today?