deepdiver/laravel-cursor-paginator
Cursor-based pagination for Laravel query builder and Eloquent models, offering simple paginators that page through large datasets efficiently without offset queries.
Architecture fit. Cursor pagination is a legitimate architectural requirement for any read path that pages deep into large, append-heavy tables — activity feeds, audit logs, exports, notification lists — where OFFSET cost grows linearly with page depth and rows shift under concurrent writes. This package targets that problem by supplying a cursor paginator that plugs into Laravel's query builder. The architectural intent is sound. The problem is timing: Laravel shipped first-party cursorPaginate() in the 8.x line, which makes this package's core capability redundant on every currently supported framework version. Adopting it means taking on a third-party abstraction for something the framework now owns.
Integration feasibility. Mechanically trivial — a Composer dependency with service-provider registration, no infrastructure requirements, no schema changes. Feasibility is not gated by integration mechanics but by maintenance posture: the repository is archived, so "can we install it" and "should we depend on it" have different answers.
Technical risk — HIGH. The signals are uniformly negative: archived, zero stars, zero dependents, no evidence of production use anywhere. There is no upstream security response process, no CI signal we can inspect, and unverified compatibility with current PHP and Laravel releases. The failure modes specific to cursor pagination are exactly the ones a maintained project would have hardened: cursor opacity and tamper-resistance (is the cursor signed, or just base64-encoded row values?), deterministic tie-breaking when the sort key is non-unique, multi-column sort encoding, and stability of cursor format across schema changes. With no dependents, we would be the only known consumer — meaning we would discover these edges ourselves, in production.
Key questions for the team.
Stack fit. Fit is conditional and narrow: this package is only defensible on a Laravel version that predates native cursor pagination and cannot be upgraded in the program's timeframe. On Laravel 8+ it is strictly dominated by the framework's own implementation, which is maintained, documented, security-reviewed, and already in the dependency tree.
Migration path. The target state is framework-native cursorPaginate() on the endpoints that need it. That is a behavioral change, not a drop-in swap: the cursor token format differs, the JSON response envelope differs, and clients that persist or replay cursors will break. Treat it as an API version bump — introduce the native cursor response behind a new version or feature flag, run both shapes in parallel, and retire the old one on a published timeline.
Compatibility. Unverified and unverifiable at acceptable confidence: archived projects carry no compatibility matrix, no CI, and no release cadence against new PHP minors. Assume it does not support current PHP and plan accordingly; do not let a green local install stand in for a compatibility assessment.
Sequencing.
OFFSET behavior at realistic page depths.Maintenance. Zero upstream. Archived means no patches, no PHP/Laravel compatibility work, no security advisories. Any consumption of this package is effectively an internal fork from day one — budget accordingly rather than treating it as a free dependency.
Support. No community, no issue triage, no maintainer to escalate to. Support reduces to whichever engineer on our team reads the source. That is a bus-factor of one, on a component sitting in the request path of user-facing reads.
Scaling. The scaling properties belong to the technique, not the package: cursor pagination gives stable per-page cost regardless of depth and avoids the offset scan, which is precisely what we want on large tables. This is an argument for cursor pagination as a pattern and a weak argument for this specific implementation — we can obtain the same scaling from the framework.
Failure modes.
Ramp-up. Low for anyone fluent in Laravel pagination — the API surface is small and familiar. The cost is not learning the package but debugging it: opaque cursor defects are expensive to reproduce and there is no upstream knowledge base to lean on. Net: cheap to start, expensive to own.
TPM recommendation. Do not adopt. The capability is correct, the vehicle is not. Pursue framework-native cursor pagination; where the framework version blocks that, vendor the pattern in-house with tests and ownership rather than take a dependency on an archived, unadopted package for a problem the platform already solves.
How can I help you explore Laravel packages today?