# TanStack Start Server Setup (HIGH) ## Vite Plugin and Request Middleware TanStack Start uses the `tanstackStart()` Vite plugin. In `vite.config.ts`, add it before the React plugin: ```typescript import { tanstackStart } from '@tanstack/react-start/plugin/vite' import viteReact from '@vitejs/plugin-react' import { defineConfig } from 'vite' export default defineConfig({ plugins: [tanstackStart(), viteReact()], }) ``` Register Clerk and CSRF middleware in `src/start.ts`: ```typescript import { clerkMiddleware } from '@clerk/tanstack-react-start/server' import { createCsrfMiddleware, createStart } from '@tanstack/react-start' const csrfMiddleware = createCsrfMiddleware({ filter: (ctx) => ctx.handlerType === 'serverFn', }) export const startInstance = createStart(() => { return { requestMiddleware: [csrfMiddleware, clerkMiddleware()], } }) ``` When `src/start.ts` exists, TanStack Start stops adding its default CSRF middleware to server functions, so register it yourself. Without `clerkMiddleware()`, `auth()` throws a middleware-not-configured error. ## ClerkProvider in Root Add `ClerkProvider` to the root route shell component in `src/routes/__root.tsx`: ```tsx import { ClerkProvider } from '@clerk/tanstack-react-start' import { createRootRoute, HeadContent, Scripts } from '@tanstack/react-router' export const Route = createRootRoute({ shellComponent: RootDocument, }) function RootDocument({ children }: { children: React.ReactNode }) { return (