Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Grid Bundle Laravel Package

sylius/grid-bundle

SyliusGridBundle brings advanced, configurable grids to Symfony applications, with filtering, sorting, pagination, and flexible data sources. Part of the Sylius eCommerce stack, it lets you build powerful admin listings and reusable grid definitions with clean, maintainable configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • sylius/grid-bundle is a Symfony bundle, not a Laravel package. It assumes Symfony's DI container, bundle registration, compiler passes, Twig, Doctrine, and PagerFanta. There is no service provider, facade, config publishing, or Blade integration.
  • Core value is a config-driven grid abstraction: field definitions, filters, sorting, actions, pagination, and data sources (Doctrine ORM, Doctrine DBAL, array). Grids can be declared in YAML or built in PHP via GridBuilder (the direction of travel — see 1.11+ releases).
  • It is one component of the Sylius Stack, decoupled from the ecommerce product but still driven by Sylius' own back-office requirements. That is the architectural reality: a first-class fit for Symfony admin/back-office CRUD listing screens, and a poor fit for anything else.
  • For a Laravel codebase, the honest assessment is concept reuse, not code reuse. You would be porting the grid-definition model (fields/filters/actions as declarative config) into Laravel-native tooling, not installing this package.

Integration feasibility

  • Symfony path: composer require sylius/grid-bundle, enable the bundle, define a grid in YAML or a GridBuilder service, render with the provided Twig helpers. Documentation lives at stack.sylius.com/grid and is adequate for a first grid; beyond that, source reading is expected.
  • Laravel path: not feasible within a normal budget. You would need to reimplement container wiring, the render layer, pagination bridging, and filter/sort parsing. Estimate 1–2 sprints of glue code plus a permanent upgrade tax — which defeats the purpose of adopting a package.
  • If the org runs both Symfony and Laravel, scope adoption explicitly to the Symfony service only.

Technical risk

  • Security history is a real signal: v1.10.1 was a security release fixing DQL injection via sorting parameters, and v1.10.2 immediately re-relaxed sorting on disabled fields to preserve BC. Filter/sort parameters are user-controlled input hitting the query layer — treat this as an attack surface you must own.
  • Upgrade churn: v1.16.x is actively reshuffling public API (builder interfaces moved into the Grid component, AbstractGrid removed/deprecated, BC-alias guards added, subsequent patch to fix alias autoloading). The 1.x line has moved PHP 7.2 → 7.4 → 8.0 and Symfony 5.0 → 5.1 → 5.2 → 5.4 → 6.x/7.x. Minor versions are not always boring.
  • Adoption signal is weak: 134 stars and a reported 0 dependents. The real user base is Sylius ecommerce installs. Community answer depth outside that context will be thin, and roadmap priority will follow Sylius' needs.
  • Mitigant: MIT license, corporate backing, active CI, and a long continuous release history. Bus factor is better than the star count implies; strategic direction risk is worse.
  • Key questions to resolve before a build decision
    1. Do we have a Symfony service in scope, or is this being evaluated for Laravel? (If Laravel: stop here.)
    2. What PHP/Symfony/PagerFanta versions are pinned, and do they satisfy the bundle's constraints?
    3. Do we need multi-source grids (ORM + external API + in-memory arrays), or is single-entity Doctrine enough?
    4. Are CSV/Excel export, per-row ACL, bulk actions, and saved filter sets in scope? Several are custom work on top of the bundle.
    5. Who owns security advisory monitoring and minor-version upgrades?
    6. Has the admin UI framework already been chosen? If Filament/Nova/Orchid is on the table for Laravel, this evaluation is a spec-writing exercise.

Integration Approach

Stack fit

  • Green light: Symfony 6/7 + Doctrine ORM + Twig + PagerFanta, back-office/admin listing screens with filters, sorting, and row actions.
  • Yellow: Symfony app with a non-Doctrine primary datastore — the array/DBAL data sources exist but you lose most of the ergonomics.
  • Red: Laravel (any version). Do not attempt a direct integration; reuse the pattern.

