forjedio/inertia-table

Backend-driven dynamic tables for Laravel + Inertia.js

Maintainers

Package info

github.com/forjedio/inertia-table

Language:TypeScript

pkg:composer/forjedio/inertia-table

Statistics

Installs: 73

Dependents: 0

Suggesters: 0

Stars: 6

Open Issues: 1

v1.1.1 2026-03-26 15:22 UTC

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.

Tests PHP Coverage Vue Coverage React Coverage Documentation License

Inertia Table

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() and asIcon() 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 - beforeQuery and afterData hooks 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