protonemedia/inertiajs-tables-laravel-query-builder
Inertia.js tables powered by Laravel Query Builder. Build interactive data tables with sorting, filtering, searching, and pagination, with server-side query handling and a Vue/React front end.
Architecture fit
spatie/laravel-query-builder into an Inertia-shareable payload, and a Vue side that renders a table shell (sort headers, search input, filter controls, pagination, column selector). It assumes a Laravel + Inertia + Vue monolith — the dominant architecture for mid-size Laravel apps — and it fits that shape cleanly.allowedSorts / allowedFilters / allowedIncludes on the query builder, which means the backend contract survives a frontend rewrite (React/Svelte Inertia adapters, or a plain JSON API for a separate SPA). That materially lowers the cost of adopting it even if the Vue component is later replaced.?sort= and ?filter= directly into orderBy/where.Integration feasibility
composer require plus a Vue component registration — days, not weeks, for a team already on Inertia. The real effort is per-table: enumerating sortable columns, defining filters, and setting up searchable relationships. Budget per table, not per project.spatie/laravel-query-builder is an active, well-maintained dependency, which is the saving grace: the harder, security-sensitive half of the work is still maintained upstream. The archived layer is comparatively thin glue.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Archived upstream (no patches, no CVE response) | High | Any defect or incompatibility is ours to fix permanently |
| Framework drift (Laravel / Inertia / Vue majors released post-2023) | High | Composer constraints may block upgrade paths; peer deps may not resolve |
Transitive drift on spatie/laravel-query-builder |
Medium | Major version bumps can break the package's internal calls |
| Bus-factor / abandonment | Medium | Vendor has rebranded; package lineage appears to have a successor. Verify before committing |
| Low ecosystem signal (0 listed dependents) | Medium | Suggests limited production hardening; fewer public answers when it breaks |
| Frontend coupling to Vue component API | Low–Medium | Props/slot contract becomes a de facto internal API once teams build on it |
The composite score (~8.8) reads as "well-designed, well-documented, small and focused." That is accurate and also insufficient: for a dependency you intend to keep for years, maintenance status dominates design quality. Treat the archive flag as the deciding input, not a footnote.
Key questions
spatie/laravel-query-builder plus ~200 lines of in-house Vue table component? For most teams this is 3–5 engineer-days, and it eliminates the abandoned dependency entirely.Stack fit
Migration path
Three viable routes, in ascending order of commitment:
spatie/laravel-query-builder (actively maintained) and replace the Vue table component with an internal one modeled on this package's API. Highest upfront cost, lowest long-term risk; the right call if the successor package is not viable or if we need capabilities beyond it.The decision should be made on the successor question first. If a maintained successor exists with a small delta, route 1 becomes route 0 — just use the successor.
Compatibility
illuminate/* constraints, Inertia adapter version, Vue major, spatie/laravel-query-builder major, and build tooling (Vite vs Laravel Mix). The last one bites silently — 2023-era packages frequently ship Mix-era asset assumptions.Sequencing
Maintenance
Support
Scaling
COUNT(*) over large filtered sets on every request; search across unindexed LIKE '%term%' columns; eager-loading allowedIncludes that fan out into N+1 or cartesian joins; and relation-based sorts with no supporting index.Failure modes
composer update — the highest-probability failure. A transitive major bump changes behavior without an error at install time. Mitigate with a committed lockfile and a smoke test on one table per release.allowedFilters/allowedSorts diffs.Ramp-up
spatie/laravel-query-builder semantics (filter scopes, allowedIncludes, custom sort classes). One internal walkthrough plus a reference implementation in the codebase covers it.Bottom line for the decision record: the package is well-designed and cheap to trial, but it is archived, predates the current framework generation, and has minimal ecosystem signal. Approve a short spike only — gated on resolving the successor question — and default to the fork-and-own or re-implement-on-maintained-primitives route rather than adopting the archived artifact directly.
How can I help you explore Laravel packages today?