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

Url Resolver Laravel Package

innmind/url-resolver

Lightweight PHP library that maps incoming URLs to the resources that handle them. Register resolvers to match request paths, extract parameters, and return controllers or handlers, keeping routing logic decoupled, testable, and framework-agnostic.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

The package is framework-agnostic, which cuts both ways in a Laravel context. It offers a URL resolution abstraction (per the description, mapping a URL to a handler/resolver; per the package name, turning relative URLs into absolute ones — see the ambiguity below) and deliberately does not bind to Laravel's router. That means it can only be adopted behind a Laravel adapter — a small bridge layer that translates between the package's resolver contract and Laravel's routing/URL generation. Architecturally that is a defensible boundary pattern, but it adds a seam the framework already solves natively: Laravel ships url(), URL::to(), route(), and the URL facade, and its router handles URL→handler mapping as a first-class concern. The TPM question is not "can it fit" but "what does it buy over the native facility." For most Laravel applications, the honest answer is little.

Integration feasibility

Composer-only, no service-provider friction implied. Two hard constraints dominate:

  1. PHP floor is 8.2. 5.1.0 drops PHP 8.1, so any app, CI image, or shared host still on 8.1 fails at composer update time.
  2. innmind/immutable 5 is a major-version requirement. Any transitive dependency pinning ^4 produces an unresolvable conflict — the most likely practical blocker in a large Laravel dependency tree.

Technical risk (dominant factor)

  • Abandonment risk. The repository is archived with 2 stars, 0 dependents, and no release since 2023-09-16. This is the single most important signal. An archived package receives no security fixes, no PHP-version compatibility updates, and no bug fixes. Adopting it means pinning to a dead dependency and owning it internally the moment anything breaks.
  • SemVer governance risk. A minor release (5.0 → 5.1) simultaneously dropped PHP 8.1 and required a new major of innmind/immutable. Caret constraints (^5.0) pull breaking changes silently into routine updates.
  • Purpose ambiguity. The repo title/description ("resolve relative urls to absolute ones") and the in-repo description ("URL → handler resolution contract") describe two different capabilities. Before any engineering investment, this must be resolved by reading the actual source — it changes whether the package overlaps with Laravel's URL helpers or its router.
  • Near-zero blast radius, for the same reason. No dependents means no community validation and no downstream bug surface — but also no evidence the package survives real production load.

Key questions

  • Which capability is real — relative→absolute URL resolution, or URL→handler routing? Read the source, don't trust the description.
  • Is there a maintained fork or successor? The Innmind maintainer may have consolidated this into another package.
  • Does the package expose innmind/immutable types in its public API, or are they internal?
  • What would ownership look like if we forked it? How many lines of code is the package actually?
  • Does Laravel's native url()/route()/router already cover the requirement with less risk?
  • Is immutable: ^5 a hard constraint or ^4 || ^5?

Integration Approach

Stack fit

Target PHP 8.2–8.4 against Laravel 10/11/12, pending CI-matrix confirmation (unlikely, given the archive date). PHP 8.1 apps are out of scope for 5.1.0 entirely. Given the package is archived, expect the Laravel compatibility claim to be untested.

Build-vs-buy decision (the real migration path)

Treat this as a build vs. adopt-vs-avoid decision, not a version bump:

  • Avoid (recommended default). If the need is relative→absolute URL resolution, Laravel's url()/URL::to() and the router already deliver it, are maintained by the framework, and carry zero added dependency risk. The package's differentiator is framework-agnosticism, which has no value inside a Laravel-only application.
  • Adopt (only with a compelling, verified need). If the resolver abstraction is genuinely required — e.g., a polyglot service that must share resolution logic outside PHP — wrap it behind an internal interface immediately so the concrete package is swappable.
  • Fork (if adopted). Given the archive, plan for internal ownership: vendor the code or maintain a fork so PHP/security updates can be applied. Budget this as real cost, not a footnote.

Compatibility

If adopting, pin exactly (5.1.0) — do not use caret — because the release history already shows breaking changes landing in minor versions. Lockfile diff review on every subsequent update is mandatory.

Sequencing

  1. Read the source to resolve the purpose ambiguity and size the actual code surface (a "two-line changelog" package is likely small enough to fork cheaply).
  2. Run the build-vs-buy check against Laravel's native URL/router facilities; document why the native path is insufficient if proceeding.
  3. Inventory PHP 8.1 usage across app, CI, Docker base images, and deploy targets.
  4. Search for direct innmind/immutable usage to size the API-exposure question.
  5. If proceeding: branch, bump PHP to 8.2 minimum, then attempt the package update separately to isolate solver failures.
  6. Build the adapter layer and full test suite; canary one non-critical service before fleet rollout.

Operational Impact

Maintenance

This is the decisive operational concern: an archived package has no maintenance owner. We inherit 100% of the maintenance burden on adoption — PHP-version compatibility, security patching, and any Laravel-integration drift. That is a permanent, if small, tax. If the package is genuinely a few hundred lines, forking it into an internal package may be cheaper than the governance overhead of tracking an archived dependency. Do not adopt without an explicit internal owner.

Support

Low technical support load — the package surface is small. The real support question is governance: "why are we depending on an archived package with 2 stars?" — a question that will resurface in every dependency review. Pre-empt it with a written adoption rationale and a sunset/exit criterion. If innmind types are public, add a second class of questions around functional idioms unfamiliar to typical Laravel developers.

Scaling

Negligible. URL resolution is cheap; runtime characteristics are governed by the application, not this dependency. No benchmarking required unless it lands on an extremely hot request path, which is unlikely.

Failure modes

  • Abandoned dependency risk (highest). No upstream security patches; a future PHP or Laravel release breaks it permanently with no fix path. Mitigation: fork or wrap behind an internal interface now, not later.
  • Silent breakage on routine update — a caret constraint pulls 5.1.0 into a PHP 8.1 pipeline; resolution fails at deploy, not locally.
  • Dependency conflict — a second package requires immutable ^4; resolution fails with a message easily misread as a package bug.
  • Purpose misuse — the ambiguity between relative→absolute resolution and URL→handler routing leads engineers to reach for the wrong tool; mitigation is internal documentation and a clear adapter contract.
  • Native-facility drift — Laravel's own URL/routing capabilities already cover the need, so the dependency provides negative value over time as the framework advances.

Ramp-up

Low on the technical side — install, adapt, consume. Meaningfully higher on the governance and ownership side: adopting an archived package requires an explicit internal maintainer, a fork strategy, and a documented exit criterion. Budget that institutional cost, not just the integration time. If innmind monads surface in the public API, add a short internal walkthrough on persistent collections and monadic composition, which sit outside typical Laravel experience.

Bottom line for the TPM: Score 0.17, 2 stars, 0 dependents, and archived status together indicate this package should not be adopted into a maintained Laravel application absent a verified capability gap that Laravel's native URL/router facilities cannot fill — and even then, plan to fork it rather than depend on it.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
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
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core