# What changed in @react-router/dev

> 50 changes in @react-router/dev 7 to 8 from its official release notes, upgrade guides and advisories: 11 breaking, 4 deprecations, 1 security, 11 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/npm/@react-router/dev/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @react-router/dev 8

### Breaking changes

- API-only configuration is rejected in RSC Framework Mode. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- The flag was removed, and prerendering with the Vite Environment API is now the default. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- The flag was removed because trailing slash-aware data request URLs are now the default behavior. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- The flag was removed because the Vite Environment API is always enabled. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- The minimum supported Node.js version is now 22.22.0. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- The dev proxy export was removed; use @cloudflare/vite-plugin instead. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- The option replaces `future.v8_splitRouteModules` at the top level. It defaults to true; set it to false to keep route modules in one chunk or to "enforce" to require all routes to be splittable. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- Trailing slash-aware data request URLs are now the default behavior. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- Vite 7 or later is required, and the Vite Environment API build path is mandatory. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)
- Support for wrangler@3 as a peer dependency of @react-router/dev was dropped. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)

### Security

- Action submissions behind an HTTPS reverse proxy now construct request.url using X-Forwarded-Proto; configure proxies to overwrite client-supplied values. (8.4.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v840)

### Deprecations

- The --no-typescript flag is deprecated ahead of its removal in React Router v9. (8.3.1) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v831)

### New APIs and options

- This flag opts into application-controlled route discovery in conventional Framework Mode. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Set `ssr: "unstable_api-only"` to retain a runtime server for loaders, actions, and route discovery while disabling production document rendering; API-only builds default to lazy route discovery and support prerendered pages and data files with a SPA fallback. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Configure the origin for API-only loader, action, and route discovery requests. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- RSC Framework Mode now supports the subResourceIntegrity config option. (8.3.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v830)
- Adds a client build version virtual module for RSC. (8.3.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v830)
- Custom app/entry.ssr.tsx files can import this virtual module and pass its hashes to React's importMap render option. (8.3.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v830)
- This flag opts Node Framework mode apps into renderToReadableStream instead of renderToPipeableStream; it has no effect when an app has its own entry.server.tsx. (8.2.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v820)

### Behavior and default changes

- Non-Node Framework mode apps use a Web Streams default server entry with renderToReadableStream; apps using Node server adapter dependencies continue to use renderToPipeableStream. (8.2.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v820)
- The Vite server condition is added only for Framework mode apps that declare a Node server adapter dependency, preventing non-Node SSR runtimes from resolving Node-specific package exports by default. (8.1.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v810)

### Tooling

- Vite preview serves prerendered pages and the SPA fallback while retaining live data requests and route discovery. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Using --no-typescript no longer requires Prettier at runtime because JavaScript entry files are generated at package build time. (8.3.1) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v831)
- Restarts the dev server with --conditions=development when that condition is not already configured. (8.3.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v830)
- TypeScript 7 can now be used with this package. (8.3.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v830)
- The framework dependency installer detects nub as a supported package manager. (8.2.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v820)

### Fixes and other changes

- Dev critical CSS collection no longer registers server-only route imports as client dependencies, avoiding dependency re-optimization and full page reloads. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Prerender requests use the Vite preview server's bound address and avoid re-resolving localhost, preventing intermittent connection-refused errors. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Source maps for route modules are fixed in unstable RSC Framework Mode. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Server-only route exports are preserved in additional Vite server environments in both API-only and SSR modes. (8.5.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v850)
- Development conditions are passed as CLI flags when the dev process is relaunched. (8.4.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v840)
- Stack trace locations for split route modules are fixed when source maps are enabled in the reactRouter Vite plugin. (8.4.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v840)
- Fixes crashes under the Bun runtime when Babel default imports are already unwrapped. (8.1.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v810)
- The buildEnd hook now runs after prerendering is completed when using the new prerendering plugin. (8.1.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v810)
- Internal prerender requests to the Vite preview server use node:http instead of fetch to fix a Windows libuv assertion during prerendering. (8.0.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v800)

## @react-router/dev 7

### Breaking changes

- This unstable flag is no longer supported and errors during config resolution; use future.v8_trailingSlashAwareDataRequests instead. (7.16.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)

### Deprecations

- Future flag warnings are logged for this upcoming React Router v8 flag. (7.16.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)
- Future flag warnings are logged for this upcoming React Router v8 flag. (7.16.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)
- Future flag warnings are logged for this upcoming React Router v8 flag. (7.16.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)

### New APIs and options

- Enables middleware in Framework mode, allowing code to run before and after Response generation for a matched path. (7.0.0) — [upgrade guide](https://reactrouter.com/upgrading/v7)
- Passes the raw HTTP request to handlers instead of normalizing request.url; use the sibling url parameter for normalized routing logic. (7.0.0) — [upgrade guide](https://reactrouter.com/upgrading/v7), [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)
- Enables client-side route exports to be split into independently loaded chunks, improving performance for client-side data loading. (7.0.0) — [upgrade guide](https://reactrouter.com/upgrading/v7)
- Preserves trailing slash semantics in data request URLs, using /_.data for trailing-slash routes and the root data request. (7.0.0) — [upgrade guide](https://reactrouter.com/upgrading/v7)

### Behavior and default changes

- Framework Mode build hooks ignore external server environments and process only the app's own server build when future.v8_viteEnvironmentApi is enabled. (7.18.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7180)
- When enabled, RSC route module server exports are no longer scanned by the client dependency optimizer. (7.17.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7170)
- This is the stabilized replacement for future.unstable_trailingSlashAwareDataRequests. (7.16.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7160)

### Tooling

- Vite server.watch config is now passed to the child compiler in development mode. (7.18.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7180)
- Enables support for Vite's experimental Environment API; custom configuration relying on isSsrBuild may need to move under per-environment configuration. (7.0.0) — [upgrade guide](https://reactrouter.com/upgrading/v7)

### Fixes and other changes

- Future flag warning URLs are fixed, and each warning is logged only once. (7.17.0) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7170)
- Fixes server-build virtual module import paths when Vite base and React Router basename both match the app directory name. (7.15.1) — [release notes](https://github.com/remix-run/react-router/blob/eb5175819b00ff4077029b8d14a53e0878b6356c/packages/react-router-dev/CHANGELOG.md#v7151)
