internations/datagrid-bundle
Internations DataGrid Bundle is a Symfony bundle for defining and rendering reusable data grids, with configurable columns, sorting, filtering, and pagination for Doctrine-backed admin and listing pages.
Architecture fit — poor, unchanged. The 4.0.2 note ("Symfony5.4 compatibility") tells us the package still positions itself as a Symfony bundle. A Symfony Bundle is registered in bundles.php, declares services in config/services.* (or legacy Resources/config/*.xml|yaml), and relies on Symfony's DependencyInjection container, tag-based compiler passes, and an Extension/Configuration pair. Laravel has none of that: no bundle registry, no compiler-pass pipeline, no @BundleName/... resource resolution. Symfony 5.4 still expects a kernel application, just a newer one. Laravel consumes Symfony components (HttpFoundation, Routing, Console, Process) but does not host a Symfony kernel. The only viable fit remains a framework-agnostic grid core with Symfony as a thin veneer — still unverified.
Integration feasibility — low, marginally better. The upgrade removes the most likely hard stop (a PHP 5.x-era constraint that Composer would refuse outright against PHP 8.1+) and replaces it with a version-tree problem. Symfony 5.4 implies symfony/framework-bundle ^5.4, which transitively pulls symfony/http-kernel, symfony/routing, symfony/console, etc. at ^5.4. Laravel 10 pins those at ^6.2; Laravel 11 pins them at ^7.0. Composer will very likely still refuse to resolve — just for a different reason, and one that is harder to see from the error message. Options are unchanged: (a) hand-wire each service in a Laravel service provider (brittle, unsupported); (b) run a Symfony micro-kernel alongside Laravel (disproportionate); (c) vendor/extract the non-Symfony classes and rewrite the adapter layer; (d) adopt a Laravel-native equivalent (filament/tables, power-components/livewire-powergrid, rappasoft/laravel-livewire-tables, or spatie/laravel-query-builder + Blade). Twig rendering very likely still applies, so a Blade shop gets no view layer for free.
Technical risk — high, composition shifted.
symfony/* component ranges colliding with Laravel 10/11 rather than a bare PHP floor. Verify by reading composer.json; if the constraint is ^5.4 only (no |^6.4 alternative), Laravel 11 is out, and Laravel 10 is doubtful.getContainer() on Bundle is gone, bundle inheritance is gone, resource conventions moved from Resources/ to bundle-root config/, templates/, translations/. Code written in that idiom will not boot inside Laravel regardless of which Symfony minor it targets.Key questions for the maintainer/spike owner (revised):
composer.json require ranges now — PHP floor and symfony/* constraints? Critically: is there a |^6.4/|^7.0 alternative, or is 5.4 a hard ceiling?symfony/* requirements overlap with Laravel's own pinned components, or are they limited to packages Laravel does not otherwise constrain?Stack fit — mismatch by construction, narrowed but not closed. Target stack is Laravel 10/11 on PHP 8.2/8.3 with Blade + Eloquent. This package now targets Symfony 5.4 with Twig + Doctrine. Every seam — container, routing, templating, ORM, HTTP — is still a different implementation. The release moves the gap from "one major framework generation" to "one minor-to-major version family," which is an improvement in degree, not in kind.
Feasibility spike (timeboxed, 1–2 days, before any commitment):
composer require internations/datagrid-bundle in a throwaway Laravel 11 skeleton, then in a Laravel 10 skeleton. Record both resolver outputs verbatim. Since PHP-floor blocking is now less likely, the conflict — if any — will surface as a symfony/* version-tree error, and the exact package pair named in that message is the cheapest possible decision input.composer require exit code.Symfony\Component\HttpKernel\Bundle, Symfony\Component\DependencyInjection, Doctrine, or Twig. Any hard reference in the core grid path kills the extraction route.filament/tables or power-components/livewire-powergrid offers.Migration path (if extraction is chosen):
app/Support/DataGrid (or a first-party packages/ path repo) with the MIT notice preserved.DataGridServiceProvider and config/datagrid.php; replace the Extension/Configuration pair with Laravel's config repository.Illuminate\Database\Eloquent\Builder adapter implementing the package's paginator/sorter contract. This is the largest single work item; budget it explicitly.DependencyInjection/, config/, the Bundle subclass — rather than trying to make it boot.Compatibility gates to check before writing code: no each(), no create_function(), no curly-brace string offsets, no dynamic properties (deprecated in 8.2), no assumptions about Symfony request internals that differ from Laravel's handling. Symfony 5.4 code is far more likely to be PHP 8.1-clean than Symfony 2 code was, so the static-analysis pass will be quieter — which raises, not lowers, the need to run it before assuming portability. Run PHPStan level 5+ immediately after vendoring.
Sequencing:
Recommendation to weigh in the decision: the expected value of the port is still low. The grid model is commodity — column definitions, filters, sorting, pagination. The 4.0.2 release does not change that calculation; it only changes which error you will hit first. Buying the capability from a maintained package with an active issue tracker costs days; porting this one costs 1–2 senior-engineer weeks plus permanent maintenance ownership.
Maintenance — you still inherit it. 4.0.2 is evidence of some upstream activity, which modestly improves the abandonment picture. It does not create a community: at 1 star and 0 dependents there is still no pool of consumers absorbing fixes. Any fork remains a first-party fork forever — every Laravel major upgrade, every PHP minor upgrade, every static-analysis tightening lands on your team. Budget roughly 5–10% of one engineer's capacity in perpetuity for a vendored fork of this size, versus near-zero for a maintained dependency. Note also that the maintainer has just spent effort reaching a branch past its bugfix EOL; the next required hop (Symfony 6.4/7.x) is unproven.
Support — effectively none. Expect a README and source as the only documentation. No issue-tracker history to mine means no known-issue list; your team discovers every edge case from scratch. There is no realistic path to upstream support, and PRs to a low-traffic bundle are unlikely to be reviewed promptly.
Scaling considerations. Grid packages concentrate load in query construction, and legacy implementations commonly exhibit: unbounded per_page / page parameters accepted without clamping (a trivial DoS vector), missing count-query optimization (double query per page), and no eager-load orchestration (N+1 on related columns). Symfony 5.4-era code will not fix these by itself. The Laravel adapter must be the enforcement point — clamp page size, cap sortable/filterable columns to an allowlist, validate all filter keys against the column registry before they reach the query builder. Do not pass request input through to the data source unvalidated. On the presentation side, server-side pagination is fine to thousands of rows; anything approaching client-side rendering of large result sets needs virtualization the package almost certainly does not provide.
Failure modes, ranked by expected cost:
symfony/* collides with Laravel 10 (^6.2) or Laravel 11 (^7.0) transitive pins, blocking a framework major upgrade. Still the highest-cost outcome — it can freeze the whole application's upgrade cadence for a grid. Slightly less certain than before, because the constraint may have been widened.Ramp-up. Near-zero institutional familiarity with this codebase, and the Symfony bundle idioms it uses (DI extensions, compiler passes, Twig) remain unfamiliar to a typical Laravel team — the ramp is "learn a framework generation we do not otherwise run," not "learn this package." Symfony 5.4 is more approachable than Symfony 2, so trim the estimate slightly: 1–2 weeks for a senior engineer to reach productive velocity on an extraction, plus review overhead from a second engineer who understands the ported query layer. A maintained Laravel grid package is a 1–2 day ramp with documentation, examples, and an issue tracker.
Bottom line for the roadmap: 4.0.2 is a real but narrow maintenance release. It removes the PHP-constraint hard stop and softens the abandonment signal, but it does not change the architecture, does not address Doctrine/Eloquent or Twig/Blade, and lands on a Symfony branch already past bugfix support. The dependency remains not adoptable for a Laravel codebase. Fund the 1–2 day spike only to produce a documented "no" and a capability matrix — and run it against both Laravel 10 and 11, because the failure will now be a version-tree conflict rather than an obvious PHP error. Route the actual requirement to a maintained Laravel-native solution unless the spike surfaces a genuinely unique, framework-independent grid capability that cannot be reproduced in under a week.
How can I help you explore Laravel packages today?