Agent skill

Tanstack Table

by secondsky in secondsky/claude-skills

TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1.

MITAuto-check: notesBackend & APIs

Install Tanstack Table

skills CLI
$ npx skills add secondsky/claude-skills --skill tanstack-table -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install secondsky/claude-skills tanstack-table --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/secondsky/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/tanstack-table/skills/tanstack-table .claude/skills/tanstack-table && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
tanstack-table
GitHub stars
227
Token cost
~5.6k tokens
SKILL.md length
1,141 words
Files
15 (incl. references)
Skills in repo
169
Repo updated
First seen
Licence
MIT

At a glance

TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1.

  • Works in 12 steps: Production Templates (7) → Server-Side Patterns → Cloudflare Integration → …
  • Encountering state management
  • SKILL.md covers When to Use This Skill, What This Skill Provides, Quick Start and Server-Side Patterns…, plus 4 more sections
  • Calls bun

What it does

Tanstack Table is an agent skill from secondsky/claude-skills. TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1. Use for pagination, filtering, sorting, virtualization, or encountering state management, TanStack Query coordination, URL sync errors.

Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 16 other files, including reference files (for example `references/cloudflare-d1-examples.md`, `references/common-errors.md` and `references/feature-controls.md`).

It sits in Backend & APIs, covering Backend development and State management. It works with TanStack, Cloudflare Workers and Cloudflare. The repository describes itself as: Production-ready skills for Claude Code CLI - Cloudflare, React, Tailwind v4, and AI integrations. The licence is MIT.

When your agent uses it

  • Encountering state management
  • TanStack Query coordination
  • URL sync errors

Example prompts

  • “/tanstack-table”

Requirements

  • Pre-approved tools (allowed-tools): Bash, Read, Write, Edit

Workflow steps

12 steps, taken from the step headings in SKILL.md.

  1. Production Templates (7)
  2. Server-Side Patterns
  3. Cloudflare Integration
  4. Performance Optimization
  5. Feature Controls & UX
  6. Error Prevention
  7. Always Memoize Data and Columns
  8. Use Server-Side for Large Datasets
  9. Coordinate Query Keys with Table State
  10. Provide Loading States
  11. Use Column Helper for Type Safety
  12. Virtualize Large Client-Side Tables

What it can do on your machine

Read from SKILL.md and the folder at commit 8837836. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Edit

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • tanstack.com
    • github.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Tanstack Table loads about 5.6k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 61 tokens; SKILL.md has 1,141 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~61
When it runs · the whole SKILL.md, loaded when a task matches
~5.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~13k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Write, Edit

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from secondsky/claude-skills at commit 8837836, republished under its MIT licence (© secondsky). 1,141 words, ~5,642 tokens.

