league/uri-schemes
A PHP library for working with URI schemes, offering dedicated classes to parse, validate, and manipulate HTTP, FTP, WebSocket, and other scheme-specific URIs. Built on league/uri components for consistent, standards-compliant URI handling.
Architecture fit
league/uri-schemes is not a Laravel component — no service provider, config, facade, or Blade/Eloquent hooks. It is a set of immutable value objects (Http, Ftp, Mailto, etc.) that would live in an app/Support/ or app/Services/Uri/ layer and be resolved through the container only if we wrap it ourselves.Integration feasibility
league/uri 5.x plus league/uri-components and league/uri-hostname-parser. 1.2.1 contains no dependency constraint changes, so it still conflicts with league/uri ≥6, which is what most modern Laravel and PHP packages pull in transitively. Installation succeeds only in an isolated legacy application; in a current stack it still hard-fails composer update.Technical risk
Uri::formatRegisteredName now throws UnexpectedValueException when ext-intl is misconfigured, rather than continuing with degraded behaviour. This converts a silent-divergence failure into a loud one — an improvement, but it introduces a new uncaught-exception path at call sites (see Operational Impact).league/uri ^7). 1.2.1 does not reverse that; it patches a line that the ecosystem has already moved past.Key questions
league/uri 5.x? (composer why-not league/uri ^7 settles this in minutes.) 1.2.1 does not change the answer.ext-intl correctly configured everywhere? The new UnexpectedValueException will surface misconfiguration as a runtime error rather than silent misbehaviour, so environment parity must be verified before rollout.Stack fit
league/uri ^7 provides the same value-object model with maintained code, so the "fit" argument still does not justify the legacy version.Migration path
League\Uri\Schemes\Http to League\Uri\Http in league/uri 6, and the accessor API (getHost, withQuery, getPath, and friends) is largely preserved. Expect a rename pass plus adjustment to the exception contract (League\Uri\Contracts\UriException) and stricter default validation.Compatibility
league/uri ≥6 is already resolved. Because a Composer install is all-or-nothing, one legacy consumer can force the entire monorepo back onto the 5.x line — check this before any per-service plan.Sequencing
composer why league/uri and composer why-not league/uri ^7 across every service and lockfile. Produce the blast-radius list.ext-intl misconfiguration/absence, asserting our wrapper handles the new UnexpectedValueException gracefully rather than emitting a 500.league/uri ^7 behind a thin internal UriFactory/UrlValidator interface so call sites never reference the vendor namespace.league/uri-schemes from every lockfile. Verify with composer audit.Maintenance and support
Scaling
Failure modes to design around
league/uri ≥6. Still the most likely production incident, and still a build-time rather than runtime failure — which is the good news.Uri::formatRegisteredName now throws UnexpectedValueException on a misconfigured ext-intl. This is a net improvement over silent divergence, but it is a newly reachable exception in production paths where the environment differs from staging. Verify ext-intl presence and configuration across all environments before deploying 1.2.1.Ramp-up
get*/with* accessors), so productivity arrives in hours. The cost is institutional rather than individual — stale docs, blog posts and Stack Overflow answers describe the 5.x API, and new hires will not know the package is effectively unsupported unless we tell them. Put that fact in the ADR and in a code comment on the wrapper, not in tribal knowledge.Recommendation
league/uri ^7 directly and route all call sites through a thin internal interface.league/uri 6/7 compatibility, PHP 8 support, a support commitment, or a roadmap. Treat this as a scheduled replacement, not a maintained dependency.How can I help you explore Laravel packages today?