Skip to content

Introduction

Inertia Table is a backend-driven table rendering system for Laravel + Inertia.js. Define your table entirely in PHP - columns, sorting, searching, display formatting, and pagination - and the frontend renders it automatically.

Why Inertia Table?

If you've built tables in Laravel + Inertia, you know the pain. You define columns on the backend, then rebuild that same structure on the frontend. You wire up search with debouncing. You sync sort state with URL parameters. You handle pagination links. Every table is the same boilerplate, every time.

Inertia Table eliminates all of it.

Write one PHP class. Get a fully interactive table with search, sorting, pagination, and rich cell rendering - in both React and Vue. No frontend table logic. No state management. No duplicated definitions.

Define once, render everywhere

Your table structure lives in a single PHP class. Add a column, change a sort default, enable search - the frontend updates automatically. No coordinating changes across two codebases.

Ship fast, override anything

The default UI ships ready to use with Tailwind CSS. But every element - cells, headers, search, pagination, empty state, the entire toolbar - is replaceable. Use render props in React or slots in Vue. Plug in shadcn/ui components. Or use the useTable hook for complete control over the markup.

Built for production

  • 10 column types - Text, Badge, Date, Link, Copyable, Icon, Enum, Component, Actions, and hidden data columns
  • Three-tier sorting - user sort, pre-existing query orders, and configurable defaults
  • Enum integration - PHP enums with HasTableDisplay automatically render as coloured badges
  • Extension hooks - add realtime WebSocket updates, analytics, or feature flags without modifying the package
  • Dark mode - all styles include dark: variants out of the box
  • TanStack Table - the useTable hook returns a full TanStack table instance for advanced features

Free and open source

MIT licensed. No premium tier, no paid features, no vendor lock-in. Built and maintained by Forjed.

Packages

PackageRegistryPurpose
forjedio/inertia-tablePackagistPHP - table definitions, query building, serialisation
@forjedio/inertia-table-reactnpmReact - components, hooks, cell renderers
@forjedio/inertia-table-vuenpmVue 3 - components, composables, cell renderers

How It Works

PHP Table Classcolumns()searchable()$tableSettings$defaultSort$perPagetoArray()Inertia Propscolumns[]data[]links, metasearchabletableSettingsprops<InertiaTable>SearchSortable HeadersCell RenderersPaginationActions

The PHP table runs a pipeline - search → sort → paginate → map rows - and serialises the result. The frontend receives the data via Inertia page props and renders it. No API calls, no client-side data fetching.