sebastiansulinski/php-paginator
A lightweight, framework-agnostic PHP paginator for splitting result sets into pages and rendering pagination links. Configure page size, current page, and base URL, preserve query strings, and integrate easily into Laravel or plain PHP projects.
Architecture fit. The package is a Laravel-ecosystem library whose public surface is coupled directly to illuminate/http and illuminate/support. That is the standard and correct shape for a Laravel add-on (service provider + HTTP-layer integration), but it means the package's release cadence is structurally bound to Laravel's annual major cadence rather than to its own feature roadmap. Every Laravel major forces a package major-or-near-major decision. v3.3.0 is that decision being made: rather than widening the constraint to ^12.0 || ^13.0, the maintainers replaced it with ^13.0.
Integration feasibility. Mechanically trivial for a consumer — one composer.json constraint, no API changes, no config migration, no data migration. The friction is entirely in timing, not in effort. This is a good trade for most teams: a one-line diff against a coordinated Laravel 13 upgrade.
Technical risk.
^12.0 || ^13.0) would be additive and safe; replacing is a de facto breaking change shipped in a non-major slot. Consumers on ^3.0/^3.2 are protected by Composer's resolver backtracking to 3.2.x. Consumers who pinned tightly (^3.3, or a lockfile refreshed with -W) while still on Illuminate 12 will get an unsatisfiable-constraint failure at composer update time — loud, not silent, which is the good failure mode.^3.2. That implies a live 3.2 line. Whether 3.2 receives security fixes, HTTP-layer correctness fixes, or is frozen is the highest-value unknown here.Key questions.
illuminate/http 13 changed signatures the package depends on, widening may be genuinely impossible — that changes the risk calculus and the upgrade urgency.Stack fit. Clean fit for any application on Laravel/Illuminate 13 with PHP >= 8.3. No fit for Illuminate 12 at this version — that is the entire content of the release. Teams on 11 or earlier have no path at 3.x and should treat this as out of scope.
Migration path. Two distinct populations:
illuminate/http major may have shifted internals.^3.2 explicitly, and treat the Laravel 13 upgrade as the gate. Sequencing the app upgrade and this package bump as a single change is correct; splitting them creates a window where the constraint is unsatisfiable.Compatibility. The PHP floor did not move (^8.3), which is a meaningful de-risk — no simultaneous runtime and framework jump. The only compatibility axis that changed is the Illuminate major. Note that Illuminate 13 may itself impose a higher PHP floor; the package's ^8.3 is a lower bound, not the effective bound, so verify the intersection with Laravel 13's own requirement rather than trusting the package constraint alone.
Sequencing. Recommended order:
^3.2 pin.For multi-service estates, stage this per service rather than as a monorepo-wide sweep — the blast radius is small per service but the coordination cost of a shared lockfile is not.
Maintenance. The package now requires two-track maintenance, and the team inherits the cost of that ambiguity. Practically: keep an inventory of which services are on 3.2.x versus 3.3.x and why. That inventory is the artifact that makes the next Laravel major cheap instead of a scramble. Expect this cycle to repeat annually — budget for it as recurring work, not a one-off.
Support. The dependency graph is now one-directional: you cannot get package fixes and stay on Illuminate 12 unless the maintainers backport. If question 1 above comes back "frozen," then 3.2.x is a dead end and the Laravel 13 migration acquires a hard deadline set by the first security advisory affecting the package or its illuminate/* dependencies. That is the scenario worth escalating to architecture, not just tracking.
Scaling. Little direct scaling concern — this is a library constraint, not a runtime characteristic. The scaling cost is organisational: it multiplies across every service that depends on the package, and it interacts with any shared base image or platform standard that pins a PHP/Laravel version. If a platform team owns that standard, they own this upgrade.
Failure modes.
composer update fails with an unsatisfiable constraint on Illuminate 12. Easy to diagnose, cheap to fix. This is the common case and it is benign.^3.2, forgets, and drifts a full Laravel cycle behind on both framework and this package. The cost surfaces later as a compounded upgrade with no intermediate tested state.illuminate/http major bumps occasionally change middleware or request-handling semantics without changing the package's own API. Passing tests do not fully cover this; targeted integration tests around the package's HTTP touchpoints do.Ramp-up. For an engineer already fluent in Laravel, near-zero — the release contains no new concepts or configuration. The ramp-up cost is entirely in knowing which version you are allowed to use, which argues for a short internal note or README line stating the version-to-Laravel-major mapping, sourced from the maintainers' own guidance. Budget roughly half a day per service for the coordinated bump including verification; near-zero if the service is already on Illuminate 13.
How can I help you explore Laravel packages today?