unnathianalytics/laragrid
Excel-style keyboard-first datagrid for Laravel and Livewire. Configure sorting, filtering, editable cells, and formulas entirely in your component class—no Blade wiring, npm, or JavaScript. Server-side validated over renderless RPCs.
Architecture fit. LaraGrid inverts the usual Livewire datagrid model. Instead of letting Livewire own the DOM and re-render rows on every interaction, it delegates the grid body to a framework-free vanilla JS engine inside a wire:ignore region and routes all reads and writes back to the server over renderless RPC endpoints. That is a defensible architecture for the stated problem — spreadsheet-trained operators working with large row counts who need Excel muscle memory (arrow-key navigation, range selection, type-to-edit) without Livewire round-trips on every keystroke. It fits Laravel applications that already run Livewire and whose pain point is a table that must be fast, dense, and server-authoritative. It is a poor fit for anything that needs the grid cells to participate in normal Livewire reactivity, Alpine composition, or reactive form state — the wire:ignore boundary is deliberate and permanent.
Integration feasibility. The install story is the package's strongest commercial argument: composer require is the whole install, configuration happens in the Livewire component class via chained methods, and there is no Blade wiring or npm step. For a Laravel shop without a frontend build pipeline, or one that has been burned by maintaining a custom Vue/React grid, that is a real reduction in integration surface. The TPM question is whether "configuration in the component class" stays legible at scale — chained fluent APIs tend to become a second DSL, and column definitions with validation, authorization, formatting, and footer aggregation rules can sprawl. Worth prototyping a realistically complex grid (30+ columns, mixed types, per-column policy checks) rather than the README's resort list.
Technical risk. This is the crux. The package is at readme maturity, 60 stars, and zero dependents — no observable production footprint outside the vendor's own accounting system. That is a single-maintainer, pre-adoption dependency. Specific risks:
wire:ignore contract are tightly bound to Livewire internals. A Livewire 3→4 major release is a plausible breaking event, and a 60-star package may not track it quickly.Key questions for the vendor/evaluation spike.
wire:ignore boundary make Dusk/browser tests mandatory?Stack fit. Targeted at Laravel + Livewire monoliths, ideally Livewire 3, PHP 8.1+. The natural home is an internal back-office, admin, or accounting/ops tool where the users are professionally spreadsheet-literate and the data is relational and server-authoritative. It is a weak fit for public-facing surfaces, mobile-first experiences, or applications with an existing design system that demands full control of table markup. Confirm the app's Livewire version and Tailwind/asset posture before anything else — those two facts gate the entire evaluation.
Migration path. Treat this as a net-new grid, not a replacement. Migrating an existing datagrid in place means simultaneously changing the interaction model, the rendering ownership, and the server contract — three variables at once with no rollback signal. The lower-risk path is to introduce LaraGrid on one new or low-traffic screen, keep the incumbent grid everywhere else, and let both coexist. The three usage modes (display, server-side readonly, editable) give a clean ladder: start readonly with sorting/filtering/pagination to validate performance and the RPC pipeline, then graduate to editable on a single entity once the readonly screen has run in production for a release cycle.
Compatibility. The wire:ignore region is an isolation boundary in both directions. Anything the host page expects to do to grid cells — Livewire $dispatch handlers, Alpine x-data scoping, parent re-renders triggered by a filter change elsewhere on the page — must go through the package's supported channel or it will not reach the cells. Audit the target screen for cross-component interactions before scoping. Similarly, confirm the package's CSS does not collide with the host's table styles, since the grid body is not Blade-rendered and will not inherit component-scoped styles predictably.
Sequencing.
Maintenance. Low day-to-day, high tail-risk. There is nothing to build or deploy — no npm step, no asset pipeline — which removes a recurring maintenance tax that custom grids reliably impose. The flip side is that the grid engine is vendored code the team does not control. Budget for a pinned Composer version, a documented upgrade-test procedure, and periodic review of whether the package has tracked Livewire majors. Assume the team may eventually have to fork; scope that possibility early by confirming the JS engine is readable and not minified-only in the distributed package.
Support. The support model is community/README. There is no vendor SLA, no paid tier mentioned, and 60 stars implies a small user base and thin issue-response capacity. For a TPM, this maps to an internal-ownership requirement: someone on the team must be capable of reading the vanilla JS and the PHP pipeline, or the package becomes an unmaintainable black box the moment the maintainer goes quiet. Assign that owner at adoption, not after the first incident.
Scaling. The architecture scales well on the client — no Livewire morph on rows means large, dense grids stay responsive — and the server-side pagination/filtering keeps memory bounded. The scaling risk is on the RPC volume side: an editable grid generating one server call per committed edit, per user, across a large operator population, is a different load profile than form-submit-per-page. Model the edit rate before a wide editable rollout and confirm the endpoints are not doing anything expensive per call (full recompute of a footer, re-authorization against a heavy policy graph). Footer totals that recompute over the full filtered set are the classic offender here.
Failure modes. Ranked by operational severity:
Ramp-up. For developers: low mechanical cost (composer require, fluent config in the component class) but a real conceptual cost. The team must internalize a model where the grid body is not Livewire-reactive and where the source of truth for a cell is the JS engine until the server confirms. Developers steeped in Livewire's "state is the DOM is the state" habit will write broken code here — dispatching a Livewire event expecting rows to update, or adding an x-show inside a cell that never evaluates. Budget one onboarding session and a short internal "do not do this" doc.
For end users: the package targets spreadsheet-trained operators, so for that cohort ramp-up is near-zero and is the entire reason to adopt. For mixed or less technical audiences, the keyboard-first model needs a discoverability layer (mouse affordances, a shortcut hint) or adoption will stall — which the readonly mode partly sidesteps.
TPM recommendation. Worth a funded spike, not a funded rollout. The architectural thesis is sound, the zero-build install is a genuine differentiator, and the readonly mode alone may justify adoption. But at readme maturity with zero dependents and one maintainer, the gating decision is not "does it work" — it is "can we own it if the maintainer cannot," and whether the wire:ignore boundary is acceptable to this application's reactivity model. Answer those two, and the integration risk collapses from strategic to tactical.
How can I help you explore Laravel packages today?