Skip to content

Filament 5 plugin

Render huge Filament tables fast, at any size.

Keep your table() definition. Just add ->fast().

Filament 5.10+ · PHP 8.3+ · Laravel 11.28+ · Works on mobile · 1,000 rows in 0.3 s

1,000 rows per page: 0.3 s, not 12.8 s.

Same table, same query, same server. The native table gets slower with every row you add to the page. Fast Tables stays at 0.3 s whether the page has 1,000 rows or a million.

1,000 rows per page

Time to first rows ↓ lower is better

Fast Tables 0.3 s, native table 12.8 s. Lower is better. Fast Tables is 42 times faster.

Browser memory ↓ lower is better

Fast Tables 30 MB, native table 163 MB. Lower is better. Fast Tables is 5.4 times lighter.

Measured on the live demo in Chromium.

Fast Tables shows 1,000 rows per page in 0.3 s with 30 MB of browser memory.

Try 1,000 rows per page in the demo →

100,000 rows per page

Time to first rows ↓ lower is better

Fast Tables 0.4 s, native table not run (simulated). Lower is better.

Browser memory ↓ lower is better

Fast Tables 38 MB, native table not run (simulated). Lower is better.

The native values are simulated. The native table is not run at 100,000 rows per page: a page this large runs past the PHP time and memory limits. The simulated values grow at the rate measured at 1,000 rows per page.

Measured on the live demo in Chromium.

Fast Tables shows 100,000 rows per page in 0.4 s with 38 MB of browser memory.

Try 100,000 rows per page in the demo →

1,000,000 rows per page

Time to first rows ↓ lower is better

Fast Tables 0.4 s, native table not run (simulated). Lower is better.

Browser memory ↓ lower is better

Fast Tables 52 MB, native table not run (simulated). Lower is better.

The native values are simulated. The native table is not run at 1,000,000 rows per page: a page this large runs past the PHP time and memory limits. The simulated values grow at the rate measured at 1,000 rows per page.

Measured on the live demo in Chromium.

Fast Tables shows 1,000,000 rows per page in 0.4 s with 52 MB of browser memory.

Try 1,000,000 rows per page in the demo →

Move fast. Don’t break things.

Filament is quick at 25 rows a page. Past a few hundred rows, the page starts to crawl. Fast Tables makes the big pages as quick as the small ones, and your table code does not change.

A client asks for “show all”

You say no, or you ship a page that takes seconds to build.

You raised the page size to 100 or more

People want to scan, not click through pages. Every extra row adds to the wait.

You upgraded to Filament 5

Normal pages got faster. The big ones are still slow.

The browser hangs when you scroll

With thousands of rows on the page, every scroll, click and filter gets heavier.

Fix the queries first. Fast Tables does not touch your queries. It fixes the part that stays slow after they are fast. In Filament issue 9304, “All” on 1,000 rows took 14 to 18 seconds on Filament 3.

Keep your table. Add ->fast().

No rewrite, no second table definition, no JavaScript grid to maintain. Your columns, filters, search, sorting and pagination stay as they are.

  1. 1 Add the InteractsWithFastTable trait to the page, and call ->fast() on the table.
  2. 2 Or register the panel plugin to turn it on for every table in the panel.

In the docs

public static function table(Table $table): Table
{
    return $table
        ->columns([...])   // your columns, unchanged
        ->filters([...])
        ->fast();          // the same table, only faster
}

The highlighted line is the change to the table. The page also gets the InteractsWithFastTable trait.

Buy a licence. Install it with Composer.

One private Composer package, from $129 for one domain, with a 14-day refund. Your columns, your theme and your tests stay as they are.

  1. 1Buy a licence. The purchase email has your Composer repository URL and credentials.
  2. 2Add the repository and credentials to your project with composer config.
  3. 3Require fasttables/fast-tables. Then add ->fast() to a table.

What you get

  • Every row on one page, at any size
  • Every column type, custom columns included
  • Every layout: Split, Stack, Panel and grid cards
  • Search, filters, sorting and actions as today
  • Live updates with poll()
  • Screen readers and keyboard, unchanged
  • Your panel theme and dark mode
  • One ->fast() per table, or on for the whole panel
  • Your existing tests keep passing

Everything you built keeps working

Your actions, columns, filters and theme behave exactly as they do today, because the table is still real HTML: Filament's own views, not a canvas grid that trades your features for speed. Fast Tables works beneath the table, in how the browser carries it, so the page does a fraction of the work for the same rows. The only thing that changes is the wait.

The part that carries the table is a compiled core, written in Rust and running in the browser.

stackedOnMobile()

Works on phones

On small screens each row stacks its cells with their labels. Touch scrolling loads more rows as you go.

custom columns

Looks like your app

Custom columns, ViewColumn, badges and your own CSS work as they do today.

Split, Stack, Panel

Every layout

Split and Stack layouts, collapsible panels and grid cards all scroll as fast as plain rows.

recordActions()

Actions still work

Record actions, action groups and bulk actions keep their policies, modals and notifications.

poll()

Live updates

Polling and Livewire refreshes work as before.

wasm

A compiled core

The work beneath the table is a small compiled core, written in Rust and served by your own app. Nothing to install, no CDN.

14-day refund

Nothing to lose

Try it on your own tables. If Fast Tables is not for you, email us within 14 days of purchase for a full refund.

Questions

Do I have to rewrite my tables?
No. Fast Tables uses your existing table() definition. Add the InteractsWithFastTable trait to the page and call ->fast() on the table, or register the panel plugin to turn it on for every table.
My table is slow at 25 rows. Will this help?
At small page sizes, slow tables are usually server-side issues: N+1 queries or missing indexes. Fast Tables is for big pages: 100 rows, 1,000 rows, 1 million rows or simply “All”.
Why not pagination, infinite scroll or a JavaScript grid?
Pagination makes people click to find a row. Infinite scroll adds rows to the page, so the page keeps growing. A JavaScript grid means a second table definition and no Filament actions. Fast Tables is not a canvas wrapper either: it renders real DOM nodes, the same HTML Filament renders, so your theme, your columns and your actions work as they do today. It keeps your existing table and just makes it fast.
Does it work with my custom columns and theme?
Yes. Filament renders your columns, including ViewColumn and custom columns, and your theme applies. The live demo shows every layout and column type.
Does it work on phones?
Yes. With Filament's stackedOnMobile(), each row stacks its cells with their labels on small screens, and touch scrolling loads more rows as you go.
What if it does not work for my tables?
Email us within 14 days of purchase for a full refund. See the refund policy. Try the live demo first: it is a real Filament panel.
Will Fast Tables help me buy a Lambo?
I don't know. But I know your tables will drive like one.

Don’t take our word for it. Scroll a million rows.

The demo is a real Filament panel. Pick 1,000,000 rows per page and scroll, then compare with the native table at 1,000.