# Devtools

Register TanStack Table targets and inspect options, state, features, columns, rows...

- Repository: https://github.com/TanStack/table (28539 stars)
- Category: Engineering
- License: MIT
- Last updated: 2026-10-21
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add TanStack/table --skill devtools -g -a claude-code -y`
Codex: `npx skills add TanStack/table --skill devtools -g -a codex -y`
Cursor: `npx skills add TanStack/table --skill devtools -g -a cursor -y`
Gemini CLI: `npx skills add TanStack/table --skill devtools -g -a gemini-cli -y`

## Description

Register TanStack Table targets and inspect options, state, features, columns, rows, and row models with @tanstack/table-devtools. Load for missing connections, required unique table options.key, target replacement/cleanup, or an explicit request for production Devtools entrypoints.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

## Setup

Framework adapters should use their lifecycle hook or injector. The framework-neutral registration primitive is:

```ts
import { constructTable, tableFeatures } from '@tanstack/table-core'
import { storeReactivityBindings } from '@tanstack/table-core/store-reactivity-bindings'
import { upsertTableDevtoolsTarget } from '@tanstack/table-devtools'

const features = tableFeatures({
  coreReactivityFeature: storeReactivityBindings(),
})

const table = constructTable({
  key: 'users-table',
  features,
  columns: [],
  data: [],
})

const cleanup = upsertTableDevtoolsTarget({ table })
cleanup()
```

## Core Patterns

### Give every live table a descriptive unique key

The non-empty `options.key` is both registry identity and panel label. Use stable application identity, not an array index.

### Let adapter lifecycles own registration

React/Preact/Solid/Vue hooks and the Angular injector register and clean up at the correct time. Use core target functions only for unsupported frameworks or infrastructure code.

### Keep ordinary Devtools development-only

Default entrypoints export no-op panels/plugins outside development. Use `/production` only when the application explicitly chooses production inspection and its security/bundle implications.

## Common Mistakes

### HIGH Missing key skips registration

Wrong: register a table whose `options.key` is absent or whitespace.

Correct: set a stable value such as `key: 'billing-invoices'` before registration.

The registry logs the missing-key error and returns without adding a target.

Source: TanStack/table:packages/table-devtools/src/tableTarget.ts

### HIGH Two tables share one key

Wrong: use `key: 'table'` for simultaneous tables.

Correct: use unique domain identities such as `users-table` and `orders-table`.

Upserting a different table under an existing key replaces that registration.

Source: TanStack/table:packages/table-devtools/src/tableTarget.ts

### MEDIUM Production panel expected by default

The rest: https://github.com/TanStack/table/blob/HEAD/packages/table-devtools/skills/devtools/SKILL.md
