React Data Grid
The data table your framework should have shipped with.
| Name | Role | Plan | |
|---|---|---|---|
| Ada Lovelace | ada@analytical.dev | Admin | Team |
| Grace Hopper | grace@navy.mil | Member | Pro |
| Linus T. | linus@kernel.org | Admin | Team |
| Margaret H. | margaret@nasa.gov | Member | Pro |
| Donald K. | donald@cs.stanford | Member | Free |
100k+
Rows at 60fps
10 min
Time to first grid
3
Export formats
What you can build with it
Real scenarios where this pays for itself.
Admin user management
List, search, filter, edit, bulk-delete, export — every admin action, in one grid, no glue code.
Customer-facing dashboards
Show the user their own data — transactions, projects, tickets — with inline edits and instant save.
Internal ops & finance
100k+ row datasets with server-side pagination, sort, and filter. Export to Excel for the CFO.
Data explorers
Type-safe column definitions, custom cell renderers, column groups. Build a Notion-grade data UI.
Built for
If any of these are you, this is for you.
What's under the hood
Three things that earn their place in your stack.
100k rows, no jank
Row virtualization is on by default. Scroll a 100k-row table on a mid-range laptop and watch the frame rate hold.
Click to edit anything
Cells are editable out of the box. Hook `onRowEdit` to your server and you've got a CRUD UI in five minutes.
Export built in
CSV, Excel, PDF — all one click, all respecting the current sort & filter. The reports your PM keeps asking for are already there.
Quick start
Install and ship in under a minute.
What's in the box
- DataGrid componentthe main grid
- useDataGrid hookfor custom UIs
- Type-safe Column APIfull TypeScript inference
- CSV / Excel / PDF exportrespects sort + filter
- Inline edit handlerscell + row level
- Server-side data adapterTanStack Query, SWR, or fetch
- Column groups & pinningleft/right, resizable
- Full source + docsno obfuscation
Full feature list
What makes this a real product, not a weekend hack.
Works with
Tested against the React stack you already use.
Full documentation
Everything in the package, every prop, every pattern.
React Data Grid
A polished, performant data table with inline editing, sorting, filtering, selection, and export.
Quick Start
npm install react-data-grid @tanstack/react-table
Usage
Basic table
import { DataGrid } from 'react-data-grid'
const columns = [
{ id: 'name', header: 'Name', accessorKey: 'name' },
{ id: 'email', header: 'Email', accessorKey: 'email' },
{ id: 'age', header: 'Age', accessorKey: 'age' },
]
const data = [
{ name: 'Alice', email: 'alice@example.com', age: 30 },
{ name: 'Bob', email: 'bob@example.com', age: 25 },
]
function App() {
return <DataGrid columns={columns} data={data} />
}
With all features
<DataGrid
columns={columns}
data={largeDataset}
pageSize={50}
sorting={true}
filtering={true}
selection="multi"
inlineEditing={true}
exportable={true}
striped={true}
darkMode={false}
onRowClick={(row) => console.log('Clicked:', row)}
/>
Inline editing
Double-click any cell to edit. Supports text, number, and select editors.
const columns = [
{
id: 'name',
header: 'Name',
accessorKey: 'name',
enableEditing: true,
},
{
id: 'status',
header: 'Status',
accessorKey: 'status',
enableEditing: true,
cellEditor: ({ value, onSave, onCancel }) => (
<select
value={String(value)}
onChange={(e) => onSave(e.target.value)}
onBlur={(e) => onSave(e.target.value)}
autoFocus
>
<option value="active">Active</option>
<option value="inactive">Inactive</option>
<option value="pending">Pending</option>
</select>
),
},
]
Export
import { exportToCSV, exportToExcel } from 'react-data-grid'
// Via toolbar buttons
<DataGrid columns={cols} data={data} exportable={true} />
// Or programmatically
exportToCSV(data, columns, 'my-export.csv')
exportToExcel(data, columns, 'my-export.xls')
API
DataGrid
| Prop | Type | Default | Description |
|---|---|---|---|
| columns | ColumnDef<T>[] | required | Column definitions |
| data | T[] | required | Row data |
| pageSize | number | 20 | Rows per page |
| pagination | boolean | true | Show pagination |
| sorting | boolean | true | Enable column sorting |
| filtering | boolean | false | Enable column filters |
| selection | boolean | 'multi' | false | Enable row selection |
| inlineEditing | boolean | false | Enable inline cell editing |
| exportable | boolean | false | Show CSV/Excel export buttons |
| striped | boolean | true | Alternating row colors |
| darkMode | boolean | false | Dark theme |
| loading | boolean | false | Show loading state |
| emptyText | string | 'No data' | Empty state message |
| maxHeight | string | number | — | Max table body height |
| hideHeader | boolean | false | Hide column headers |
| onRowClick | (row) => void | — | Row click handler |
| onDataChange | (rows) => void | — | Data mutation handler |
| onSelectionChange | (ids) => void | — | Selection change handler |
ColumnDef
| Prop | Type | Default | Description |
|---|---|---|---|
| id | string | required | Unique column ID |
| header | string | required | Column header text |
| accessorKey | keyof T | — | Data accessor |
| accessorFn | (row) => unknown | — | Custom accessor |
| cell | (props) => ReactNode | — | Custom cell renderer |
| enableSorting | boolean | true | Sortable |
| enableFiltering | boolean | true | Filterable |
| enableEditing | boolean | false | Inline editable |
| width | number | string | — | Column width |
| cellEditor | (props) => ReactNode | — | Custom edit component |
| pinned | 'left' | 'right' | — | Sticky column |
| visible | boolean | true | Show/hide column |
Common questions
Things people ask before buying.
Does it work without TanStack Table?
No — TanStack Table is a peer dep. It's the best headless table library for React and it's tiny. We do the UI heavy-lifting on top of it.
Can I bring my own server-side data fetching?
Yes. Pass a `fetcher` prop and the grid handles pagination, sort, and filter params for you. Bring TanStack Query, SWR, or fetch — your call.
Does it support column groups and pinned columns?
Yes — `columnGroups`, `pinned: 'left' | 'right'`, and resizable handles are all first-class. The API matches the conventions of spreadsheet tools.
What about Excel-style formulas?
No. This is a data grid, not a spreadsheet. If you need formula evaluation, use a dedicated library alongside.
£15 — lifetime
One purchase. Yours forever.
Pay once via Stripe. Get the complete package instantly. Free updates for the same major version. Commercial license included.
Secure payment via Stripe · Instant download · 30-day money-back if it doesn't save you time