forjedio / inertia-table
Backend-driven dynamic tables for Laravel + Inertia.js
Package info
github.com/forjedio/inertia-table
Language:TypeScript
pkg:composer/forjedio/inertia-table
Requires
- php: ^8.2
- illuminate/console: ^12.0|^13.0
- illuminate/database: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^3.9
- laravel/pint: ^1.29
- orchestra/testbench: ^10.0
- pestphp/pest: ^3.0
- pestphp/pest-plugin-laravel: ^3.0
- phpstan/phpstan: ^2.1
This package is auto-updated.
Last update: 2026-04-26 15:30:14 UTC
README
Backend-driven dynamic tables for Laravel + Inertia.js. Define your entire table in PHP - columns, sorting, searching, pagination, and display formatting - and the frontend renders it automatically. No duplicated definitions, no frontend table logic, no state management.
Quick Example
class CompanyTable extends Table { protected string $defaultSort = '-created_at'; protected function columns(): array { return [ LinkColumn::make('name', 'Name') ->route('companies.show', ['company' => ':id']) ->sortable(), TextColumn::make('email', 'Email')->sortable(), EnumColumn::make('status', 'Status')->sortable(), BooleanColumn::make('active', 'Active'), DateTimeColumn::make('created_at', 'Created')->sortable(), ActionsColumn::make(), Column::data('id'), ]; } protected function searchable(): array { return ['name', 'email']; } }
Pass it to your Inertia page:
return Inertia::render('Companies/Index', [ 'companies' => CompanyTable::make(Company::query())->paginate(), ]);
Render it on the frontend:
import { InertiaTable } from 'inertia-table-react'; export default function Index({ companies }) { return <InertiaTable tableData={companies} />; }
That's it. Search, sorting, pagination, and all cell rendering handled automatically.
Features
- 11 column types - Text, Badge, Boolean, Date, DateTime, Link, Copyable, Enum, Component, Actions, and hidden data columns
- Icon modifiers -
withIcon()andasIcon()on any column with map, closure, or fixed icon support - Sorting - single-column with URL state, three-tier priority,
-prefix for descending - Searching - global full-text search with configurable debounce
- Pagination - full and simple modes with configurable per-page
- Enum integration - PHP enums automatically render as coloured badges
- Table hooks -
beforeQueryandafterDatahooks for query modification and data transformation - Frontend hooks - extension system for realtime updates, analytics, and feature flags
- Link routing - Ziggy or server-side URL resolution (configurable)
- Multiple tables - identifier system for independent tables on the same page
- Component columns - register reusable frontend components for custom cell rendering
- Dark mode - all styles include
dark:variants out of the box - Fully customisable - override any cell, header, search, pagination, or toolbar via render props. Compatible with shadcn/ui.
Installation
composer require forjedio/inertia-table
# React npm install vendor/forjedio/inertia-table/react # Vue npm install vendor/forjedio/inertia-table/vue
Requirements
- PHP 8.2+
- Laravel 12 or 13
- Inertia.js 2.0+
- React 18/19 or Vue 3.4+
- Tailwind CSS 3.4+ or 4.0+
Documentation
Full documentation is available at inertia-table.forjed.io.
Live Demo
See it in action at inertia-table-demo.forjed.io.
License
MIT