> tanstack
Assists with building React applications using the TanStack ecosystem: Query for server state management, Router for type-safe routing, Table for headless data tables, and Virtual for list virtualization. Trigger words: tanstack, react query, tanstack query, tanstack table, tanstack router, useQuery, useMutation.
curl "https://skillshub.wtf/TerminalSkills/skills/tanstack?format=md"TanStack
Overview
The TanStack ecosystem provides type-safe client libraries for React: Query for declarative data fetching and caching, Router for fully typed routing with search parameters, Table for headless data tables with sorting/filtering/pagination, and Virtual for rendering large lists efficiently.
Instructions
- When fetching data, use
useQuery()with hierarchical query keys (e.g.,["users", userId, "posts"]) and configurestaleTimebased on freshness needs (0 for real-time, 5 minutes for dashboards, Infinity for static data). - When performing mutations, use
useMutation()withonSuccessfor cache invalidation viaqueryClient.invalidateQueries(), andonMutatefor optimistic updates with rollback. - When building tables, use TanStack Table's headless approach with typed column definitions, and combine with
@tanstack/react-virtualfor datasets with 10,000+ rows. - When routing, use TanStack Router for fully typed route parameters and search params with Zod validation, file-based routes with automatic type generation, and route-level data loading.
- When handling pagination, use
useInfiniteQuery()for infinite scroll or cursor-based patterns, and server-side pagination in TanStack Table. - When prefetching, use
queryClient.prefetchQuery()for anticipated navigation anduseSuspenseQuery()for React Suspense integration. - When virtualizing lists, use
@tanstack/react-virtualwithestimateSizefor scroll position prediction and support for dynamic, variable-height items.
Examples
Example 1: Build a data dashboard with Query and Table
User request: "Create a dashboard with server-paginated data table and real-time stats"
Actions:
- Set up TanStack Query with appropriate
staleTimeand refetch intervals for stats - Define TanStack Table with typed columns, server-side sorting and pagination
- Implement filter controls with column filters and global search
- Add optimistic updates for inline row editing with mutation rollback
Output: A dashboard with efficient data fetching, server-managed table pagination, and instant edit feedback.
Example 2: Add type-safe routing with data prefetching
User request: "Set up TanStack Router with typed search parameters and data preloading"
Actions:
- Define routes with typed parameters and Zod-validated search params
- Add route loaders for data fetching with built-in caching
- Configure
<Link>components with type-checked params and search params - Enable prefetching on hover for instant navigation
Output: A fully typed routing layer where invalid params cause TypeScript errors at compile time.
Guidelines
- Use query key factories for consistent cache keys:
const userKeys = { all: ["users"], detail: (id) => ["users", id] }. - Set
staleTimebased on data freshness needs: 0 for real-time, 5 minutes for dashboards, Infinity for static data. - Always define
onErrorfor mutations; silent failures confuse users. - Use
placeholderDatainstead ofinitialDatafor loading states; placeholder does not write to cache. - Use TanStack Table with
@tanstack/react-virtualfor large datasets; do not render thousands of DOM nodes. - Keep query functions pure: they receive
queryKeyand return data with no side effects. - Use
queryClient.invalidateQueries()after mutations instead of manual cache updates for simplicity.
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> xero-accounting
Integrate with the Xero accounting API to sync invoices, expenses, bank transactions, and contacts — and generate financial reports like P&L and balance sheet. Use when: connecting apps to Xero, automating bookkeeping workflows, syncing accounting data, or pulling financial reports programmatically.
> windsurf-rules
Configure Windsurf AI coding assistant with .windsurfrules and workspace rules. Use when: customizing Windsurf for a project, setting AI coding standards, creating team-shared Windsurf configurations, or tuning Cascade AI behavior.