Type-safe, database-agnostic React table library with automatic relationship filtering, zero boilerplate, and end-to-end type safety.
Better Tables is the React table library you wished existed. Define your columns once, and get powerful filtering, sorting, pagination, and virtualizationβall with end-to-end type safety across your database queries and UI components.
- π Automatic Relationship Filtering - Filter across joined tables without writing JOIN queries
- π― Type-Safe End-to-End - Full TypeScript support from database to UI
- ποΈ Zero Boilerplate - Declarative column definitions with fluent API
- π Advanced Filtering - 6 filter types with 20+ operators
- β‘ Virtual Scrolling - Handle millions of rows efficiently
- π URL State Persistence - Shareable, bookmarkable filtered views
- ποΈ Database Adapters - Works with Drizzle ORM, REST APIs, and more
| Package | Description |
|---|---|
| @better-tables/core | Core functionality, builders, and managers |
| @better-tables/ui | React components built with shadcn/ui |
| @better-tables/adapters-drizzle | Drizzle ORM integration with automatic relationship detection |
| @better-tables/adapters-memory | In-memory adapter for testing |
π better-tables - The main monorepo containing all packages, documentation, and examples.
- π Getting Started Guide
- π Documentation
- π¨ Demo App
- π¬ Discussions
- π Report a Bug
- π‘ Request a Feature
# Install core package
npm install @better-tables/core
# Install an adapter
npm install @better-tables/adapters-drizzleimport { createColumnBuilder } from '@better-tables/core';
import { BetterTable } from '@better-tables/ui';
const cb = createColumnBuilder<User>();
const columns = [
cb.text().id('name').displayName('Name').accessor(u => u.name).build(),
cb.text().id('email').displayName('Email').accessor(u => u.email).build(),
];
<BetterTable columns={columns} data={users} features={{ filtering: true }} />We welcome contributions! Whether you're fixing bugs, adding features, or improving documentation, every contribution makes Better Tables better.
- π Contributing Guide
- π Report Issues
- π¬ Join Discussions
- π Open a Pull Request
- π REST adapter implementation
- π Documentation improvements
- π¨ More examples and use cases
- β‘ Performance optimizations
- βΏ Accessibility improvements
If you find Better Tables useful, please consider giving us a β on GitHub!
Better Tables is open source and available under the MIT License.
Built with β€οΈ by the Better Tables Team
Website β’ Documentation β’ Discussions β’ Issues