Backend-driven dynamic tables for Laravel + Inertia.js.
Columns, sorting, search, and pagination - all from a single PHP class.
composer require forjedio/inertia-table+npm install vendor/forjedio/inertia-table/reactornpm install vendor/forjedio/inertia-table/vueDefine columns, sorting, and search in PHP. The frontend handles the rest.
use Forjed\InertiaTable\Table;
use Forjed\InertiaTable\Column;
use Forjed\InertiaTable\Columns\{
TextColumn, DateColumn,
ActionsColumn
};
class CompanyTable extends Table
{
protected string $defaultSort = 'name';
protected function columns(): array
{
return [
TextColumn::make('name', 'Company')
->sortable(),
TextColumn::make('industry', 'Industry')
->sortable(),
TextColumn::make('website', 'Website')
->sortable(),
DateColumn::make('founded_at', 'Founded')
->format('Y')
->sortable(),
ActionsColumn::make(),
Column::data('id'),
];
}
}import { InertiaTable } from 'inertia-table-react';
import { Bell } from 'lucide-react';
export default function Companies({ companies }) {
return (
<InertiaTable
tableData={companies}
actions={(row) => (
<button onClick={() => alert(row.id)}>
<Bell className="h-4 w-4" />
Alert
</button>
)}
/>
);
}
// Search, sorting, pagination
// all work automatically.This is what the code above produces - a fully interactive table with search, sorting, and pagination.

A complete table system - not just a component.
Text, Badge, Boolean, Date, DateTime, Link, Copyable, Component, Enum, Actions, and hidden data columns - plus icon modifiers for any column.
Column definitions, sorting rules, search fields, and display formatting all live in one PHP class. No duplication.
Every element is replaceable - cells, headers, search, pagination, empty state, toolbar. Via render props or slots.
Table hooks modify queries and data from outside the class. Frontend hooks connect tableSettings to JavaScript for realtime updates, analytics, or any custom behaviour.
Use the useTable hook with shadcn/ui, Headless UI, or your own components. Override any element or build the entire table from scratch.
All default styles include dark: variants. Works automatically with your Tailwind dark mode configuration.
One Composer install, one npm install, one PHP class - you have a complete table.
Read the docs