zhortein/datatable-bundle
A Laravel datatable bundle that simplifies presenting and managing tabular data. It provides reusable table rendering with filtering, sorting, and pagination support, helping you build admin lists and searchable records with less boilerplate.
This package gives you themed, server-rendered tables with typed cells, partials and a client-side Stimulus layer (search builder, dynamic controls, confirmation dialogs). v2.0.0-beta.1 is a major-with-breaking-changes beta — if you're on 1.x, read docs/migration-2.0.md before touching code.
Minimal path on a fresh app:
php artisan vendor:publish for the package tag, then build via your asset pipeline).BootstrapTheme remains the default maintained theme; if you have no explicit theme config, you're on it.<dialog> confirmation flow.Where to look first:
BootstrapTheme — default cell presentation moved here. If a cell looks different after upgrading, this is where the markup went.docs/migration-2.0.md — the three upgrade axes: template overrides, assets, confirmation dialog.First use case to validate: a resource index page with a searchable column, one custom partial, and a destructive action. If that renders and the dialog behaves, the rest is variation.
Theme selection and custom themes. Treat the registry as the contract. Register your theme with explicit capabilities (assets: owned or host-supplied) and its own template namespace. Because metadata is immutable, don't reach in and mutate a registered theme at runtime — register a variant or a thin subclass of BootstrapTheme that only overrides what differs. This keeps capability checks honest.
Template override. Every shell, partial and typed-cell template now resolves through the selected theme. Practical pattern: create your own theme that extends BootstrapTheme, override the two or three templates you actually need, and let the rest fall through. Avoid copying whole template trees into resources/views/vendor/… — that's the 1.x habit the migration guide is steering you away from, and it will silently pin you to old markup.
External theme packages. If you ship a theme as a Composer package, the fresh-host validation is your integration test. Add a CI job that installs the package into a clean Laravel app, registers the theme, and renders a table — this catches missing asset declarations and template namespace typos that pass locally when your dev machine has stale published assets.
Typed cells. Put presentation logic in the theme, not in the cell class. A cell should hand over a value and a type; the theme decides markup and classes. If you find yourself emitting Bootstrap classes from application code, you've leaked the theme and will fight it on the next theme swap.
Stimulus controllers. The vanilla controller is now decoupled from Bootstrap imports and generated classes. Pattern: keep your own controllers free of framework CSS classes, and read control classes from the theme-supplied attributes/data the controller renders rather than hardcoding them. If you have a 1.x controller that imported Bootstrap JS directly, replace those imports with the theme's supplied behaviour.
Search builder. Dynamic rule rows are built with DOM nodes and textContent. If you extended the builder with custom rule types, follow that pattern: document.createElement + textContent, never string concatenation with user input. Custom renderers that still interpolate HTML will work but reintroduce exactly the injection risk this release closed.
Confirmation dialogs. Confirmation now uses the native <dialog> element. Pattern: let the theme own the dialog markup, and wire your destructive actions to the shared confirmation helper rather than confirm(). If you had a Bootstrap modal override, port it to <dialog> — showModal(), close, and the cancel event — instead of restoring the modal.
BootstrapTheme. If your app published cell partials, they may now be shadowed or bypassed. Diff your cell output before and after the upgrade rather than assuming your override still wins.<dialog> has real behavioural differences: focus trapping, ::backdrop, ESC handling and form integration. If you have JS asserting on modal DOM or Bootstrap events (shown.bs.modal), it will break silently. Search your JS for those event names during the upgrade.2.0.0-beta.1 exactly and keep a 1.x branch. Do not use a ^2.0@beta constraint in a project you'll be away from; beta APIs around the registry may still shift before stable.How can I help you explore Laravel packages today?