skills/tanstack/SKILL.md
Reference catalogue of every TanStack library with verified status (2026-05-01) and adopt-today / wait / skip verdicts for the user's stack. Load when the user mentions TanStack Query, TanStack Table, TanStack Form, TanStack Router, TanStack Start, TanStack Virtual, TanStack DB, TanStack AI, TanStack Pacer, TanStack Intent, TanStack CLI, TanStack Hotkeys, TanStack Store, TanStack Devtools, asks "what TanStack library for X", "is TanStack X stable", "TanStack catalogue", "TanStack ecosystem", or considers adopting any individual TanStack library. Reference skill, not an action skill. Different from /ro:new-tanstack-app (which scaffolds a TanStack Start app); this is the umbrella catalogue.
npx skillsauth add RonanCodes/ronan-skills tanstackInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Verified at 2026-05-01 from vaults/llm-wiki-research/wiki/concepts/tanstack-libraries.md and tanstack-scaffolder-integrations.md. Source of truth for any "should I adopt TanStack X" question. Lift verdicts from here rather than guessing from training data; TanStack ships in alpha and beta openly and statuses move.
| Library | What it is | Status (2026-05-01) | Verdict | |---|---|---|---| | Start | Type-safe full-stack meta-framework, file routes + server fns | RC | In canon, default | | Router | Type-safe file-based routing, search-param schemas | Stable | In canon (under Start) | | Query | Server-state cache, framework agnostic | Stable | In canon, default for server state | | Form | Headless type-safe form state, no schema-coupling | Stable (newly graduated) | Use today for any non-trivial form | | Table | Headless data-grid primitives | Stable | In canon for app-internal tables | | Virtual | Windowing for huge lists / grids | Stable | Use today for any list past 1K rows | | Store | Tiny framework-agnostic reactive store | Alpha (mature; powers Form + Router) | Use today for global state | | DB | Reactive client-store layered over your existing API | Beta | Worth investigating (sits between Drizzle and Convex) | | AI | Vercel-AI-SDK competitor, multi-provider | Alpha | Wait (Vercel AI SDK is more mature today) | | Pacer | Debounce / throttle / rate-limit / queue / batch | Beta | Use today for any rate-limited UI | | Hotkeys | Type-safe shortcuts + sequences + recording | Alpha | Wait for beta unless you need recording | | Intent | Ship Agent Skills (procedural knowledge) with npm packages | Alpha | Frontier (paradigm-shift potential for skill distribution) | | CLI | Scaffolder + MCP server for TanStack docs | Alpha | Use today for new TanStack apps | | Devtools | Standalone debugging surface across Query / Router / Store | Alpha | Use in dev as adopted libraries mature |
/ro:new-tanstack-app.g d for go-to-dashboard) or user-rebindable keys./ro:nango could one day live inside @nangohq/node itself, this is why.pnpm dlx create-tsrouter-app for greenfield. The MCP-server-for-docs angle is the watch-this part.| Library | Most-people alternative | When the alternative wins | |---|---|---| | Query | SWR | Smaller bundle, simpler API, fine for trivial fetches | | Table | AG Grid | Pivoting, master-detail, server-side row models, integrated charts (and you do not want to build them) | | Form | react-hook-form | More mature, more StackOverflow answers, larger community | | Virtual | react-window | Smaller surface, you only need basic windowing | | Store | Zustand | Simpler API, larger community, you do not need framework-agnostic | | Router | React Router | Industry default, the team already knows it | | DB | Convex (full backend), Drizzle (server ORM) | Convex when you want a full reactive backend; Drizzle when you only need server-side SQL. DB sits in between as a client-only sync layer | | AI | Vercel AI SDK | Today, almost always; AI is alpha | | Pacer | lodash.throttle, p-throttle | Trivial cases where you want one function, not a library | | Hotkeys | react-hotkeys-hook, tinykeys | Stable, well-documented; you do not need recording |
Store is the foundation; Form and Router depend on it internally. Start sits on Router and bundles server functions. Query is the primary data primitive most apps reach for first; DB is an optional reactive layer one level up that wraps Query collections with optimistic mutations. Form, Table, Virtual are headless primitives composed into UI. Hotkeys and Pacer are cross-cutting UX helpers. CLI, Devtools, Intent, AI are the tooling layer; Intent and AI are still settling.
flowchart TB
APP([Your app]):::source
subgraph META[Meta-framework]
ST[Start]:::engine
RT[Router]:::engine
end
subgraph DATA[Data]
QY[Query]:::engine
DB[DB]:::engine
end
subgraph PRIM[Headless primitives]
FM[Form]:::engine
TB[Table]:::engine
VR[Virtual]:::engine
end
subgraph FOUND[Foundation]
SR[Store]:::output
end
subgraph UX[UX helpers]
HK[Hotkeys]:::engine
PC[Pacer]:::engine
end
APP --> ST
ST --> RT
ST --> QY
RT --> SR
FM --> SR
QY -.->|optional| DB
TB --> VR
classDef source fill:#e0af40,stroke:#c09030,color:#000
classDef engine fill:#5bbcd6,stroke:#4090b0,color:#000
classDef output fill:#7dcea0,stroke:#5da080,color:#000
g d) or user-rebinding.TanStack is not always the right call. Pick on merit per library, not on brand affinity.
Beta. Debounce, throttle, rate-limit, queue, batch with sync and async variants, type-safe, framework-agnostic, reactive React adapters. Sounds trivial; writing a correct async-debounce is harder than people think. Drop into any rate-limited UI: search-as-you-type, autosave, scroll-driven loads. Today is the right time.
Beta. Reactive client-side store layered over your existing API. Collections, live queries, optimistic mutations. Sits between Drizzle (server SQL) and Convex (full backend). Lets you keep D1 + Drizzle on the server and add optimistic-mutation feel on the client without paying the Convex lock-in tax. Worth a real test on the next greenfield app where the UX wants to feel real-time but the backend stays normal HTTP.
Alpha. Library maintainers ship Agent Skills inside npm packages, version-aligned, auto-discovered when you pnpm add the package. Same shape as our /ro:* skills, but distributed via npm. Paradigm-shift potential: /ro:nango could one day live inside @nangohq/node itself, maintained by Nango. Subscribe to TanStack newsletter and watch for first non-TanStack libraries shipping Intent skills.
/ro:new-tanstack-app to scaffold a new app on TanStack Start/ro:migrate-to-tanstack to port an existing app onto TanStack Start/ro:clerk, /ro:nango, /ro:stripe, /ro:cf-ship for the rest of the canonical stackllm-wiki-research/wiki/concepts/tanstack-libraries.md (full catalogue with composition diagram)llm-wiki-research/wiki/concepts/tanstack-scaffolder-integrations.md (Tanner's vendor picks + "things you haven't thought about" curation)development
--- name: worktree description: Coordinate multiple agents on one repo via a worktree-lock pool, so two agents never clobber each other's working tree. Acquire the first free slot (main, then beta/gamma… worktrees, created on demand), work there on your own branch, release when you've pushed. Use before modifying any repo that might be in use by another agent (factory, dataforce, etc.), or whenever you're told a repo is being worked on. Backed by `ro worktree`. category: development argument-hin
testing
--- name: ship description: Ship a feature branch the local-CI-first way — run the full local gate, push, open a PR, squash-merge, then deploy, without waiting on GitHub Actions. Use when a branch is ready for main and you want it merged and deployed now. Reads CI policy from `ro ci` (default skips remote CI because GitHub Actions billing keeps hitting limits). Sibling to /ro:gh-ship (waits on GitHub checks) and /ro:cf-ship (the deploy half). Triggers on "ship it", "ship this", "merge and deploy
testing
--- name: setup-logging description: Set up (or audit) the observability stack in a TanStack Start + Cloudflare Workers app so it is "diagnosable by default" — structured logging (logtape) with a request context carrying trace_id + userId + tenant/orgId, a trace_id propagated FE→BE→logs→Sentry→PostHog, Cloudflare Workers observability enabled, and Sentry + PostHog wired. Two modes: `setup` (wire it into an app) and `audit` (check an existing app + report gaps). Use when scaffolding a new app, wh
development
Manage credentials INSIDE the active ~/.claude/.env file — read which token/account to use for a given app (Simplicity vs Dataforce vs Ronan-personal), add or update a secret WITHOUT it passing through the chat (an interactive Terminal window prompts for it), and track secrets that were exposed in a transcript so they get rotated. Sibling to /ro:context (which switches WHICH env file is active). Use when the user wants to add an API key/token/secret, asks "which credential do I use for X", needs the env organized/labelled, or a secret was pasted into the chat and should be rotated.