skills/tanstack/SKILL.md
TanStack patterns: Start file-based routing, Router v1, Query v5, Form, and server functions. Load when working with @tanstack/ packages in a React project.
npx skillsauth add cloudvoyant/codevoyant 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.
Recipes for building React apps on TanStack Start (Router v1 + Query v5 + Form + createServerFn). Targets React 19, Vite 7-8, Nitro 3 SSR.
| You are working on… | Load recipe |
|---|---|
| New TanStack Start project (deps, vite, tsconfig, entries) | references/recipes/project-setup.md |
| Route files, root route, loaders, search params, API routes | references/recipes/router.md |
| Server functions (createServerFn) with Zod + middleware | references/recipes/server-actions.md |
| Auth-gated route subtrees (loader redirect or provider gate) | references/recipes/auth-routes.md |
| useQuery / useMutation / useInfiniteQuery + TanStack Form | references/recipes/query-and-forms.md |
Load project-setup + router together when scaffolding a new TanStack Start app.
tanstackStart() Vite plugin owns SSR entry and generates src/routeTree.gen.ts — never edit the gen file, never add @tanstack/router-plugin to the vite config separatelyvite.config.ts: [tanstackStart(), nitro(), react(), svgr(), tailwindcss()]~/* -> src/* via resolve: { tsconfigPaths: true } or vite-tsconfig-pathscreateRootRouteWithContext<{ queryClient: QueryClient }>() with ssr: "data-only", separate shellComponent (HTML document) and component (provider tree)QueryClient defaults block reused everywhere: staleTime: 1000 * 20, refetchOnWindowFocus: false, retry: 1await import("@acme/db")) to stay out of the client bundlecreateServerFn({ method }).middleware([...]).inputValidator(zod).handler(async (ctx) => ...) — input on ctx.data, middleware values on ctx.contextPUBLIC_* surfaced via a server fn read in the root loader; PRIVATE_* server-onlyas const factories; mutations invalidate by key in onSettledqueryClient via router context — otherwise loaders cannot share cache with componentsdefaultPreloadStaleTime: 0 on the router so react-query owns staleness (avoids double-caching)search directly in loader — use loaderDeps so preload/dedupe worksuseSuspenseQuery in components when a loader prefetched the same queryOptions — synchronous, no isPending branchonChangeAsync / onSubmitAsync (not onChange / onSubmit) or TS swallows the promiserouteTree.gen.ts is generated by tanstackStart() on dev/build — commit it only if the plugin does not run in CItools
Vim and Neovim key binding reference. Triggers on: "vim keys", "vim shortcuts", "how do I open a file in vim", "vim search replace", "vim splits", "vim buffers", "how do I navigate in vim".
testing
Generate a responsible-AI usage and decision-attribution report for the current session. Triggers on: "usage report", "usage generate", "usage run", "usage help".
development
Unified task runner dispatcher: auto-detects mise, just, task.dev, or package.json scripts and provides commands to run, list, or detect the project task runner. Triggers on: "/task", "run task", "list tasks", "detect task runner", "what tasks", "mise run", "just run", "pnpm run", "package.json scripts".
development
Example of a workflow dispatcher skill. Triggers on: 'workflow-example new', 'workflow-example go', 'run workflow-example'. Replace name and triggers with your own.