TanStack Start prompt
Rules that make your coding agent write TanStack Start the way it works: isomorphic loaders, createServerFn for server code, typed routes and search params, middleware and SSR.
What it makes your agent good at
Agents treat TanStack Start like Next.js or Remix: they add use server directives, query the database in loaders, fetch their own API routes and trust beforeLoad to protect data. This prompt gives them the execution model, validated and authorized server functions, Zod 4 search params with loaderDeps, middleware, server routes and the TanStack Query SSR setup, and points them at the docs that ship in node_modules.
- Loaders that run on both sidesNo database or secrets in loaders or beforeLoad: they call server functions, and never fetch a relative API URL during SSR.
- Server functions that check inputcreateServerFn with a method, a validator and middleware, with auth enforced in every handler rather than the route guard.
- Typed search paramsZod 4 schemas passed to validateSearch with default and catch, and loaderDeps that pick only what the loader uses.
- Types left to inferenceNo casts on useSearch or useLoaderData, params passed to Link instead of interpolated, the route tree left to the generator.
- SSR, head and TanStack QueryHeadContent and Scripts in the root, head per route, selective SSR, and one QueryClient per request wired for SSR.
- Start v1, not the release candidatesNo @tanstack/start, Vinxi app.config.ts or createAPIFileRoute: server routes through the server option on file routes.
The TanStack Start rules
124 lines, current to TanStack Start v1 (core 1.170), Router 1.171, React 19.3 and Zod 4.6. Last reviewed October 23, 2026. Plain Markdown, no front matter: each agent's is below.
tanstack-start.md
# TanStack Start
You are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.
## Before you write code
Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.
`vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.
`src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.
Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.
## Routes
File routes live in `src/routes`: `posts.tsx`, `posts/$postId.tsx`, `posts/index.tsx`, pathless layouts `_authed.tsx` with children in `_authed/`, groups `(marketing)/`, splats `$.tsx`. Files and folders starting with `-` are ignored, for colocated components.
Each file exports `export const Route = createFileRoute("/posts/$postId")({ … })`. The generator keeps the path string in sync with the file; don't edit it by hand.
Order route options as they infer: `validateSearch`, `loaderDeps`, `beforeLoad`, `loader`, `head`, then `component`.
Types flow from the tree: never annotate or cast what `Route.useSearch()`, `Route.useParams()` or `Route.useLoaderData()` return. In other files, use `getRouteApi("/posts/$postId")` rather than importing `Route`, and don't export components from route files: both break code splitting.
Link with `<Link to="/posts/$postId" params={{ postId }}>`, never by interpolating into `to`. Update search with a function (`search={(prev) => ({ ...prev, page: 2 })}`) so other params survive; navigate in code with `useNavigate({ from: Route.fullPath })`.
Missing records `throw notFound()` and render the route's `notFoundComponent` (set a default on the root). Error components retry with `router.invalidate()`, which reruns the loader; `reset()` alone doesn't.
## Search params
import { createFileRoute } from "@tanstack/react-router";
import { z } from "zod";
const productSearch = z.object({
page: z.number().int().min(1).default(1).catch(1),
sort: z.enum(["newest", "price"]).default("newest").catch("newest"),
});
export const Route = createFileRoute("/products")({
validateSearch: productSearch,
loaderDeps: ({ search }) => ({ page: search.page, sort: search.sort }),
loader: ({ deps }) => listProducts({ data: deps }), // a server function
component: ProductsPage,
});
Zod 4 schemas are passed straight to `validateSearch`; `.default()` with `.catch()` keeps a bad URL from throwing. The `zodValidator` and `fallback` adapter is only for Zod 3.
`loaderDeps` returns only the params the loader uses, never the whole `search` object. Store dates as ISO strings.
## Loaders, context and auth
Loaders are isomorphic: they run on the server during SSR and in the browser on navigation. Database queries, secrets and file access never go in a loader or `beforeLoad`; call a server function. Never `fetch("/api/…")` with a relative URL from a loader.
`beforeLoad` runs before loaders, parents first. Return an object to add to the context, or `throw redirect({ to: "/login", search: { redirect: location.href } })` with the `location` it receives.
Put shared services in router context with `createRootRouteWithContext<{ queryClient: QueryClient }>()({ … })` (note the double call) and supply them in `getRouter()`.
Auth: the root `beforeLoad` calls a `getSession` server function and puts the user in context; an `_authed.tsx` layout redirects anonymous users. That is UX only: every server function and server route that touches private data checks the session again.
Return slow data as an unawaited promise and render it with `<Await promise={…} fallback={…}>` or a suspense query, so SSR streams it.
Route data is stale at once by default (`staleTime: 0`). Set `staleTime` per route or `defaultStaleTime` on the router for data that changes rarely; show `pendingComponent` for slow routes.
After a mutation, `await router.invalidate()` so loaders read the saved result.
## Server functions
// src/server/posts.functions.ts
import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { authMiddleware } from "./auth-middleware";
export const renamePost = createServerFn({ method: "POST" })
.middleware([authMiddleware])
.validator(z.object({ id: z.string(), title: z.string().trim().min(1).max(200) }))
.handler(async ({ data, context }) => {
return renamePostFor(context.user.id, data); // your data layer, checks ownership
});
Use `GET` for reads and `POST` for writes. Chain `.middleware()`, then `.validator()`, then `.handler()`; call it as `renamePost({ data: { id, title } })`. Recent versions name the validator method `validator` and deprecate `inputValidator`; use whichever the installed types mark current.
Every server function is a public endpoint: validate its input and authorize inside it or its middleware, whatever route calls it.
In components, wrap a server function with `useServerFn` when it can `throw redirect()` or `notFound()`, so the router handles the throw.
Keep server functions in `*.functions.ts` files (safe to import anywhere, the client gets an RPC stub), server-only helpers in `*.server.ts`, and shared schemas in plain files. Import them statically.
Inside handlers, read and write the HTTP layer with `getRequest`, `getRequestHeader`, `getCookie`, `setCookie`, `setResponseHeaders` and `setResponseStatus` from `@tanstack/react-start/server`. A response that depends on the session is never `Cache-Control: public`.
Mark code that must not run on the other side with `createServerOnlyFn`, `createClientOnlyFn` or `createIsomorphicFn`; render browser-only UI in `<ClientOnly>` or after `useHydrated()` is true.
## Middleware and server routes
`createMiddleware({ type: "function" })` wraps server functions (`.client()` and `.server()` phases); `createMiddleware()` is request middleware for every request: SSR, server routes and server functions. Pass data down with `next({ context: { user } })`.
Register global middleware in `src/start.ts`: `export const startInstance = createStart(() => ({ requestMiddleware: [...], functionMiddleware: [...] }))`.
Context sent from the client with `sendContext` is untrusted input: validate it and check it against the session.
Session cookies are `HttpOnly`, `Secure` and `SameSite=Lax`. Check `Origin` on non-GET requests in request middleware, or use the CSRF middleware your version exports.
Server routes add a `server` option to a file route, for webhooks, feeds, files and outside clients, never for your own pages' data:
export const Route = createFileRoute("/api/webhooks/billing")({
server: {
handlers: {
POST: async ({ request }) => {
await handleBillingEvent(await request.text()); // verify the signature first
return new Response(null, { status: 204 });
},
},
},
});
Add `middleware` under `server` for every handler, or use `handlers: ({ createHandlers }) => createHandlers({ … })` to give one method its own.
## SSR, head and TanStack Query
The root route renders `<html>`, `<head><HeadContent /></head>` and a body ending in `<Scripts />`; without `Scripts` nothing hydrates.
Set tags with the `head` option: `head: ({ loaderData }) => ({ meta: [{ title: loaderData?.post.title }, { name: "description", content: … }] })` (`loaderData` is optional there). Children override their parents' tags; add JSON-LD through `scripts`.
Turn SSR down per route with `ssr: false` or `ssr: "data-only"` (children can only be stricter), or for the app with `defaultSsr` in `createStart`. Prerender static pages with `tanstackStart({ prerender: { enabled: true, crawlLinks: true } })`.
Render nothing that differs between server and client (`Date.now()`, `Math.random()`, `window`) outside `useHydrated` or `<ClientOnly>`.
With TanStack Query, create the `QueryClient` inside `getRouter()` (one per request), put it in router context, and connect them with `setupRouterSsrQueryIntegration({ router, queryClient })` from `@tanstack/react-router-ssr-query`. Loaders call `context.queryClient.ensureQueryData(postQuery(id))`, components `useSuspenseQuery(postQuery(id))`, and query functions call server functions. Set `defaultPreloadStaleTime: 0` so Router doesn't cache over Query, and invalidate queries after mutations.
## Environment and deployment
Read `process.env` inside handlers and middleware, never at module scope: module scope can reach the client bundle, and edge runtimes inject env per request.
Only `VITE_` variables reach the browser, through `import.meta.env`. Never give a secret that prefix.
Hosting is a Vite plugin beside `tanstackStart()`: Nitro for Node, Vercel, Bun and others, the Cloudflare plugin for Workers (with `nodejs_compat`), Netlify's for Netlify. Keep the project's choice; see the deployment skill before adding one.
## Do not
Do not write `"use server"` directives, `getServerSideProps`, `app/layout.tsx`, Remix `loader` or `action` exports, or imports from `next/*` or `react-router-dom`.
Do not use pre-1.0 Start APIs: the `@tanstack/start` package, `app.config.ts` with Vinxi, `createAPIFileRoute` or `createServerFileRoute`.
Do not edit `routeTree.gen.ts`, declare `Register` by hand in a Start app, or put the React plugin before `tanstackStart()`.
Do not trust `beforeLoad` to protect data, put secrets in loaders, or use `forwardRef` in React 19 components.
## Before you finish
Run `tsc --noEmit` (or the project's typecheck script) and the linter, with the route tree regenerated by the dev server or a build.
Run a production build: import protection fails it when server code reaches the client.
Test the first SSR load (view source), client navigation, a mutation followed by a refresh, and a direct anonymous call to every protected server function and server route.
10,738 characters, 1,484 words. Under Windsurf's 12,000-character limit for a rule, as every prompt here is.
Use it in your agent
The same rules, where your agent reads them. Each file has the front matter its agent needs, set to apply on every request.
Claude Code
A rule it loads every session
- Save it as
.claude/rules/tanstack-start.mdin your project, front matter included, or run the install command. - Claude Code loads every file in
.claude/ruleswith yourCLAUDE.mdwhen a session starts. - Prefer one file? Paste it into
CLAUDE.mdunder its own heading instead.
.claude/rules/tanstack-start.md
# TanStack StartYou are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.## Before you write code- Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.- `vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.- `src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.- Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.## Routes…
Or let the shadcn CLI write this file: sign in (free) for your command.
Cursor
A project rule with front matter
- Save it as
.cursor/rules/tanstack-start.mdc, front matter included, or run the install command. alwaysApply: trueadds it to every Agent request in this project.- Check it under Cursor Settings, Rules, then commit the folder for your team.
.cursor/rules/tanstack-start.mdc
---description: "TanStack Start and TanStack Router conventions: file routes, search params, loaders, server functions, middleware, server routes, SSR and deployment."alwaysApply: true---# TanStack StartYou are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.## Before you write code- Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.- `vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.- `src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.- Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.## Routes…
Or let the shadcn CLI write this file: sign in (free) for your command.
Windsurf
A workspace rule for Cascade
- Save it as
.windsurf/rules/tanstack-start.md, or run the install command. trigger: always_onapplies it to every Cascade request in this workspace.- Windsurf reads up to 12,000 characters per rule; this one is 10,738.
.windsurf/rules/tanstack-start.md
---trigger: always_on---# TanStack StartYou are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.## Before you write code- Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.- `vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.- `src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.- Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.## Routes…
Or let the shadcn CLI write this file: sign in (free) for your command.
GitHub Copilot
Instructions for the repository
- Save it as
.github/instructions/tanstack-start.instructions.md, or run the install command. applyTo: "**"applies it to every request in this repository.- Or paste it into
.github/copilot-instructions.md, which Copilot reads for every request.
.github/instructions/tanstack-start.instructions.md
---description: "TanStack Start and TanStack Router conventions: file routes, search params, loaders, server functions, middleware, server routes, SSR and deployment."applyTo: "**"---# TanStack StartYou are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.## Before you write code- Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.- `vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.- `src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.- Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.## Routes…
Or let the shadcn CLI write this file: sign in (free) for your command.
Codex & AGENTS.md
The file most agents read
- Paste it into
AGENTS.mdat your project's root, under its own heading. - Codex reads
AGENTS.mdbefore it starts work, and so do Cursor, Zed, Jules, Amp and Copilot's coding agent. - A folder can have its own
AGENTS.md: the one closest to the file being edited wins.
AGENTS.md
## TanStack StartYou are working in a TanStack Start project with React 19, TanStack Router, Vite and TypeScript. Write code for the versions in `package.json`, not the ones in your training data. Start is not Next.js or Remix: route loaders run on the server and in the browser, server-only code goes through `createServerFn`, and route types are inferred from a generated tree.### Before you write code- Read `package.json` for `@tanstack/react-start`, `@tanstack/react-router`, `@tanstack/react-query` and `zod`. Start and Router ship agent docs in `node_modules`: `@tanstack/start-client-core/skills/` (server functions, middleware, execution model, server routes, deployment) and `@tanstack/router-core/skills/` (search params, data loading, auth, navigation). Read the one for your task before using an API you are unsure of.- `vite.config.ts` lists `tanstackStart()` from `@tanstack/react-start/plugin/vite` before the React plugin. It generates the route tree; don't add the standalone router plugin as well.- `src/router.tsx` exports `getRouter()`; `src/routes/__root.tsx` renders the document; `src/routeTree.gen.ts` is generated (never edit it: it also registers your router's types); optional `src/start.ts` holds global middleware.- Leave `verbatimModuleSyntax` off in `tsconfig.json`: with it on, server code can leak into client bundles.### Routes…
AGENTS.md is shared with your own instructions, so paste the rules in: the copy sets their headings a level down.
Rules teach it. The MCP equips it. With Pro, your agent installs every component, block and icon it needs, from a prompt.
Get ProMore prompts
Prompts that pair with this one. Each is short enough to sit beside the others.
Pricing
Give your agent the parts, with Pro
The prompts are free. Every Pro plan adds the MCP server, so your agent installs the components, blocks and icons it writes code around.
4.9/5 out of 5 · 150+ reviewsfrom 150+ founders and developers.
Billing
Billed once a year in USD. Cancel anytime.
- How many people can use the license.
- Client work, SaaS products and anything you charge for.
- Page sections in 56 categories, from heroes and pricing tables to dashboards and settings, on every framework and UI library, in your theme.
- Complete Next.js sites for startups, SaaS, agencies and portfolios, every page designed, ready to ship.
- Your AI agent searches, previews and installs any component, block, icon or DESIGN.md from a prompt: 22 tools in Claude Code, Cursor, VS Code and 35 more clients.
- Buttons with motion and states of their own, from an arrow that slides in to a burst of confetti.
- Typewriters, scrambles, counters and more, for headlines, labels and numbers.
- Animated backgrounds for heroes, sections and cards, from a soft aurora to a flock that flees the cursor. Most are pure CSS.
- WebGPU shaders, from a slow aurora to a black hole, each drawing only while it's on screen.
- One design and one theme on all four: the components, blocks and effects are built for each framework.
- React on Base UI, Radix UI, React Aria or Ark UI: install the version for the library your project already uses. Vue, Svelte and Solid run on Ark UI.
- From a button to a date picker, a color picker or a guided tour: accessible, typed in TypeScript, each with live demos.
- Real-world patterns built from the components, in 53 galleries: forms, tables, menus, dialogs and more.
- Area, bar, line, pie, radar and radial charts on TanStack Charts, on every framework. React also gets the Recharts originals.
- Debounce, local storage, media queries and more: each hook is one typed file you own.
- From 222 libraries, Lucide, Heroicons, Tabler and Material Symbols among them, as SVG or a React component in one command.
- Stripe, Linear, Apple and 497 more: a brand's colors, typography and components in one file your AI agent builds from.
- Restyle every component and block at once: 8 styles, 7 grays, 18 colors and 5 radii, shared as a shadcn preset code.
- Priority requests are answered first.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- Seats: 1 seat
- Commercial use: Personal & open source only
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
- Seats: Up to 5 seats
- Commercial use: Included
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
- Seats: Unlimited seats
- Commercial use: Included
- Blocks: All 6,181 blocks
- Templates: All 14 templates
- MCP server: 38 AI clients
- Animated buttons: All 35 buttons
- Text effects: All 97 effects
- Backgrounds: All 100 backgrounds
- Shaders: All 100 shaders
- Frameworks: React, Vue, Svelte, Solid
- UI libraries: Base UI, Radix, Aria, Ark
- Components: All 174 components
- Examples: All 1,103 examples
- Charts: All 70 charts
- React hooks: All 35 hooks
- Icons: 294k+ icons
- DESIGN.md files: All 500 brands
- Theme builder: 8 styles × 18 colors
- Support: Priority
Billed once a year in USD. Cancel anytime.
Individual
For personal projects & open source
$32instead of $49/mo
$389 billed yearly
- How many people can use the license.Seats: 1 seat
- Client work, SaaS products and anything you charge for.Commercial use: Personal & open source only
- Page sections in 56 categories, from heroes and pricing tables to dashboards and settings, on every framework and UI library, in your theme.Blocks: All 6,181 blocks
- Complete Next.js sites for startups, SaaS, agencies and portfolios, every page designed, ready to ship.Templates: All 14 templates
- Your AI agent searches, previews and installs any component, block, icon or DESIGN.md from a prompt: 22 tools in Claude Code, Cursor, VS Code and 35 more clients.MCP server: 38 AI clients
- Buttons with motion and states of their own, from an arrow that slides in to a burst of confetti.Animated buttons: All 35 buttons
- Typewriters, scrambles, counters and more, for headlines, labels and numbers.Text effects: All 97 effects
- Animated backgrounds for heroes, sections and cards, from a soft aurora to a flock that flees the cursor. Most are pure CSS.Backgrounds: All 100 backgrounds
- WebGPU shaders, from a slow aurora to a black hole, each drawing only while it's on screen.Shaders: All 100 shaders
- One design and one theme on all four: the components, blocks and effects are built for each framework.Frameworks: React, Vue, Svelte, Solid
- React on Base UI, Radix UI, React Aria or Ark UI: install the version for the library your project already uses. Vue, Svelte and Solid run on Ark UI.UI libraries: Base UI, Radix, Aria, Ark
- From a button to a date picker, a color picker or a guided tour: accessible, typed in TypeScript, each with live demos.Components: All 174 components
- Real-world patterns built from the components, in 53 galleries: forms, tables, menus, dialogs and more.Examples: All 1,103 examples
- Area, bar, line, pie, radar and radial charts on TanStack Charts, on every framework. React also gets the Recharts originals.Charts: All 70 charts
- Debounce, local storage, media queries and more: each hook is one typed file you own.React hooks: All 35 hooks
- From 222 libraries, Lucide, Heroicons, Tabler and Material Symbols among them, as SVG or a React component in one command.Icons: 294k+ icons
- Stripe, Linear, Apple and 497 more: a brand's colors, typography and components in one file your AI agent builds from.DESIGN.md files: All 500 brands
- Restyle every component and block at once: 8 styles, 7 grays, 18 colors and 5 radii, shared as a shadcn preset code.Theme builder: 8 styles × 18 colors
- Priority requests are answered first.Support: Standard
Team
Most popularFor freelancers, agencies & startups
$66instead of $99/mo
$789 billed yearly · ≈ $13/dev/mo
Everything in Individual, plus
- How many people can use the license.Seats: Up to 5 seats
- Client work, SaaS products and anything you charge for.Commercial use: Included
- Priority requests are answered first.Support: Priority
Organization
For companies with larger teams
$132instead of $199/mo
$1,589 billed yearly
Everything in Team, plus
- How many people can use the license.Seats: Unlimited seats
- Secure checkout via Stripe
- Code lives in your repo
- Keep what you've shipped if you cancel
- License terms
TanStack Start prompt FAQ
What the TanStack Start prompt covers and how to use it in your agent.
How does the TanStack Start prompt validate search params?
Why does the TanStack Start prompt forbid casting route hook results?
Does the TanStack Start prompt cover TanStack Query?
What does the TanStack Start prompt cover?
Is the TanStack Start prompt for React or Solid?
Does the TanStack Start prompt work with older Start releases?
Why does the TanStack Start prompt keep database code out of loaders?
Does the TanStack Start prompt use validator or inputValidator?
Is beforeLoad enough to protect a TanStack Start server function?
When does the agent write a Start server route instead of a server function?
How do I add the TanStack Start prompt to Claude Code?
How do I use the TanStack Start prompt as a Cursor rule?
Does the TanStack Start prompt fit in a Windsurf rule?
Can GitHub Copilot and Codex use the TanStack Start prompt?
Can I edit the TanStack Start prompt for my project?
4.9 out of 5 from 150+ developers
Rules teach it. The MCP equips it.
Every component, block and icon, installed by your AI agent on your stack. The prompts stay free.
- Cancel anytime
- Keep what you've shipped