SSR setup
1
Install SSR packages
For React Router with SSR:
2
Configure for SSR
Create separate client and server entry points:
src/entry-client.tsx
src/entry-server.tsx
3
Create HTML template
Using TanStack Start
For the easiest SSR setup, use TanStack Start:app.config.ts
src/routes/__root.tsx
Server-side data loading
Loaders run on the server during SSR:src/routes/posts/$postId.tsx
Hydration
Dehydrate server state and rehydrate on client:src/entry-server.tsx
src/entry-client.tsx
Client-only components
Render components only on the client:Detecting SSR
Check if code is running on server:Streaming SSR
Stream HTML as it’s generated:src/entry-server.tsx
SEO and meta tags
Set meta tags from routes:Environment variables
Access env vars safely:Error handling in SSR
Handle errors during server rendering:Deferred data in SSR
Stream deferred data after initial render:Static generation
Pre-render routes at build time:build.ts
Best practices
Load critical data in loaders
Load critical data in loaders
Use loaders for data needed for initial render to ensure it’s available during SSR.
Use ClientOnly for browser APIs
Use ClientOnly for browser APIs
Wrap code that uses
window, document, or other browser APIs in ClientOnly.Minimize server bundle size
Minimize server bundle size
Keep server-only code separate and use tree-shaking to reduce bundle size.
Cache rendered pages
Cache rendered pages
Implement caching strategies for frequently-accessed pages.
Use streaming for better performance
Use streaming for better performance
Stream HTML as it’s generated for faster time-to-first-byte.
Performance tips
Preload critical routes: Preload routes users are likely to visit next.
Next steps
TanStack Start
Full-stack framework with SSR
Data loading
Optimize server data fetching