Download SKILL.mdSave it as .claude/skills/tanstack-table/SKILL.md (or your agent's skills folder). This skill also uses 14 other files; get the full folder from GitHub.
name
tanstack-table
description
TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1. Use for pagination, filtering, sorting, virtualization, or encountering state management, TanStack Query coordination, URL sync errors.
allowed-tools
Bash, Read, Write, Edit
license
MIT
metadata.version
1.1.0
metadata.author
Claude Skills Maintainers
metadata.last-verified
2025-12-09
metadata.production-tested
true
metadata.keywords
tanstack table, react table, data table, datagrid, headless table, server-side pagination, server-side filtering, server-side sorting, tanstack query…

TanStack Table Skill

Build production-ready, headless data tables with TanStack Table v8, optimized for server-side patterns and Cloudflare Workers integration.


When to Use This Skill

Auto-triggers when you mention:

  • "data table" or "datagrid"
  • "server-side pagination" or "server-side filtering"
  • "TanStack Table" or "React Table"
  • "table with large dataset"
  • "paginate/filter/sort with API"
  • "Cloudflare D1 table integration"
  • "virtualize table" or "large list performance"

Use this skill when:

  • Building data tables with pagination, filtering, or sorting
  • Implementing server-side table features (API-driven)
  • Integrating tables with TanStack Query for data fetching
  • Working with large datasets (1000+ rows) needing virtualization
  • Connecting tables to Cloudflare D1 databases
  • Need headless table logic without opinionated UI
  • Migrating from other table libraries to TanStack Table v8

What This Skill Provides

1. Production Templates (7)
  • Basic client-side table - Simple table with local data
  • Server-paginated table - API-driven pagination with TanStack Query
  • D1 database integration - Cloudflare D1 + Workers API + Table
  • Column configuration patterns - Type-safe column definitions
  • Controlled table state - Column visibility, pinning, ordering, fuzzy/global filtering, row selection
  • Virtualized large dataset - Performance optimization with TanStack Virtual
  • shadcn/ui styled table - Integration with Tailwind v4 + shadcn
2. Server-Side Patterns
  • Pagination with API backends
  • Filtering with query parameters
  • Sorting with database queries
  • State management (page, filters, sorting)
  • URL synchronization
  • TanStack Query coordination
3. Cloudflare Integration
  • D1 database query patterns
  • Workers API endpoints for table data
  • Pagination + filtering + sorting in SQL
  • Bindings setup (wrangler.jsonc)
  • Client-side integration patterns
4. Performance Optimization
  • Virtualization with TanStack Virtual
  • Large dataset rendering (10k+ rows)
  • Memory-efficient patterns
  • useVirtualizer() integration
5. Feature Controls & UX
  • Column visibility toggles and pinning (frozen columns)
  • Column ordering and sizing defaults
  • Global + fuzzy search and faceted filters
  • Row selection and row pinning patterns
  • Controlled state checklist to avoid perf regressions
6. Error Prevention

Documents and prevents 6+ common issues:

  1. Server-side state management confusion
  2. TanStack Query integration errors (query key coordination)
  3. Column filtering with API backends
  4. Manual sorting setup mistakes
  5. URL state synchronization issues
  6. Large dataset performance problems
  7. Over-controlling table state (columnSizingInfo) causing extra renders

Quick Start

Installation
bash
# Core table library
bun add @tanstack/react-table@latest

# Optional: For virtualization (1000+ rows)
bun add @tanstack/react-virtual@latest

# Optional: For fuzzy/global search
bun add @tanstack/match-sorter-utils@latest

Latest verified versions (as of 2025-12-09):

  • @tanstack/react-table: v8.21.3 (stable)
  • @tanstack/react-virtual: v3.13.23
  • @tanstack/match-sorter-utils: v8.21.3 (for fuzzy filtering)

React support: Works on React 16.8+ through React 19; React Compiler is not supported.

Basic Client-Side Table
typescript
import { useReactTable, getCoreRowModel, ColumnDef } from '@tanstack/react-table'
import { useMemo } from 'react'

interface User {
  id: string
  name: string
  email: string
}

const columns: ColumnDef<User>[] = [
  { accessorKey: 'id', header: 'ID' },
  { accessorKey: 'name', header: 'Name' },
  { accessorKey: 'email', header: 'Email' },
]

function UsersTable() {
  // CRITICAL: Memoize data and columns to prevent infinite re-renders
  const data = useMemo<User[]>(() => [
    { id: '1', name: 'Alice', email: 'alice@example.com' },
    { id: '2', name: 'Bob', email: 'bob@example.com' },
  ], [])

  const table = useReactTable({
    data,
    columns,
    getCoreRowModel: getCoreRowModel(), // Required
  })

  return (
    <table>
      <thead>
        {table.getHeaderGroups().map(headerGroup => (
          <tr key={headerGroup.id}>
            {headerGroup.headers.map(header => (
              <th key={header.id}>
                {header.isPlaceholder ? null : header.column.columnDef.header}
              </th>
            ))}
          </tr>
        ))}
      </thead>
      <tbody>
        {table.getRowModel().rows.map(row => (
          <tr key={row.id}>
            {row.getVisibleCells().map(cell => (
              <td key={cell.id}>
                {cell.renderValue()}
              </td>
            ))}
          </tr>
        ))}
      </tbody>
    </table>
  )
}

Pattern 1: Server-Side Pagination with TanStack Query

Cloudflare Workers API Endpoint:

typescript
// src/routes/api/users.ts
import { Env } from '../../types'

export async function onRequestGet(context: { request: Request; env: Env }) {
  const url = new URL(context.request.url)
  const page = Number(url.searchParams.get('page')) || 0
  const pageSize = Number(url.searchParams.get('pageSize')) || 20

  const offset = page * pageSize

  // Query D1 database
  const { results, meta } = await context.env.DB.prepare(`
    SELECT id, name, email, created_at
    FROM users
    ORDER BY created_at DESC
    LIMIT ? OFFSET ?
  `).bind(pageSize, offset).all()

  // Get total count for pagination
  const countResult = await context.env.DB.prepare(`
    SELECT COUNT(*) as total FROM users
  `).first<{ total: number }>()

  return Response.json({
    data: results,
    pagination: {
      page,
      pageSize,
      total: countResult?.total || 0,
      pageCount: Math.ceil((countResult?.total || 0) / pageSize),
    },
  })
}

Client-Side Table with TanStack Query:

typescript
import { useReactTable, getCoreRowModel, PaginationState } from '@tanstack/react-table'
import { useQuery } from '@tanstack/react-query'
import { useState } from 'react'

function ServerPaginatedTable() {
  const [pagination, setPagination] = useState<PaginationState>({
    pageIndex: 0,
    pageSize: 20,
  })

  // TanStack Query fetches data
  const { data, isLoading } = useQuery({
    queryKey: ['users', pagination.pageIndex, pagination.pageSize],
    queryFn: async () => {
      const response = await fetch(
        `/api/users?page=${pagination.pageIndex}&pageSize=${pagination.pageSize}`
      )
      return response.json()
    },
  })

  // TanStack Table manages display
  const table = useReactTable({
    data: data?.data ?? [],
    columns,
    getCoreRowModel: getCoreRowModel(),
    // Server-side pagination config
    manualPagination: true, // CRITICAL: Tell table pagination is manual
    pageCount: data?.pagination.pageCount ?? 0,
    state: { pagination },
    onPaginationChange: setPagination,
  })

  if (isLoading) return <div>Loading...</div>

  return (
    <div>
      <table>{/* render table */}</table>

      {/* Pagination controls */}
      <div>
        <button
          onClick={() => table.previousPage()}
          disabled={!table.getCanPreviousPage()}
        >
          Previous
        </button>
        <span>
          Page {table.getState().pagination.pageIndex + 1} of{' '}
          {table.getPageCount()}
        </span>
        <button
          onClick={() => table.nextPage()}
          disabled={!table.getCanNextPage()}
        >
          Next
        </button>
      </div>
    </div>
  )
}
Pattern 2: Server-Side Filtering

API with Filter Support:

typescript
export async function onRequestGet(context: { request: Request; env: Env }) {
  const url = new URL(context.request.url)
  const search = url.searchParams.get('search') || ''

  const { results } = await context.env.DB.prepare(`
    SELECT * FROM users
    WHERE name LIKE ? OR email LIKE ?
    LIMIT 20
  `).bind(`%${search}%`, `%${search}%`).all()

  return Response.json({ data: results })
}

Client-Side:

typescript
const [columnFilters, setColumnFilters] = useState<ColumnFiltersState>([])

const { data } = useQuery({
  queryKey: ['users', columnFilters],
  queryFn: async () => {
    const search = columnFilters.find(f => f.id === 'search')?.value || ''
    return fetch(`/api/users?search=${search}`).then(r => r.json())
  },
})

const table = useReactTable({
  data: data?.data ?? [],
  columns,
  getCoreRowModel: getCoreRowModel(),
  manualFiltering: true, // CRITICAL: Server handles filtering
  state: { columnFilters },
  onColumnFiltersChange: setColumnFilters,
})

Virtualization for Large Datasets

For 1000+ rows, use TanStack Virtual to only render visible rows:

typescript
import { useVirtualizer } from '@tanstack/react-virtual'
import { useRef } from 'react'

function VirtualizedTable() {
  const tableContainerRef = useRef<HTMLDivElement>(null)

  const table = useReactTable({
    data: largeDataset, // 10k+ rows
    columns,
    getCoreRowModel: getCoreRowModel(),
  })

  const { rows } = table.getRowModel()

  // Virtualize rows
  const rowVirtualizer = useVirtualizer({
    count: rows.length,
    getScrollElement: () => tableContainerRef.current,
    estimateSize: () => 50, // Row height in px
    overscan: 10, // Render 10 extra rows for smooth scrolling
  })

  return (
    <div ref={tableContainerRef} style={{ height: '600px', overflow: 'auto' }}>
      <table style={{ height: `${rowVirtualizer.getTotalSize()}px` }}>
        <thead>{/* header */}</thead>
        <tbody>
          {rowVirtualizer.getVirtualItems().map(virtualRow => {
            const row = rows[virtualRow.index]
            return (
              <tr
                key={row.id}
                style={{
                  position: 'absolute',
                  transform: `translateY(${virtualRow.start}px)`,
                  width: '100%',
                }}
              >
                {row.getVisibleCells().map(cell => (
                  <td key={cell.id}>{cell.renderValue()}</td>
                ))}
              </tr>
            )
          })}
        </tbody>
      </table>
    </div>
  )
}

Common Errors & Solutions

Error 1: Infinite Re-Renders

Problem: Table re-renders infinitely, browser freezes.

Cause: data or columns references change on every render.

Solution: Always use useMemo or useState:

typescript
// ❌ BAD: New array reference every render
function Table() {
  const data = [{ id: 1 }] // Creates new array!
  const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel() })
}

