A dynamic, responsive datatable component for Laravel and Livewire 3 and 4 — searching, sorting, filtering, bulk actions, and more. Every snippet below is real v3 API, and each card links to a live demo.
Add a footer row with computed values — averages, totals, counts — per column via a callback over the visible rows.
->footer(fn($rows) => ...)
Refresh the table on an interval in milliseconds. Combine with setRefreshVisible() or setRefreshKeepAlive() to control when polling runs.
->setRefreshTime(10000)
Show a placeholder row while the table fetches data. Customize the text with setLoadingPlaceholderContent().
->setLoadingPlaceholderEnabled()
Make any column sortable and keep related records together with a default sort applied before user interaction.
->setDefaultSort('active', 'desc')
Apply conditional classes and attributes to rows and cells based on record data, with setTdAttributes() for individual cells.
->setTrAttributes(fn($row) => ...)
Customize the message shown when the table has no records, or hide the table entirely with setShouldBeHidden().
->setEmptyMessage('No results')
Display relationship aggregates with CountColumn, SumColumn, and AvgColumn — sortable out of the box.
CountColumn::make('Posts')->setDataSource('posts')
Render many related records inside a single cell, with a custom separator, wrappers, and per-item output format.
ArrayColumn::make('Tags')->data(fn($v, $row) => ...)
The full showcase: a dozen filter types, bulk actions with confirmation, column selection, and reordering in one table.
->setBulkActions(['export' => 'Export'])
Every table extends DataTableComponent and is configured in one place
public function configure(): void
{
$this->setPrimaryKey('id')
->setPerPageAccepted([10, 25, 50, 100])
->setSearchDebounce(500)
->setLoadingPlaceholderEnabled()
->setEmptyMessage('No results found');
}
Everything the package ships with today
->setSearchDefer(), ->setSearchLazy(), ->setSearchBlur(), ->setSearchThrottle(500), or ->setSearchDebounce(500)
->setReorderEnabled()
->setBulkActionConfirms([...])
->setRememberColumnSelectionEnabled()
->secondaryHeader() and ->footer() callbacks, or reuse the header as a footer with ->setUseHeaderAsFooterEnabled()
->collapseOnMobile() or ->collapseAlways()
->setFilterLayoutSlideDown() or ->setFilterLayoutPopover()
Built with ❤️ by Rappasoft
Laravel 12.70.0 • PHP 8.4 • Livewire v4.4.7