← Back to blog
5 min read #war-story #filament #pivot-table #laravel

From abandonware fork to native plugin: why we built our own Filament pivot table

Four generations of pivot tables in one client project: a commercial trial, a JavaScript library abandoned in 2015, a 72 MB fork we patched by hand — and the Filament-native plugin that finally let us delete all of it.

By PtPlugins team

In February 2026 we deleted a 929-line PHP class, 268 KB of JavaScript built on React 0.12.2, and a 72 MB forked repository from a client project — and the dashboard got better. This is the story of how Filament Pivot Table came to exist, told through the three attempts that failed before it.

The requirement

The project is a CRM we maintain for a client in the pharma industry, built on Laravel and Filament 3. Management wanted one thing every CRM eventually wants: a pivot dashboard. Marketing event costs, sliced by category and month, with quarter columns, sortable, exportable to Excel, and filterable by the same permission rules as the rest of the app.

Filament has fantastic tables. It does not have a pivot table. So we went shopping.

Attempt 1: DHTMLX Pivot (December 10, 2025)

DHTMLX Pivot is a polished commercial widget, and the docs we pulled into the project that day looked promising. Then reality: it's a paid license with a 30-day trial, it's a framework-agnostic JavaScript component that knows nothing about Filament, and we'd be embedding an Angular/React-style component lifecycle inside a Livewire page just to render one dashboard.

Paying for a license is fine. Paying for a license and writing all the integration glue and maintaining a foreign component model inside Filament — that math didn't work. It lasted one day in the repo.

Attempt 2: Orb.js (December 11, 2025)

Orb.js is an MIT-licensed pivot grid, and the demo looked exactly like what we needed. We had it rendering real data the next day.

The catch revealed itself in the bundle: Orb.js was last meaningfully maintained around 2015. It ships with React 0.12.2 and Bootstrap 3.3.1 baked in. We were loading a decade-old React runtime into a Tailwind/Livewire/Alpine app to render a table.

We told ourselves what every team tells itself: it's just one dashboard, it works, ship it.

Attempt 3: fork Orb.js and patch it (December 12, 2025 — January 2026)

"It works" lasted about a day, because the client had requests. The field pickers should sit above the table. There should be a toggle to hide the configuration UI so the table stays clean. The UI needed to be translated — which, in an unmaintained library with no i18n layer, meant forking the source and editing strings.

So we forked it. Locally. All ~72 MB of it, sitting next to the application repo. Over the next weeks the commit log became a museum of the kind of work nobody should be doing in 2026:

  • Translate the hardcoded UI strings by patching the fork.
  • Wrap category labels in a custom span so long names break into two rows.
  • Fix the widths of inner-table-container and inner-table, which Orb computed separately and which drifted apart.
  • Then fix the cell heights, which also needed manual sync.
  • Fill empty months with zeros, because the grid skipped them and quarters misaligned.
  • Disable Orb's custom horizontal scrollbar, which fought the browser's.

Each fix was a patch against legacy library internals, carried in a private fork, loaded through a Blade view that initialized React 0.12.2 by hand. Holding it all together on the PHP side was a BaseDashboardPivot class that had grown to 929 lines of data fetching, tab management, and Orb-shaped JSON serialization.

None of this was the client's fault. None of it was even Orb's fault — it was a fine library, ten years ago. The fault was architectural: we were rendering server-side data with a dead client-side stack, inside a framework that wanted to render it server-side all along.

Attempt 4: build the thing Filament was missing (January 27, 2026)

So we built Filament Pivot Table: a pivot component that renders in Blade with Tailwind, aggregates in SQL on the server, and behaves like a native Filament page — same theming, same dark mode, same permission gates, no JavaScript bundle, no React, no fork.

The migration commit is almost anticlimactic. One new ListMktEventsPivot page with the SQL aggregation, one navigation item, done. Two weeks later we wrote the removal plan for Orb; by February 10 the fork, the public assets, the static HTML snapshots, and the 929-line base class were gone. The shared pieces that survived — saved filters, the config file — were the parts that had nothing to do with rendering.

What production did to the plugin since

This is the part we didn't predict: the client project became the plugin's toughest QA environment. Almost every release since traces back to a real dashboard need from real usage:

  • CSV/Excel export visibility fixes (v3.0.1, v3.3.0) — found because finance actually exports, every week.
  • Saved filters — analysts kept rebuilding the same view, so views became saveable.
  • Drill-down — every aggregate number eventually gets asked "okay, but which records?"
  • Trend view with quarter depth — the quarter columns from the original Orb wishlist, done properly.
  • Permission-gated dashboards — pivot pages respect the same access rules as every other Filament page, because in this app they have to.

That feedback loop is the whole reason the plugin holds up in production: it grew inside one.

The scoreboard

Before (Orb.js fork) After (Filament Pivot Table)
Client-side runtime React 0.12.2 + Bootstrap 3.3.1, 268 KB none — Blade + Tailwind
Integration code 929-line base class one Filament page
Maintenance surface private 72 MB fork composer package
i18n edit the fork's source strings translation files
Theming / dark mode fought Bootstrap 3 inherits Filament theme

If you have a Filament app and someone just asked you for "a pivot dashboard, like Excel" — you can try the result of this whole saga in the live demo, no signup needed. The Pro version with drill-down, trends, and export is on ptplugins.com.

And if you're currently maintaining a fork of an abandoned JavaScript library to render one dashboard: we've been there. It doesn't get better. Delete it.

Try PtPlugins

Premium Filament plugins, built for production.

Pivot tables, model merging, deduplication, and more — with live demos you can try right now.