tanstack-start
TanStack Start (RC) full-stack React with server functions, SSR, Cloudflare Workers. Use for Next.js migration, edge rendering, or encountering hydration, auth, data pattern errors.
How do I install this agent skill?
npx skills add https://github.com/secondsky/claude-skills --skill tanstack-startIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill is a professional playbook for the TanStack Start framework. It includes a setup script using standard developer tools from well-known sources. A minor security consideration is identified regarding the 'LLM support' feature, which creates an indirect prompt injection surface if route metadata is populated with untrusted user input.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
TanStack Start (React) — RC-Ready Playbook
Full-stack React on TanStack Router with per-route SSR/CSR, file-based routing, server functions, and first-class Cloudflare Workers support.
Use this skill when
- Building a greenfield React app that needs route-level SSR/CSR/SSG switches.
- Migrating from Next.js/React Router while keeping file-based routing + API routes.
- Shipping to edge runtimes (Workers) with typed server functions and bindings.
- You want predictable routing with type-safe params/search + built-in preloading.
What’s inside
- References: quickstart/layout, rendering modes, server functions, Cloudflare hosting, execution/auth, plus new routing/data/navigation/devtools guides.
- Script:
scripts/bootstrap-cloudflare-start.sh <app>scaffolds Start + Workers + binding types. - Troubleshooting: hydration, API routing, bindings, navigation/preloading failures.
Quick Start (React)
npm create @tanstack/start@latest my-app
cd my-app
npm run dev
Manual installs (all bundle targets are supported): add @tanstack/react-router + @tanstack/react-start with your bundler plugin (vite, webpack, or esbuild) per the official install guides.
Core layout reminder
app/routes/**file-based routes → router tree, automatic code-splitting + data preloading.app/entry.client.tsxhydrates<StartClient />;app/entry.server.tsxwrapscreateServerEntry.app/config.tsorapp/start.tssetsdefaultSsr,spaMode, middleware, and context.
Routing + Data Best Practices
- Type-safe params & search:
createFileRoute()infers path params; addvalidateSearch(zod) to parse and coerce search params. - Route matching order is deterministic (index → static → dynamic → splat); rely on this when adding catch-alls.
- Loaders run once per location change; return plain data, throw
redirect()/notFound()for control flow. - Data mutations: colocate
action/server functions; keep loaders read-only and invalidate viarouter.invalidate()after mutation. - TanStack Query bridge: create a
QueryClientin router context andensureQueryDatainside loaders to dedupe fetches. - Deferred/external data: stream partial data or read from external loaders; prefer suspense-friendly responses.
- Head management: set
headper route for<title>/meta; derive from loader data to keep SEO consistent. - Not-found/auth: throw
notFound()orredirect()in loaders/middleware; use error boundaries for UX.
Example route (typed search + data-only SSR):
// app/routes/posts.$postId.tsx
import { createFileRoute, redirect } from '@tanstack/react-router'
import { z } from 'zod'
export const Route = createFileRoute('/posts/$postId')({
validateSearch: z.object({ preview: z.boolean().optional() }),
ssr: 'data-only',
loader: async ({ params, search, context }) => {
const post = await context.queryClient.ensureQueryData(['post', params.postId], () =>
fetch(`/api/posts/${params.postId}?preview=${!!search.preview}`).then(r => r.json())
)
if (!post.published && !search.preview) throw redirect({ to: '/drafts' })
return { post }
},
})
Navigation, Preloading, and UX
- Link prefetch defaults:
<Link preload="intent">(hover/focus) preloads route data/code; usepreload="render"for above-the-fold routes. - Programmatic preloading:
router.preloadRoute({ to, search })to warm caches before navigation (e.g., on visibility). - Route masking: keep canonical URLs while showing user-friendly masks (e.g.,
/products?slug=abcmasked as/p/abc). - Navigation blocking: protect unsaved forms with
router.navigate({ to, replace, from })blockers oruseBlocker. - Scroll restoration: enable
scrollRestorationto restore positions on back/forward; customize per route when using long lists. - Search param serialization: customize parse/stringify to keep numbers/dates stable and avoid stringified booleans.
Rendering & Performance
- Per-route SSR: set
ssr: true | false | 'data-only'on routes;defaultSsrconfig sets the baseline. - Code-splitting: file-based routes auto-split; add
lazy/loadfor manual chunks on code-based routes. - Preloading strategy: pair
preload="intent"links withdefaultPreloadStaleTimeto avoid over-fetching. - Render optimizations: keep loaders pure, memoize heavy components, and use
pendingComponentfor CSR routes to avoid layout shift.
Devtools, Linting, and LLM Support
- Add
<RouterDevtools />during development to inspect matches, loader states, and preloading. - Enable the ESLint plugin
@tanstack/eslint-plugin-routerwith the recommended config to enforce inference-sensitive property order (e.g.,beforeLoadbeforeloader). - LLM-aware routing: the Router exposes structured route metadata to LLM agents; keep descriptions concise in
Routemeta for better AI navigation.
Deployment Notes (Cloudflare-friendly)
- Keep
cloudflare({ viteEnvironment: { name: 'ssr' } })first in Vite plugins so bindings reach server entry. - Regenerate bindings after changes:
npm run cf-typegen. - For static-heavy sites, enable prerender to ship HTML to Workers Assets/Pages; exclude param routes or add explicit
pages.
Ship Checklist
- Routes load without hydration warnings (prefer
ssr: 'data-only'for non-deterministic UI). - Search params validated with
validateSearchand custom serializer where needed. - Link preloading configured for high-traffic routes; blockers added for unsaved forms.
- ESLint plugin enabled (
create-route-property-orderrule) andnpm run checkpasses. - Devtools verified locally;
router.matchesstate looks correct. - Cloudflare bindings typed (
cf-typegen) and streaming tested viacurl -N.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/secondsky/claude-skills/tanstack-start">View tanstack-start on skillZs</a>