kibatic/datagrid-bundle
Kibatic DatagridBundle is a Symfony/PHP bundle for building reusable, configurable data grids from Doctrine queries or arrays. Define columns, filters, sorting, and pagination with minimal code, then render clean tables for admin, reporting, and data-heavy screens.
Framework-level go/no-go, first and foremost. The scoring metadata calls this a "Laravel/PHP package," but the artifact is a Symfony bundle (description.md and the license header both say Symfony). For a Laravel codebase the only PM decision this supports is reject — no service provider, no config file, no facade, and a hard pull toward Symfony's DI container, Twig, and Doctrine. Do not let a generic "datagrid" name generate a false positive in a Laravel build-vs-buy review.
Back-office build vs. buy — but only on Symfony services. If the roadmap includes a Symfony admin/ops surface, this bundle reframes the recurring "sort, filter, paginate, export" work as one configurable component instead of per-screen bespoke code. That is a sprint-capacity decision: days-per-screen versus hours-per-screen, multiplied by however many list views are queued.
Server-rendered vs. JS data-table investment. Adopting a Twig-rendered grid is implicitly a decision not to stand up a React/Vue/TanStack table stack for internal screens. That trade-off belongs in the decision record, not buried in an implementation ticket — it constrains who can build admin screens and how they get maintained.
Saying "yes" cheaply to ops requests. Ops and support teams repeatedly ask for filtering, sorting, and consistent list behavior. A named, shared grid abstraction lets you answer those requests with a component rather than a negotiation. Without one, every request is a scoping exercise.
Standardization of internal tooling. If three or more teams are building admin listings, a shared grid definition (one class per resource, columns/filters/sort declared in one place) is a real consistency win — same interaction model everywhere, one place to fix a bug.
Dependency-risk posture. With 14 stars and 0 dependents, selecting this is a decision to be the project's most significant adopter. That is a legitimate risk-appetite call, but it must be made explicitly by someone accountable for maintenance, not silently by whoever writes the Composer line.
Use cases where it genuinely fits: internal ops dashboards, support tooling, reporting screens over Doctrine entities — low traffic, low design bar, tolerant users, Symfony/Twig stack already in place.
Consider it when:
Look elsewhere when:
For executives — one paragraph: Across our internal admin tooling we repeatedly rebuild the same sorting, filtering, pagination, and export logic on every listing screen. A small MIT-licensed Symfony component could standardize that and shorten each screen's build. The financial case is modest and one-directional — the license is free and integration is measured in hours — but the strategic case is weak: the project has roughly 14 stars and no downstream users, so we would be its most significant adopter and would likely end up owning the code. The ask is therefore not "adopt this," but "fund a one-sprint evaluation on one non-critical screen, with an explicit expectation that we may fork it or revert to hand-rolled code." Low downside, bounded upside, cheaply reversible. Separately, note that this is a Symfony component: it is irrelevant to any Laravel service on our roadmap, and any scoring that filed it as a Laravel package is a metadata error worth correcting upstream.
For engineering — the summary:
Symfony-native datagrid bundle: Doctrine plus Twig oriented, MIT, with recent releases but effectively no community gravity — 14 stars, 0 dependents, single-maintainer risk, no commercial support, and an anomalous future-dated release tag to verify before trusting it as a stability signal. Proposal: spike it behind an internal DataGrid interface on one admin screen, gated on a Composer resolution check against our pinned PHP/Symfony/Doctrine/Twig versions. If resolution fails or requires downgrading a core dependency, stop. If the abstraction holds, we get consistent list views across back-office tooling and a one-file swap if we ever need to replace it. If it doesn't hold — or if we find ourselves patching the bundle rather than configuring it — we vendor the useful parts under MIT and move on. Either way, the interface boundary is the deliverable; the package is incidental. Load-test a representative grid before any production traffic: query construction (N+1s, large OFFSET pagination, unindexed sorts) is the real risk regardless of package quality. On Laravel services, do not attempt this — reimplement the ~200 lines of needed behavior in Eloquent and Blade instead.
What not to say: don't frame this as a strategic platform choice or a standardization initiative. It does not survive that level of scrutiny, and it doesn't need to.
How can I help you explore Laravel packages today?