What Is TanStack Start? A 2026 Guide for React Developers

TanStack Start is a full-stack React framework built on TanStack Router, Vite, and Nitro. Learn its core concepts (server functions, loaders, type-safe routing), whether it's production ready, and how it compares to Next.js.

TanStack Start is a full-stack React framework built on TanStack Router, Vite, and Nitro. It gives you type-safe file-based routing, server-side rendering with streaming, and server functions (RPC-style server code you call directly from the client), while staying deploy-anywhere thanks to Nitro. It is not tied to Vercel and is not the Next.js App Router. React 19, TypeScript-first, SPA-capable. As of mid-2026 it is stable enough to ship real SaaS on, and we built a full production kit with it.

If you have used TanStack Query or TanStack Table, you already know the ecosystem. TanStack Start is the framework that ties those pieces together with a router and a server runtime, so you can build a complete application instead of bolting a data layer onto someone else's framework.

This guide explains what TanStack Start actually is, the primitives you work with day to day, and how honest the "production ready" claim is. Every code example below comes from a real production SaaS kit we shipped on it, with file paths so you can verify.

What Is TanStack Start?

TanStack Start is a full-stack React framework. Three pieces sit underneath it:

  • TanStack Router handles routing. It is fully type-safe, so route params, search params, and loader data are typed end to end without codegen you maintain by hand.
  • Vite is the build tool and dev server. You get Vite's fast HMR and its plugin ecosystem instead of a bespoke bundler.
  • Nitro is the server runtime. It builds your app into a portable server bundle and ships presets for Node, Bun, Cloudflare, Netlify, and more.

The framework renders on the server, streams HTML to the client, hydrates, and can also run as a pure SPA. You are not locked into one rendering model.

Here is the entry point of the router in the kit, which shows how Start wires the router to TanStack Query at the root:

// apps/web/src/router.tsx
import { createRouter as createTanStackRouter } from '@tanstack/react-router';
import { QueryClient } from '@tanstack/react-query';
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query';
import { routeTree } from './routeTree.gen';
export function getRouter() {
const queryClient = new QueryClient({
defaultOptions: { queries: { staleTime: 60_000 } },
});
const router = createTanStackRouter({
routeTree,
context: { queryClient },
defaultPreload: 'intent',
});
setupRouterSsrQueryIntegration({ router, queryClient });
return router;
}

The routeTree.gen import is generated from your route files. defaultPreload: 'intent' means routes preload when a user hovers or focuses a link, which is one reason navigation feels instant.

Where It Came From

