TanStack Table provides framework-specific devtools adapters that plug into the TanStack Devtools multi-panel UI.
The table devtools let you inspect registered table instances, switch between multiple tables, and inspect features, state, options, rows, and columns in real time.
By default, the framework adapters only include the live devtools in development mode. In production builds they export no-op implementations unless you opt into the /production entrypoints.
Install the TanStack Devtools host package and the Table adapter for your framework.
While TanStack Table v9 is in beta, the table devtools adapters must be installed with the @beta tag. Installing without the tag resolves to the old v8 devtools, which have a completely different API.
npm install @tanstack/react-devtools @tanstack/react-table-devtools@betanpm install @tanstack/react-devtools @tanstack/react-table-devtools@betaLit, Svelte, and vanilla do not currently ship dedicated table devtools adapters.
The devtools identify each table by the key table option. Registration requires it: if you register a table without a key, the devtools log an error (Missing table key. Add a 'key' option to your table to use devtools.) and skip the table entirely.
const table = useTable({
key: 'users-table', // needed for devtools, omit if you don't want to use the devtools
features,
rowModels: {},
columns,
data,
})const table = useTable({
key: 'users-table', // needed for devtools, omit if you don't want to use the devtools
features,
rowModels: {},
columns,
data,
})The key is also the label shown in the devtools panel selector, so give each table a unique, descriptive key.
The recommended setup has three parts:
If you register multiple tables, the Table panel shows a selector so you can switch between them.
import React from 'react'
import ReactDOM from 'react-dom/client'
import { useTable } from '@tanstack/react-table'
import { TanStackDevtools } from '@tanstack/react-devtools'
import {
tableDevtoolsPlugin,
useTanStackTableDevtools,
} from '@tanstack/react-table-devtools'
function App() {
const table = useTable({
key: 'users-table', // needed for devtools
// ...
})
useTanStackTableDevtools(table)
return <AppContent table={table} />
}
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
<TanStackDevtools plugins={[tableDevtoolsPlugin()]} />
</React.StrictMode>,
)import React from 'react'
import ReactDOM from 'react-dom/client'
import { useTable } from '@tanstack/react-table'
import { TanStackDevtools } from '@tanstack/react-devtools'
import {
tableDevtoolsPlugin,
useTanStackTableDevtools,
} from '@tanstack/react-table-devtools'
function App() {
const table = useTable({
key: 'users-table', // needed for devtools
// ...
})
useTanStackTableDevtools(table)
return <AppContent table={table} />
}
ReactDOM.createRoot(document.getElementById('root')!).render(
<React.StrictMode>
<App />
<TanStackDevtools plugins={[tableDevtoolsPlugin()]} />
</React.StrictMode>,
)See the React row-selection example.
Each registration function accepts an enabled option if you want to conditionally register a table:
useTanStackTableDevtools(table, { enabled: false })useTanStackTableDevtools(table, { enabled: false })If you need the live devtools in production, import from the /production entrypoint for your framework package:
import {
tableDevtoolsPlugin,
useTanStackTableDevtools,
} from '@tanstack/react-table-devtools/production'import {
tableDevtoolsPlugin,
useTanStackTableDevtools,
} from '@tanstack/react-table-devtools/production'