Skip to main content

Laravel Livewire Tables

The easiest way to build full-featured, reactive data tables in Laravel. Search, sort, filter, paginate, export to CSV, bulk actions — zero custom JavaScript required.

Why Laravel Livewire Tables?

A powerful, server-side data table component for Laravel 10, 11, 12 and Livewire 3, 4. Designed for real-world applications that need sorting, searching, filtering, bulk actions, CSV export, dark mode, and multiple theme support — all in a single, easy-to-use package.

Zero Custom JavaScript

100% server-side. Powered by Livewire with Alpine.js for reactive UI interactions.

Multi-Version Support

Laravel 10/11/12, Livewire 3/4, PHP 8.1–8.4 — fully tested across 184 tests.

Three Beautiful Themes

Tailwind CSS, Bootstrap 5, Bootstrap 4 — all with dark mode support.

Production Ready

184 tests, 479 assertions across 9 PHP/Laravel/Livewire combinations.

Key Features

Global full-text search across multiple columns with debounce and join alias support. Single or multi-column sorting with configurable default direction.
Eight filter types: Text, Select, Boolean, Number, NumberRange, Date, DateRange, MultiDate with dependent/cascading support.
Exclusion-based selection model enabling instant select-all across pages. Execute custom actions on selected rows.
One-click CSV export from visible columns, or build custom exports with full control over data transformation.
Text, Boolean, Date, Image (with lightbox), Blade (custom views), Action (buttons) — all with formatting support.
Six toolbar injection points, lifecycle hooks (onQuerying, onQueried, onRendering, onRendered), event system, and state persistence.

Compatibility

Works with a wide range of Laravel, Livewire, and PHP versions:
PHPLaravelLivewireTestbench
8.110.x3.x8.x
8.210.x3.x8.x
8.211.x3.x9.x
8.311.x3.x9.x
8.211.x4.x9.x
8.311.x4.x9.x
8.212.x4.x10.x
8.312.x4.x10.x
8.412.x4.x10.x

Quick Example

UsersTable.php
<?php

namespace App\Livewire\Tables;

use App\Models\User;
use Illuminate\Database\Eloquent\Builder;
use Livewire\Tables\Columns\TextColumn;
use Livewire\Tables\Columns\BooleanColumn;
use Livewire\Tables\Filters\SelectFilter;
use Livewire\Tables\Livewire\DataTableComponent;

class UsersTable extends DataTableComponent
{
    public function configure(): void
    {
        $this->setDefaultPerPage(25);
        $this->setSearchDebounce(300);
    }

    public function query(): Builder
    {
        return User::query();
    }

    public function columns(): array
    {
        return [
            TextColumn::make('name')->sortable()->searchable(),
            TextColumn::make('email')->sortable()->searchable(),
            BooleanColumn::make('active')->sortable(),
        ];
    }

    public function filters(): array
    {
        return [
            SelectFilter::make('active')
                ->setOptions(['' => 'All', '1' => 'Active', '0' => 'Inactive'])
                ->filter(fn(Builder $q, $v) => $q->where('active', (bool) $v)),
        ];
    }
}
Use it in your Blade template:
users.blade.php
<livewire:tables.users-table />

Next Steps

Installation

Install the package and configure your Laravel application

Quickstart Guide

Build your first data table in under 5 minutes

Core Concepts

Learn about tables, columns, filters, and more

API Reference

Explore all column and filter types

Build docs developers (and LLMs) love