// ✅ GOOD: Stable reference
function Table() {
  const data = useMemo(() => [{ id: 1 }], []) // Stable
  const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel() })
}

// ✅ ALSO GOOD: Define outside component
const data = [{ id: 1 }]
function Table() {
  const table = useReactTable({ data, columns, getCoreRowModel: getCoreRowModel() })
}
Error 2: TanStack Query + Table State Mismatch

Problem: Query refetches but pagination state not in sync, causing stale data.

Solution: Include ALL table state in query key:

typescript
// ❌ BAD: Missing pagination in query key
const { data } = useQuery({
  queryKey: ['users'], // Doesn't include page!
  queryFn: () => fetch(`/api/users?page=${pagination.pageIndex}`).then(r => r.json())
})

// ✅ GOOD: Complete query key
const { data } = useQuery({
  queryKey: ['users', pagination.pageIndex, pagination.pageSize, columnFilters, sorting],
  queryFn: () => {
    const params = new URLSearchParams({
      page: pagination.pageIndex.toString(),
      pageSize: pagination.pageSize.toString(),
      // ... filters, sorting
    })
    return fetch(`/api/users?${params}`).then(r => r.json())
  }
})
Error 3: Server-Side Features Not Working

Problem: Pagination/filtering/sorting doesn't trigger API calls.

