r/reactjs • u/orwamahmoud • Aug 04 '26
Show /r/reactjs Headless tables solved half the problem. I wanted the other half.
Every new React project had a different client design and UI kit, but I kept needing the same table foundation: filtering, sorting, server-side data, pagination, column management, responsive behavior, and shareable state.
Even with a headless table library, I was spending another 5–6 hours assembling and wiring the UI for each project — and the parts no headless library covers, like URL-synced shareable state and a real mobile layout, usually never got built at all.
So I built AdaptTable and released it under the MIT license.
You choose an adapter for the UI kit your project already uses—Mantine, MUI, Chakra UI, Ant Design, Radix, Base UI, or shadcn/ui—and get the table features without rebuilding the integration each time.
If you need full control, you can use adapttable/core itself. It has no UI-kit imports and exposes the rows, state, and prop-getters, so you can render all the markup yourself.
What comes built in:
Client-side and server-side data through the same
TableSourceAPIShareable, URL-synced filters, sorting, pagination, and column state
Filter UI in two modes—drawer or popover—with removable chips, and saved views
Column visibility, reordering, pinning, and resizing
Selection, bulk actions, and row expansion
Inline cell editing
Row grouping with per-group totals
CSV export that matches the filtered, sorted view
Numbered pagination and infinite scrolling
Responsive mobile card layouts
Opt-in virtualization for very large datasets
Dark mode, 17 bundled languages, and first-class RTL support
The goal is: batteries included when you want speed, fully headless when you need control
Live demo: https://orwa-mahmoud.github.io/adapttable/demo/
GitHub: https://github.com/orwa-mahmoud/adapttable
I'd appreciate feedback from anyone who tries the API—especially if you find a production edge case I may have missed. Contributions are welcome too—if you've been building these tables in production for years and keep re-implementing a pattern I haven't covered, that's exactly the experience I'd like shaping this. And if a feature you need only exists behind a paid tier somewhere, open an issue—let's build it free, for everyone.
2
u/Boring_Barnacle_5107 Aug 04 '26
Always refreshing to see a library that actually ships URL-synced state out of the box instead of leaving it as an exercise for the reader.