TanStack (formerly React Query's home) built a set of headless, framework-agnostic libraries: Query for server state, Table for data grids, Form, Virtual, and Router. These solved specific problems well but left you assembling a framework around them.

TanStack Start closes that gap. It is the opinionated framework layer TanStack was missing, built on its own type-safe router rather than adopting a third-party one. If you already reach for TanStack Query in every project, Start is the logical next step: the same team, the same type-safety philosophy, one integrated stack.

Core Concepts

Four primitives cover most of what you write in a TanStack Start app.

1. File-based, type-safe routing

Routes are files. You export a Route created with createFileRoute, and the path string is checked against your actual file tree:

// apps/web/src/routes/_authenticated/dashboard/index.tsx
import { createFileRoute } from '@tanstack/react-router';
export const Route = createFileRoute('/_authenticated/dashboard/')({
component: DashboardPage,
});

The _authenticated prefix is a pathless layout route: it wraps children in an auth guard without adding a URL segment. Params and loader data flow through with full types, so Route.useLoaderData() inside the component returns exactly what the loader produced.

2. Loaders

Loaders fetch data before a route renders. They run on the server during SSR and on the client during navigation, and their return value is typed:

export const Route = createFileRoute('/_authenticated/dashboard/')({
loader: async () => {
const context = await fetchAccountContext();
if (context.isOrganization) {
const organization = await fetchActiveOrganization();
return { organizationName: organization?.name ?? null };
}
return { organizationName: null };
},
head: ({ loaderData }) => ({
meta: [{ title: loaderData?.organizationName ?? 'Dashboard' }],
}),
component: DashboardPage,
});

This is the real dashboard loader from the kit (apps/web/src/routes/_authenticated/dashboard/index.tsx). Note the head function: it derives page metadata from loader data, which is how you get per-route titles without a separate metadata API.

3. Server functions

Server functions are the feature people notice first. You define a function with createServerFn, and TanStack Start turns it into an RPC endpoint. You call it like a normal async function from client or server; the body only ever runs on the server.

// apps/web/src/lib/theme.functions.ts
import { createServerFn } from '@tanstack/react-start';
import { getCookie } from '@tanstack/react-start/server';
import { parseTheme, THEME_COOKIE } from './theme';
export const getServerTheme = createServerFn({ method: 'GET' }).handler(() => {
return parseTheme(getCookie(THEME_COOKIE));
});

Because the handler runs server-side, it can read cookies, hit the database, or use secrets, and none of that code or those imports ship to the browser. The kit uses this pattern everywhere, including wrapping request-scoped auth helpers so route loaders can read account data during client-side navigation (apps/web/src/lib/auth/account.functions.ts).

A server function is roughly the TanStack Start equivalent of a Next.js Server Action or a route handler, but it is a plain typed function you import and call, with the method (GET/POST) and validation attached to the definition.

4. Data fetching with TanStack Query

Start integrates TanStack Query as a first-class citizen rather than an add-on. The setupRouterSsrQueryIntegration call in router.tsx hydrates the query cache from the server, so data fetched during SSR is available to useQuery on the client without a refetch. Loaders can prime the cache; components read it with the Query hooks you already know. You get SSR data plus client-side caching, refetching, and mutations from one library.

How It Differs from Next.js and React Router

vs. Next.js

Next.js couples its App Router to React Server Components and a Webpack/Turbopack pipeline, and its deployment story is optimized for Vercel. TanStack Start uses Vite, plain server functions instead of RSC, and Nitro for deploy-anywhere output. TanStack's routing is type-safe by construction; Next.js routing is string paths without compile-time checking. We go deep on this in TanStack Start vs Next.js. If you want the current state of the Next.js side specifically, see our Next.js 16 guide.

vs. React Router / Remix

React Router (which absorbed Remix) also offers loaders, actions, and SSR. The main divergence is TanStack Router's end-to-end type safety, especially around search params, and Start's tighter integration with TanStack Query and Vite. If you value typed search params and the TanStack data-layer, Start leans further in that direction.

None of these are strictly better. They are different trade-offs, and the comparison post breaks them down properly.

Is TanStack Start Production Ready?

Honest answer: yes, with the usual caveats for a younger framework.

We shipped a complete production SaaS starter kit on TanStack Start: authentication, multi-tenant organizations, role-based access control, billing, an admin panel, email, and file storage. The stack is TanStack Start + Drizzle ORM on Postgres (a Prisma variant is also available), Better Auth, Tailwind 4, and Base UI, running React 19 and TypeScript. It builds, typechecks, runs E2E tests, and deploys through Nitro. That is a real, non-trivial application, not a demo.

The caveats are the ones you would expect from an ecosystem that is newer than Next.js:

  • Smaller community and fewer Stack Overflow answers. You will read source and docs more than you would with Next.js.
  • The API surface is stabilizing but still moving faster than a decade-old framework. Pin versions and read release notes.
  • Fewer turnkey integrations and templates in the wild.

If your team is comfortable with Vite and TanStack Query and does not need a large template marketplace, it is ready. If you need every third-party integration to have a copy-paste Next.js guide, weigh that in.

Getting Started and Who It's For

You can scaffold a new project from the TanStack Start docs, or start from a production codebase instead of a blank template. TanStack Start is a strong fit if you:

  • Already use TanStack Query and want one integrated stack.
  • Want end-to-end type safety across routes, params, and server calls.
  • Want to deploy outside Vercel (Cloudflare, Node, Bun, your own server) without fighting the framework.
  • Prefer Vite's dev experience and plugin ecosystem.

It is a weaker fit if you depend heavily on React Server Components today, or you want the largest possible pool of tutorials and hires.

If you want to see the primitives in a full application rather than snippets, the MakerKit TanStack Start kit is the fastest way in. It comes in Drizzle and Prisma variants, with a Supabase variant coming a bit later. It is the codebase every example above came from.

Frequently Asked Questions

What is TanStack Start?
A full-stack React framework built on TanStack Router, Vite, and Nitro. It provides type-safe file-based routing, server-side rendering with streaming, server functions, and first-class TanStack Query integration, using React 19 and TypeScript.
Is TanStack Start production ready?
Yes. It is stable enough to ship real applications, and we built a full production SaaS kit on it. It is younger than Next.js, so expect a smaller community and a faster-moving API. Pin versions and read release notes.
Does TanStack Start replace Next.js?
It is an alternative, not a drop-in replacement. It targets the same job (full-stack React) but uses Vite, server functions instead of React Server Components, and Nitro for deploy-anywhere output. See [TanStack Start vs Next.js](/blog/tutorials/tanstack-start-vs-nextjs) for the full comparison.
What is a server function in TanStack Start?
A function defined with createServerFn whose body only runs on the server. TanStack Start turns it into an RPC endpoint you call like a normal typed async function from the client. It can access cookies, databases, and secrets without that code shipping to the browser.
Is TanStack Start free and open source?
Yes. TanStack Start and the wider TanStack ecosystem (Router, Query, Table) are open source and free to use.
Does TanStack Start use React Server Components?
Not as its primary model. It relies on loaders and server functions for server-side data instead of RSC, though the ecosystem continues to evolve.
Some other posts you might like...