Migration path

  • Symfony: adopt incrementally, replacing hand-rolled controller+repository listing endpoints one screen at a time. Start with a single read-only grid over an existing entity, prove the rendering and filter UX, then expand.
  • Prefer PHP GridBuilder services over YAML for new grids: IDE support, static analysis, and testability. Do not build on AbstractGrid — the 1.16 line is removing it.
  • Laravel: treat this package as a reference architecture. Extract the declarative model (grid → fields → filters → actions → data source → pager) into an internal spec, then implement against Filament, Nova, Orchid, or a Livewire/Inertia table component. This preserves the design thinking without importing an incompatible runtime dependency.

Compatibility

  • Pin to the latest stable 1.x and read the deprecation notices emitted by the BC-alias guards on every upgrade — they are your early warning system.
  • Verify the transitive constraints against the host app before committing: PHP minor, Symfony minor, Doctrine ORM/DBAL, PagerFanta major, Twig.
  • Lock the version in composer.json with a caret range on the minor, not the major, and treat every minor as a review item.

Sequencing

  1. Phase 0 — Spike (3–5 days): install in a branch, one grid on the highest-traffic admin entity, measure query cost and template override effort. Kill or continue here.
  2. Phase 1 — Standards (1 week): define the team's GridBuilder conventions, base template overrides, naming, and a lint/CI check that grids compile.
  3. Phase 2 — Actions & access (1–2 weeks): row actions, permission checks per action, export if required. This is where most custom work lands.
  4. Phase 3 — Migration (iterative): retire legacy listing endpoints screen by screen; each migration should be independently shippable.
  5. Phase 4 — Steady state: assign an owner, calendar a quarterly dependency and advisory review.

Operational Impact

Maintenance

  • Small code surface, but non-trivial upgrade cadence. Budget roughly 1–2 engineer-days per minor release for review, deprecation cleanup, and regression on overridden templates.
  • MIT with no vendor SLA. Security patching depends entirely on the team watching GitHub advisories and release notes — the 1.10.1 DQL injection fix is the precedent, and there is no CVE feed guarantee.
  • Template overrides are the highest-friction maintenance item: they break silently on patch upgrades and are invisible to static analysis.

Support

  • Documentation is centralized at stack.sylius.com/grid, which is serviceable for onboarding but sparse for edge cases (custom data sources, complex filter composition, export).
  • Issue routing is awkward: the README directs bug reports to the Sylius/Sylius monorepo, not the bundle repo. Triage and searchability suffer; assume you will read source.
  • Community depth outside Sylius ecommerce is thin. Plan for internal expertise, not external answers.

Scaling

  • Grids are query-driven: every filter and sort becomes DQL/DBAL. Performance is a function of index coverage on filtered and sorted columns, not of the bundle.
  • Large tables will punish OFFSET pagination. If listing screens grow past mid-six-figures of rows, plan keyset pagination or a search index (Elastic/Meilisearch) as a separate workstream — the bundle will not solve it.
  • Displaying related-entity fields is an N+1 risk; audit generated queries on every new grid before shipping.
  • Array data sources load into memory; they are fine for admin reference data and dangerous for anything unbounded.

Failure modes

  • Crafted sort/filter parameters reaching the query layer — the historical injection vector. Enforce a whitelist of sortable/filterable fields per grid and add tests.
  • Container compile failures from malformed grid config, caught only at boot; mitigate with a CI step that builds the container.
  • Deep-page navigation timing out on large tables.
  • Silent behavior changes across minors (the 1.10.1 → 1.10.2 sorting-on-disabled-fields flip is the canonical example) — regression tests around sort/filter behavior are mandatory.
  • Stale template overrides after an upstream Twig change.

Ramp-up

  • Symfony developer: ~1 day to a first working grid, ~1 week to fluent use of GridBuilder, filters, actions, and template overrides.
  • Laravel-only team: not recommended. The prerequisite is Symfony DI and Twig fundamentals, and the payoff is a package that still needs glue. Redirect that effort to a Laravel-native admin framework and borrow the declarative grid model as the design input.
  • Net TPM read: the opportunity score is attractive, but the leverage here is architectural pattern, not the dependency. Adopt the bundle only where the stack already matches; everywhere else, mine it for design and move on.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log
hsluv/hsluv
seampact/codegen
seampact/hooks
seampact/ir
mehedimi/laravel-amp-mail
happones/laravel-vue-i18n-generator
jwerd/inertia-table