forjedio/inertia-table
Backend-driven dynamic tables for Laravel + Inertia.js
533
24
| Install | |
|---|---|
composer require forjedio/inertia-table |
|
| Latest Version: | v1.2.0 |
| PHP: | ^8.2 |
| License: | MIT |
| Last Updated: | May 30, 2026 |
| Links: | GitHub · Packagist |
Maintainer: richard-forjedio
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 '@forjedio/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
Install the backend package via Composer:
composer require forjedio/inertia-table
Then install the frontend package for your stack:
# React
npm install @forjedio/inertia-table-react
# Vue
npm install @forjedio/inertia-table-vue
Both frontend packages need Tailwind to scan their dist/ so utility classes used by the table are emitted into your CSS bundle. See the per-package READMEs for the exact @source directive (Tailwind v4) or content entry (Tailwind v3):
Requirements
- PHP 8.2+
- Laravel 12 or 13
- Inertia.js 2.x or 3.x
- 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