Solution: Set manual* flags to true:

typescript
const table = useReactTable({
  data,
  columns,
  getCoreRowModel: getCoreRowModel(),
  // CRITICAL: Tell table these are server-side
  manualPagination: true,
  manualFiltering: true,
  manualSorting: true,
  pageCount: serverPageCount, // Must provide total page count
})
Error 4: TypeScript "Cannot Find Module" for Column Helper

Problem: Import errors for createColumnHelper.

Solution: Import from correct path:

typescript
// ❌ BAD: Wrong path
import { createColumnHelper } from '@tanstack/table-core'

// ✅ GOOD: Correct path
import { createColumnHelper } from '@tanstack/react-table'

// Usage for type-safe columns
const columnHelper = createColumnHelper<User>()
const columns = [
  columnHelper.accessor('name', {
    header: 'Name',
    cell: info => info.getValue(), // Fully typed!
  }),
]
Error 5: Sorting Not Working with Server-Side

Problem: Clicking sort headers doesn't update data.

Solution: Include sorting in query key and API call:

typescript
const [sorting, setSorting] = useState<SortingState>([])

const { data } = useQuery({
  queryKey: ['users', pagination, sorting], // Include sorting
  queryFn: async () => {
    const sortParam = sorting[0]
      ? `&sortBy=${sorting[0].id}&sortOrder=${sorting[0].desc ? 'desc' : 'asc'}`
      : ''
    return fetch(`/api/users?page=${pagination.pageIndex}${sortParam}`).then(r => r.json())
  }
})

