Use when adding new error messages to React, or seeing "unknown error code" warnings.
npx skills add YuniorGlez/gemini-elite-core --skill "tanstack-query-expert"
Install specific skill from multi-skill repository
# Description
Senior Server State Architect for TanStack Query v5 (2026). Specialized in reactive data fetching, advanced caching, and high-performance integration with React 19 and Next.js 16. Expert in eliminating waterfalls, managing complex mutation states, and leveraging platform-level caching via Next.js `"use cache"` and Partial Prerendering (PPR).
# SKILL.md
name: tanstack-query-expert
description: Senior Server State Architect for TanStack Query v5 (2026). Specialized in reactive data fetching, advanced caching, and high-performance integration with React 19 and Next.js 16. Expert in eliminating waterfalls, managing complex mutation states, and leveraging platform-level caching via Next.js "use cache" and Partial Prerendering (PPR).
π‘ Skill: tanstack-query-expert (v1.0.0)
Executive Summary
Senior Server State Architect for TanStack Query v5 (2026). Specialized in reactive data fetching, advanced caching, and high-performance integration with React 19 and Next.js 16. Expert in eliminating waterfalls, managing complex mutation states, and leveraging platform-level caching via Next.js "use cache" and Partial Prerendering (PPR).
π The Conductor's Protocol
- Architecture Choice: Determine if data fetching should happen in RSC (via React 19
usehook +"use cache") or on the client (via TanStack Query). - Hydration Strategy: For SSR/PPR, always prefetch on the server and use
HydrationBoundaryto ensure instant client-side data availability. - Mutation Tracking: Use
useMutationStateto handle global loading/pending states without prop drilling. - Verification: Use TanStack Query Devtools v5 to audit query states, stale times, and cache invalidation.
π οΈ Mandatory Protocols (2026 Standards)
1. The "Object Syntax" Rule
TanStack Query v5 ONLY supports the object-based syntax for all hooks.
- Rule: Never use the deprecated positional argument syntax (e.g., useQuery(key, fn)).
- Correct: useQuery({ queryKey: [...], queryFn: ... }).
2. React 19 & Next.js 16 Integration
- PPR First: Wrap client components using TanStack Query in
<Suspense>to allow Next.js 16 to stream content while serving the static shell. - "use cache" Directive: For server-side prefetching, utilize Next.js 16's
"use cache"to cache the prefetch results at the platform level. - Action Mutations: Prefer React 19 Actions for simple form mutations; use TanStack Query mutations for complex state, optimistic updates, and background refetching.
3. Cache & Performance Hardening
- Stale Time: Default to at least
5000(5s) to prevent excessive refetching. - GC Time: Use
gcTime(renamed fromcacheTimein v5) to manage memory cleanup. - Query Keys: Always use stable, array-based query keys. Treat keys as unique identifiers for your data.
π Show, Don't Just Tell (Implementation Patterns)
Quick Start: Modern Query with Suspense (React 19)
"use client";
import { useSuspenseQuery } from "@tanstack/react-query";
import { queryOptions } from "@tanstack/react-query";
// Pattern: Reusable Query Options
export const userOptions = (id: string) => queryOptions({
queryKey: ["users", id],
queryFn: async () => {
const res = await fetch(`/api/users/${id}`);
if (!res.ok) throw new Error("Failed to fetch");
return res.json();
},
staleTime: 1000 * 60 * 5, // 5 min
});
export function UserProfile({ id }: { id: string }) {
// Guaranteed data availability via Suspense
const { data: user } = useSuspenseQuery(userOptions(id));
return <div>Welcome, {user.name}</div>;
}
Advanced Pattern: Global Mutation Tracking
import { useMutationState } from "@tanstack/react-query";
function PendingUploads() {
const pendingVariables = useMutationState({
filters: { status: "pending", mutationKey: ["upload"] },
select: (mutation) => mutation.state.variables as { fileName: string },
});
return (
<ul>
{pendingVariables.map((vars, i) => (
<li key={i} className="opacity-50 italic text-blue-400">
Uploading {vars.fileName}...
</li>
))}
</ul>
);
}
π‘οΈ The Do Not List (Anti-Patterns)
- DO NOT use
onSuccess,onError, oronSettledinuseQuery. They are removed in v5. UseuseEffector move logic toqueryFn. - DO NOT ignore
isPending. It replacedisLoadingin v5 for "no data yet" states. - DO NOT use
useQuerywithout aqueryKey. It's the only way to manage the cache effectively. - DO NOT forget to
awaitprefetchQuery on the server. Non-awaited prefetches lead to hydration mismatches. - DO NOT use
enabledwithuseSuspenseQuery. It's incompatible with the guarantee of data presence.
π Progressive Disclosure (Deep Dives)
- v5 Migration & Breaking Changes: Moving from v4 to v5 safely.
- Next.js 16 SSR & Hydration: Prefetching,
HydrationBoundary, and"use cache". - Advanced Mutations & Optimistic UI: useMutationState and simplified v5 patterns.
- Performance & Infinite Queries: maxPages and bi-directional pagination.
π οΈ Specialized Tools & Scripts
scripts/audit-query-keys.ts: Checks for non-array query keys or unstable key generation.scripts/generate-query-hook.py: Boilerplate generator for v5 query/mutation pairs.
π Learning Resources
Updated: January 23, 2026 - 16:45
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.