Start
One Router-first app, from server request to client navigation.
Start keeps TanStack Router as the application contract, then adds full-document rendering, streaming, typed server work, middleware, and output for the runtime you choose.
server
- 1beforeLoad
- 2loader
- 3component
- 4stream HTML
browser
- 1hydrate HTML
- 2client navigation
Full SSR
Data and markup arrive ready to hydrate.
Router at the core
The framework does not replace the application model.
Routes, params, search schemas, loaders, links, pending states, and boundaries stay TanStack Router. Start adds the server and build layers around that same tree.
Start server layer
SSR · streaming · server functions · routes · middleware
TanStack Router
route tree · URL state · loaders · links · boundaries
Your application
components · data clients · product behavior
Explicit boundaries
Server work is visible in the code that calls it.
Use server functions for type-safe app calls, server routes for outside callers, and composable middleware for authentication, context, logging, and policy.
Typed work called from the app
const getProject = createServerFn({ method: 'GET' })
.validator(projectSchema)
.handler(({ data }) => db.projects.find(data.id))- component or loader
- validated request
- server-only handler
- typed result
Portable application model
Keep the routes. Change the output.
Start supports Vite and Rsbuild and is designed for different hosting providers and runtimes. Deployment configuration changes; route authoring and server boundaries do not.
selected target
Cloudflare Workers
- output
- Worker runtime
- deploy
- wrangler deploy
The authoring surface stays the same.