const table = useReactTable({
  data: data?.data ?? [],
  columns,
  getCoreRowModel: getCoreRowModel(),
  manualSorting: true,
  state: { sorting },
  onSortingChange: setSorting,
})
Error 6: Poor Performance with Large Datasets

Problem: Table slow/laggy with 1000+ rows.

Solution: Use virtualization (see example above) or implement server-side pagination.


Integration with Existing Skills

With tanstack-query Skill

TanStack Table + TanStack Query is the recommended pattern:

typescript
// Query handles data fetching + caching
const { data, isLoading } = useQuery({
  queryKey: ['users', tableState],
  queryFn: fetchUsers,
})

// Table handles display + interactions
const table = useReactTable({
  data: data?.data ?? [],
  columns,
  getCoreRowModel: getCoreRowModel(),
})
With cloudflare-d1 Skill
typescript
// Cloudflare Workers API (from cloudflare-d1 skill patterns)
export async function onRequestGet({ env }: { env: Env }) {
  const { results } = await env.DB.prepare('SELECT * FROM users LIMIT 20').all()
  return Response.json({ data: results })
}

// Client-side table consumes D1 data
const { data } = useQuery({
  queryKey: ['users'],
  queryFn: () => fetch('/api/users').then(r => r.json())
})
With tailwind-v4-shadcn Skill

Use shadcn/ui Table components with TanStack Table logic:

typescript
import { Table, TableHeader, TableBody, TableRow, TableHead, TableCell } from '@/components/ui/table'

function StyledTable() {
  const table = useReactTable({ /* config */ })

  return (
    <Table>
      <TableHeader>
        {table.getHeaderGroups().map(headerGroup => (
          <TableRow key={headerGroup.id}>
            {headerGroup.headers.map(header => (
              <TableHead key={header.id}>
                {header.column.columnDef.header}
              </TableHead>
            ))}
          </TableRow>
        ))}
      </TableHeader>
      <TableBody>
        {table.getRowModel().rows.map(row => (
          <TableRow key={row.id}>
            {row.getVisibleCells().map(cell => (
              <TableCell key={cell.id}>
                {cell.renderValue()}
              </TableCell>
            ))}
          </TableRow>
        ))}
      </TableBody>
    </Table>
  )
}

Best Practices

1. Always Memoize Data and Columns
typescript
const data = useMemo(() => [...], [dependencies])
const columns = useMemo(() => [...], [])
2. Use Server-Side for Large Datasets
  • Client-side: <1000 rows
  • Server-side: 1000+ rows or frequently changing data
