Vite Plugin
The React Router Vite plugin integrates React Router with Vite to enable Framework Mode with server-side rendering, type generation, and optimized builds.Installation
Basic Configuration
Add the plugin to yourvite.config.ts:
Plugin Features
The Vite plugin provides:- Server-side rendering (SSR) - Automatic SSR setup and configuration
- Route-based code splitting - Automatic code splitting by route
- Type generation - TypeScript types generated from your routes
- Development server - Hot module replacement (HMR) for routes
- Build optimization - Optimized production builds
- Server bundles - Split server code into multiple bundles
Configuration Options
Configure React Router behavior inreact-router.config.ts:
Directory Structure
The plugin expects this structure:Virtual Modules
The plugin creates virtual modules for internal use:virtual:react-router/server-build- Server build exportsvirtual:react-router/server-manifest- Server-side route manifestvirtual:react-router/browser-manifest- Client-side route manifest
Build Process
Development
Start the dev server:- Creates a Vite dev server
- Sets up HMR for route modules
- Generates TypeScript types on file changes
- Handles SSR requests automatically
Production
Build for production:- Builds the client bundle with all assets
- Builds the server bundle(s) for SSR
- Generates the route manifest
- Optimizes and code-splits by route
- Moves server-only assets to client directory
Environment API
With Vite 6+, you can enable the Environment API:- Better multi-environment support
- Improved server bundle handling
- More efficient builds
Route Module Optimization
The plugin automatically removes server-only exports from client bundles: Server-only exports:loaderactionmiddlewareheaders
default(component)ErrorBoundaryHydrateFallbackLayoutclientLoaderclientActionclientMiddlewarehandlemetalinksshouldRevalidate
CSS Handling
CSS Code Splitting
By default, CSS is code-split by route:vite.config.ts:
CSS Modules
CSS modules are fully supported:Source Maps
Configure source maps:vite.config.ts: