Documentation Index Fetch the complete documentation index at: https://mintlify.com/tanstack/router/llms.txt
Use this file to discover all available pages before exploring further.
TanStack React Start provides SSR, streaming, server functions, API routes, and bundling powered by TanStack Router and Vite, ready to deploy to your favorite hosting provider.
Installation
Install the React Start package:
npm install @tanstack/react-start
Vite Plugin Setup
Configure the TanStack Start Vite plugin in your vite.config.ts:
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import { defineConfig } from 'vite'
import viteReact from '@vitejs/plugin-react'
export default defineConfig ({
plugins: [
tanstackStart ({
srcDirectory: 'src' ,
}),
viteReact (),
] ,
})
Router Setup
Create your router instance in src/router.tsx:
import { createRouter } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen'
export function getRouter () {
const router = createRouter ({
routeTree ,
defaultPreload: 'intent' ,
})
return router
}
Server Functions
TanStack React Start provides server functions for executing code on the server with full type safety.
Creating Server Functions
Use createServerFn to define server-side logic:
import { createServerFn } from '@tanstack/react-start'
const getUser = createServerFn ()
. handler ( async () => {
// This code runs only on the server
const user = await db . user . findFirst ()
return user
})
Using Server Functions in Components
Call server functions using the useServerFn hook:
import { useServerFn } from '@tanstack/react-start'
function UserProfile () {
const fetchUser = useServerFn ( getUser )
const handleClick = async () => {
const user = await fetchUser ()
console . log ( user )
}
return < button onClick = { handleClick } > Load User </ button >
}
The useServerFn hook automatically handles:
Type-safe function calls
Redirect responses from server functions
Integration with TanStack Router navigation
Middleware
Add middleware to server functions for shared logic like authentication, logging, or data validation.
Creating Middleware
import { createMiddleware } from '@tanstack/react-start'
const authMiddleware = createMiddleware ()
. server ( async ({ next , context }) => {
const user = await getSessionUser ()
if ( ! user ) {
throw new Error ( 'Unauthorized' )
}
return next ({
context: {
user ,
},
})
})
Using Middleware in Server Functions
const protectedAction = createServerFn ()
. middleware ([ authMiddleware ])
. handler ( async ({ context }) => {
// context.user is typed and available
return { userId: context . user . id }
})
Validate server function inputs with validators like Zod, Valibot, or ArkType:
import { createServerFn } from '@tanstack/react-start'
import { z } from 'zod'
const updateUser = createServerFn ()
. inputValidator ( z . object ({
name: z . string (),
email: z . string (). email (),
}))
. handler ( async ({ data }) => {
// data is fully typed based on the validator
await db . user . update ({
where: { id: data . id },
data: { name: data . name , email: data . email },
})
})
// Call with type-safe data
await updateUser ({
data: {
name: 'John' ,
email: 'john@example.com'
}
})
HTTP Methods
Server functions support both GET and POST methods:
// GET request (default)
const getData = createServerFn (). handler ( async () => {
return { data: 'value' }
})
// POST request
const postData = createServerFn ({ method: 'POST' })
. handler ( async ({ data }) => {
return { success: true }
})
Client and Server Contexts
Share context between client and server:
const contextMiddleware = createMiddleware ()
. client ( async ({ next }) => {
return next ({
sendContext: {
clientTimestamp: Date . now (),
},
})
})
. server ( async ({ context , next }) => {
console . log ( 'Client timestamp:' , context . clientTimestamp )
return next ()
})
Package Exports
TanStack React Start provides several package exports:
@tanstack/react-start - Main client exports
@tanstack/react-start/server - Server-only utilities
@tanstack/react-start/client - Client-only utilities
@tanstack/react-start/plugin/vite - Vite plugin
@tanstack/react-start/server-rpc - Server RPC utilities
@tanstack/react-start/client-rpc - Client RPC utilities
@tanstack/react-start/ssr-rpc - SSR RPC utilities
React-Specific Features
React Server Components (RSC)
TanStack React Start supports React Server Components for optimized server rendering:
// Server Component
export default async function UserList () {
const users = await getUsers ()
return (
< ul >
{ users . map ( user => (
< li key = { user . id } > { user . name } </ li >
)) }
</ ul >
)
}
Streaming
Support for React Suspense and streaming SSR:
import { Suspense } from 'react'
function App () {
return (
< Suspense fallback = { < div > Loading... </ div > } >
< AsyncContent />
</ Suspense >
)
}
TypeScript Configuration
Ensure your tsconfig.json includes:
{
"compilerOptions" : {
"jsx" : "react-jsx" ,
"module" : "ESNext" ,
"moduleResolution" : "bundler" ,
"target" : "ES2022" ,
"lib" : [ "ES2022" , "DOM" , "DOM.Iterable" ],
"strict" : true
}
}
Peer Dependencies
TanStack React Start requires:
React >= 18.0.0 or >= 19.0.0
React DOM >= 18.0.0 or >= 19.0.0
Vite >= 7.0.0
Next Steps
Server Functions Learn more about creating and using server functions
Routing Explore TanStack Router features
Examples Browse React Start examples
API Reference View the complete API documentation