3. Coordinate Query Keys with Table State
typescript
queryKey: ['resource', pagination, filters, sorting]
4. Provide Loading States
typescript
if (isLoading) return <TableSkeleton />
if (error) return <ErrorMessage error={error} />
5. Use Column Helper for Type Safety
typescript
const columnHelper = createColumnHelper<YourType>()
const columns = [
  columnHelper.accessor('field', { /* fully typed */ })
]
6. Virtualize Large Client-Side Tables
typescript
if (data.length > 1000) {
  // Use TanStack Virtual (see example above)
}
7. Control Only the State You Need
  • Keep sorting, pagination, filters, visibility, pinning, order, selection in controlled state when you must persist or sync.
  • Avoid controlling columnSizingInfo unless persisting drag state; it triggers frequent updates and can hurt performance.

Show full SKILL.md (476 more words)Show less

Templates Reference

All templates available in ~/.claude/skills/tanstack-table/templates/:

  1. package.json - Dependencies and versions
  2. basic-client-table.tsx - Simple client-side table
  3. server-paginated-table.tsx - Server-side pagination with Query
  4. d1-database-example.tsx - Cloudflare D1 integration
  5. column-configuration.tsx - Type-safe column patterns
  6. controlled-table-state.tsx - Visibility, pinning, ordering, fuzzy/global filtering, selection
  7. virtualized-large-dataset.tsx - Performance with Virtual
  8. shadcn-styled-table.tsx - Tailwind v4 + shadcn UI styling

Reference Docs

Deep-dive guides in ~/.claude/skills/tanstack-table/references/:

  1. server-side-patterns.md - Pagination, filtering, sorting with APIs
  2. query-integration.md - Coordinating with TanStack Query
  3. cloudflare-d1-examples.md - Workers + D1 complete examples
  4. performance-virtualization.md - TanStack Virtual guide
  5. common-errors.md - All 6+ documented issues with solutions
  6. feature-controls.md - Controlled state, visibility, pinning, ordering, fuzzy/global filtering, selection

When to Load References

Claude should suggest loading these reference files based on user needs:

Load references/common-errors.md when:
  • User encounters infinite re-renders or table freezing
  • Query data not syncing with pagination state changes
  • Server-side features (pagination/filtering/sorting) not triggering API calls
  • TypeScript errors with column helper imports
  • Sorting state changes not updating API calls
  • Performance problems with 1000+ rows client-side
  • Any error message mentioned in the 6 documented issues
Load references/server-side-patterns.md when:
  • User asks about implementing pagination with API backends
  • Need to build filtering with backend query parameters
  • Implementing sorting tied to database queries
  • Building Cloudflare Workers or any API endpoints for table data
  • Coordinating table state (page, filters, sort) with server calls
  • Questions about manualPagination, manualFiltering, or manualSorting flags
Load references/query-integration.md when:
  • Coordinating TanStack Table + TanStack Query together
  • Query keys and table state synchronization issues
  • Refetch patterns when pagination/filter/sort changes
  • Query key composition with table state
  • Stale data issues with server-side tables
Load references/cloudflare-d1-examples.md when:
  • Building Cloudflare Workers API endpoints for table data
  • Writing D1 database queries with pagination/filtering
  • Need complete end-to-end Cloudflare integration examples
  • SQL query patterns for table features (LIMIT/OFFSET, WHERE, ORDER BY)
  • wrangler.jsonc bindings setup for D1 + table
Load references/performance-virtualization.md when:
  • Working with 1000+ row datasets client-side
  • TanStack Virtual integration questions
  • Memory-efficient rendering patterns
  • useVirtualizer() hook usage
  • Large table performance optimization
  • Questions about row virtualization or scroll performance
Load references/feature-controls.md when:
  • Need column visibility, pinning, or ordering controls
  • Building toolbars (global search, toggles) or syncing state to URL/localStorage
  • Implementing fuzzy/global search or faceted filters
  • Setting up row selection/pinning or controlled pagination/sorting

Token Efficiency

Without this skill:

  • ~8,000 tokens: Research v8 changes, server-side patterns, Query integration
  • 3-4 common errors encountered
  • 30-45 minutes total time

With this skill:

  • ~3,500 tokens: Direct templates, error prevention
  • 0 errors (all documented issues prevented)
  • 10-15 minutes total time

