> ## 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.

# React Start

> Build full-stack React applications with TanStack Start

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:

```bash theme={null}
npm install @tanstack/react-start
```

## Vite Plugin Setup

Configure the TanStack Start Vite plugin in your `vite.config.ts`:

```tsx theme={null}
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`:

```tsx theme={null}
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:

```tsx theme={null}
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:

```tsx theme={null}
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

```tsx theme={null}
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

```tsx theme={null}
const protectedAction = createServerFn()
  .middleware([authMiddleware])
  .handler(async ({ context }) => {
    // context.user is typed and available
    return { userId: context.user.id }
  })
```

## Input Validation

Validate server function inputs with validators like Zod, Valibot, or ArkType:

```tsx theme={null}
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:

```tsx theme={null}
// 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:

```tsx theme={null}
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:

```tsx theme={null}
// 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:

```tsx theme={null}
import { Suspense } from 'react'

function App() {
  return (
    <Suspense fallback={<div>Loading...</div>}>
      <AsyncContent />
    </Suspense>
  )
}
```

## TypeScript Configuration

Ensure your `tsconfig.json` includes:

```json theme={null}
{
  "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

<CardGroup cols={2}>
  <Card title="Server Functions" icon="server" href="/start/concepts/server-functions">
    Learn more about creating and using server functions
  </Card>

  <Card title="Routing" icon="route" href="/router/guide/routing">
    Explore TanStack Router features
  </Card>

  <Card title="Examples" icon="code" href="https://github.com/TanStack/router/tree/main/examples/react">
    Browse React Start examples
  </Card>

  <Card title="API Reference" icon="book" href="/start/api/react">
    View the complete API documentation
  </Card>
</CardGroup>
