Should I upgrade to React Router 6 to 7 Migration with Node 20 Floor and Framework Mode Changes now?

Teams on React Router 6 need to decide whether to move to v7 now, defer until runtime prerequisites are met, or use the upgrade as the point to adopt React Router's framework features.

Stay on latest v6.x with all v7 future flags first, unless you're already standardized on Node 20 and ready to pay migration cost now.

Blockers

Who this is for

Candidates

Stay on latest v6.x first and enable all v7 future flags

As of 2026-03-30, the React Router docs list v6.30.3 for the v6 line and say the v7 upgrade has no breaking changes if all future flags are already enabled. The official v6 upgrade guide explicitly recommends updating to the latest v6.x first so you get the latest future flags and console warnings. React Router v7 requires Node 20, React 18, and React DOM 18, so this path is the lowest-risk choice if your fleet is not yet on that floor. It also lets you absorb behavior changes such as relative splat routing, transition handling, fetcher persistence, form method normalization, partial hydration, and action error revalidation before the package swap.

When to choose

Use this when your main blocker is environment readiness, especially if CI, hosting, or internal tooling is still pinned below Node 20. The decisive factor is whether you want to de-risk the migration incrementally before touching package names and removed APIs.

Tradeoffs

Lowest immediate churn and easiest rollback path, but you stay on the older package layout and delay the consolidated v7 package model.

Cautions

Do not treat this as zero-work. The v6 future flags can require route-tree changes, relative link updates under splat routes, and cleanup of incorrect in-component React.lazy usage before the eventual v7 cutover.

Upgrade to v7 now but stay in library or data mode

As of 2026-03-30, the official docs list React Router 7.13.2 as latest. In v7, the project collapses `react-router-dom`, `@remix-run/react`, `@remix-run/server-runtime`, and `@remix-run/router` into `react-router`; `react-router-dom` is still published as a re-export to ease migration, but the v6 upgrade guide says you only need `react-router` in `package.json`. The v7 changelog also documents removed APIs including `json`, `defer`, and several unstable upload helpers, plus the removal of `installGlobals` because v7 now assumes a modern runtime with native fetch support. DOM-specific imports such as `RouterProvider` and `HydratedRouter` move to `react-router/dom`.

When to choose

Use this when you can already standardize on Node 20 and React 18, but you do not want the structural migration cost of framework mode. The decisive factor is that you want the supported v7 package layout and can handle import and API cleanup now.

Tradeoffs

You get the package consolidation immediately and stay close to the official current line, but you take import churn, API removals, and runtime-floor enforcement in one move.

Cautions

Common runtime-agnostic APIs should now come from `react-router`, while runtime-specific APIs stay in adapter packages such as `@react-router/node`. If you rely on `json`, `defer`, or old adapter re-exports, you need code changes before the upgrade is complete.

Use the v7 migration to adopt framework mode with the Vite plugin

React Router v7 is positioned as a multi-strategy router that can be used as a full React framework, not just a routing library. As of 2026-03-30, the framework installation and adoption docs describe `create-react-router`, the `@react-router/dev` Vite plugin, route modules, automatic route code-splitting, optional static pre-rendering, and optional server rendering. The framework adoption guide says the plugin adds loaders, actions, automatic data revalidation, type-safe route modules, and automatic scroll restoration. Official prerequisites for the framework plugin path include Node.js 20+ when using Node as the runtime and Vite 5+.

When to choose

Use this when you already need file-based route structure, route-module conventions, generated types, or a path to SSR and pre-rendering. The decisive factor is whether you want framework capabilities badly enough to accept a larger app-shape migration now.

Tradeoffs

This gives the biggest long-term platform shift and the most first-party features, but it has the highest migration cost because it changes build tooling, entry points, config files, and route organization.

Cautions

The adoption guide explicitly says the initial setup requires the most work. In framework mode, the changelog also notes lazy route discovery behavior around manifest mismatches after deploys, which can trigger document reloads for undiscovered routes during active sessions.

Facts updated: 2026-03-30
Published: 2026-04-03

Try with your AI agent

$ npm install -g pocketlantern
$ pocketlantern init
# Restart Claude Code, Cursor, or your MCP client, then ask:
# "Should I upgrade to React Router 6 to 7 Migration with Node 20 Floor and Framework Mode Changes now?"
Missing something? Request coverage