Savings: ~55-65% tokens, ~70% time


Production Validation

Tested with:

  • React 19.2
  • Vite 7.3
  • TypeScript 5.9
  • Cloudflare Workers (Wrangler 4.0)
  • TanStack Query v5.101.4 (tanstack-query skill)
  • Tailwind v4 + shadcn/ui (tailwind-v4-shadcn skill)

Stack compatibility:

  • ✅ Cloudflare Workers + Static Assets
  • ✅ Cloudflare D1 database
  • ✅ TanStack Query integration
  • ✅ React 19.2+ server components
  • ✅ TypeScript strict mode
  • ✅ Vite 7.3+ build optimization

Further Reading


Last Updated: 2025-12-09 Skill Version: 1.1.0 Library Version: @tanstack/react-table v8.21.3

© secondsky, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 14 other files (references) in plugins/tanstack-table/skills/tanstack-table of secondsky/claude-skills.

  • SKILL.md
  • references/cloudflare-d1-examples.md
  • references/common-errors.md
  • references/feature-controls.md
  • references/performance-virtualization.md
  • references/query-integration.md
  • references/server-side-patterns.md
  • templates/basic-client-table.tsx
  • templates/column-configuration.tsx
  • templates/controlled-table-state.tsx
  • templates/d1-database-example.tsx
  • templates/package.json
  • templates/server-paginated-table.tsx
  • templates/shadcn-styled-table.tsx
  • templates/virtualized-large-dataset.tsx

Open the folder on GitHubat commit 8837836

Compare with similar skills

Tanstack Table next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Tanstack Table compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Tanstack Table this skillsecondsky/claude-skills227—~5.6kAutomated safety check: NotesMIT
Agents SDKhodgef/apiker1273 repos~3kAutomated safety check: PassMIT
Building AI Agent On Cloudflaremajiayu000/claude-skill-registry6661 repos~2.3kAutomated safety check: PassMIT
Workers Best Practiceshodgef/apiker1276 repos~1.8kAutomated safety check: PassMIT
Tanstack Query Best PracticesDeckardGer/tanstack-agent-skills2221 repos~1.2kAutomated safety check: PassMIT
Olore Tanstack Query 4olorehq/olore103—~583Automated safety check: PassMIT

Similar skills

  • Agents SDK

    hodgef/apiker

    Build AI agents on Cloudflare Workers using the Agents SDK. An agent skill from hodgef/apiker.

    127 GitHub starsUsed in 3 repos~3k tokens
    Backend & APIsAuto-check passed
  • Building AI Agent On Cloudflare

    majiayu000/claude-skill-registry

    Builds AI agents on Cloudflare using the Agents SDK with state management, real-time WebSockets, scheduled tasks, tool integration, and chat capabilities.

    666 GitHub starsUsed in 1 repo~2.3k tokens
    Backend & APIsAuto-check passed
  • Reviews and authors Cloudflare Workers code against production best practices.

    127 GitHub starsUsed in 6 repos~1.8k tokens
    DevOps & CloudAuto-check passed
  • Tanstack Query Best Practices

    DeckardGer/tanstack-agent-skills

    TanStack Query (React Query) best practices for data fetching, caching, mutations, and server state management.

    222 GitHub starsUsed in 1 repo~1.2k tokens
    Backend & APIsAuto-check passed
  • Local TanStack Query documentation reference (v4). An agent skill from olorehq/olore.

    103 GitHub stars~583 tokensUpdated today
    Backend & APIsAuto-check passed
  • Turnstile Spin

    cloudflare/skills

    Official

    Set up, repair, or migrate to Cloudflare Turnstile bot verification in an existing frontend and backend, including server-side Siteverify.

    3k GitHub starsUsed in 4 repos~7.2k tokens
    Frontend & DesignAuto-check: notes

More from secondsky/claude-skills

All 169 skills in this repo
  • Tanstack AI

    secondsky/claude-skills

    TanStack AI (alpha) provider-agnostic type-safe chat with streaming for OpenAI, Anthropic, Gemini, Ollama.

    227 GitHub starsUsed in 1 repo~3.6k tokens
    Auto-check: notes
  • Auto Animate

    secondsky/claude-skills

    AutoAnimate (@formkit/auto-animate) zero-config animations for React.

    227 GitHub stars~2.9k tokensUpdated 9 days ago
    Auto-check passed
  • Base UI React

    secondsky/claude-skills

    MUI Base UI unstyled React components with Floating UI. An agent skill from secondsky/claude-skills.

    227 GitHub stars~1.9k tokensUpdated 9 days ago
    Auto-check passed
  • Cloudflare Images

    secondsky/claude-skills

    This skill should be used when the user asks to "upload images to Cloudflare", "implement direct creator upload", "configure image transformations", "optimize WebP/AVIF", "create image variants"…

    227 GitHub stars~3.6k tokensUpdated 9 days ago
    Auto-check: notes
  • Cloudflare Nextjs

    secondsky/claude-skills

    Deploy Next.js to Cloudflare Workers via the OpenNext adapter (@opennextjs/cloudflare).

    227 GitHub stars~5.3k tokensUpdated 9 days ago
    Auto-check: notes
  • Cloudflare Sandbox

    secondsky/claude-skills

    Cloudflare Sandboxes SDK for secure code execution in Linux containers at edge.

    227 GitHub stars~4.5k tokensUpdated 9 days ago
    Auto-check passed

Questions about Tanstack Table

What does Tanstack Table do?

TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1. Tanstack Table is an agent skill from secondsky/claude-skills. TanStack Table v8 headless data tables with server-side features for Cloudflare Workers + D1.

When should I use Tanstack Table?

Tanstack Table fits situations like: encountering state management; tanStack Query coordination; URL sync errors.

How do I install Tanstack Table in Claude Code?

Run `npx skills add secondsky/claude-skills --skill tanstack-table -a claude-code`. Or copy the skill folder (plugins/tanstack-table/skills/tanstack-table in secondsky/claude-skills) into .claude/skills/tanstack-table in your project. Claude Code loads it when a task matches its description.

How do I install Tanstack Table in Codex?

Run `npx skills add secondsky/claude-skills --skill tanstack-table -a codex`. Or copy the skill folder (plugins/tanstack-table/skills/tanstack-table in secondsky/claude-skills) into .agents/skills/tanstack-table in your project. Codex loads it when a task matches its description.

Can I use Tanstack Table in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add secondsky/claude-skills --skill tanstack-table -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tanstack-table, .gemini/skills/tanstack-table, .github/skills/tanstack-table and .opencode/skills/tanstack-table in your project.

What does Tanstack Table need to run?

Going by SKILL.md and its folder, Tanstack Table needs the command-line tools its instructions call (bun). Its frontmatter pre-approves these tools: Bash, Read, Write, Edit.

Does Tanstack Table access the network?

SKILL.md names 2 domains. As links in the text: tanstack.com and github.com. This is read from the text; nothing was executed.

Is Tanstack Table safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Tanstack Table use?

Tanstack Table is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Tanstack Table use?

About 5.6k tokens (SKILL.md is roughly 23k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.3k tokens, read only when the agent opens those files.

What are the alternatives to Tanstack Table?

Skills that share tags, products or a category with Tanstack Table: Agents SDK (hodgef/apiker, 127 stars), Building AI Agent On Cloudflare (majiayu000/claude-skill-registry, 666 stars), Workers Best Practices (hodgef/apiker, 127 stars) and Tanstack Query Best Practices (DeckardGer/tanstack-agent-skills, 222 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Tanstack Table?

secondsky (a GitHub user) maintains it in secondsky/claude-skills, which has 227 GitHub stars. The repository holds 169 skills in this directory. The repository was last updated on September 28, 2026.

Source: secondsky/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.