---
title: "React Router v8 stuft seine Future Flags zu Standardwerten hoch, wird rein ESM und legt `react-router-dom` ab"
description: "React Router v8.0.0 (17. Juni 2026) ist das erste Major Release unter dem Open-Governance-Modell des Projekts und das erste in einem geplanten Jahresrhythmus. Jedes `future.v8_*`-Flag aus v7 wird zum Standard (immer aktiviertes Middleware, Pass-Through-Requests, die Vite-Environment-API, Route-Modul-Splitting), die Baseline steigt auf Node 22.22+, React 19.2.7+ und Vite 7+, alle Pakete erscheinen rein als ESM mit ES2022 als Ziel, `react-router-dom` wird entfernt und die Node-Adapter wechseln zu einem von Remix gepflegten Fetch-Server, während `create-react-router` seinen Fetch-Polyfill durch nativen `fetch` ersetzt."
date: 2026-06-19
image: "/images/heroes/2026-06-19--react-router-v8-major-release-future-flags-esm.png"
author: lschvn
tags: ["frameworks", "tooling", "typescript"]
tldr:
  - "React Router v8.0.0 erschien am 17. Juni 2026, gefolgt von einem v8.0.1-Patch am 18. Es ist das erste Major Release unter dem Open-Governance-Modell des Projekts und das erste in einem geplanten Jahresrhythmus, der auf das End-of-Life-Fenster von Node 20 abgestimmt ist und v9 auf etwa Mai 2027 zielt, gemeinsam mit dem EOL von Node 22. Die API-Entwicklungsstrategie stuft jedes `future.v8_*`-Flag zum Standardwert hoch, sodass Apps, die diese Flags in v7 übernommen hatten, kaum eine API-Änderung bemerken."
  - "Die Baseline steigt auf Node 22.22.0+, React 19.2.7+ und Vite 7+. Alle veröffentlichten Pakete sind nun rein ESM, wobei die `target`/`lib`-Felder des tsconfig von ES2020 auf ES2022 angehoben wurden. `react-router-dom` wird entfernt (importieren Sie aus `react-router` und `react-router/dom`), die als veraltet markierten `data`-Felder von `meta` verschwinden zugunsten von `loaderData`, und der Cloudflare-Dev-Proxy sowie das interne `hasErrorBoundary`-Feld werden abgeschafft."
  - "Middleware ist nun immer aktiviert, was bedeutet, dass `context` immer eine `RouterContextProvider`-Instanz ist und `getLoadContext` eine solche zurückgeben muss statt eines einfachen Objekts. Die `node`- und `serve`-Adapter wechseln von `@mjackson/node-fetch-server` zu `@remix-run/node-fetch-server`, und `create-react-router` ersetzt `@remix-run/web-fetch` durch nativen `fetch`, was stillschweigend die Unterstützung für `HTTPS_PROXY` entfernt. Der Paket-Build ist von `tsup` auf `tsdown` unter TypeScript 6 umgestiegen."
faq:
  - question: "Ist das Upgrade auf React Router v8 ein Breaking Change?"
    answer: "Nur wenn Sie die Future Flags von v7 übersprungen haben. Die API-Entwicklungsstrategie von React Router liefert Breaking Changes zuerst hinter `future.v8_*`-Flags aus, sodass Apps, die alle aktiven Flags in v7 übernommen hatten, in v8 fast keine Änderung der API-Oberfläche sehen, da diese Flags entfernt (oder auf Top-Level-Konfiguration gehoben) und ihr Verhalten zum Standard werden. Die bedingungslosen Brüche sind die Anhebungen der Baseline (Node 22.22+, React 19.2.7+, Vite 7+), die Entfernung von `react-router-dom`, die Entfernung der als veraltet markierten `data`-Felder von `meta` zugunsten von `loaderData` und der Vertrag des immer aktivierten Middlewares, bei dem `getLoadContext` einen `RouterContextProvider` statt eines einfachen Objekts zurückgeben muss."
  - question: "Warum benötigt React Router v8 Node 22.22, React 19.2.7 und Vite 7?"
    answer: "v8 legt eine neue Baseline-Politik fest: Es unterstützt alle Active-LTS-Node-Versionen sowie nur den neuesten Minor-Zweig von Maintenance-LTS, wodurch das Projekt bei einem Security-Patch schnell die Maintenance-LTS-Untergrenze anheben kann (wie bei den [Node.js-Security-Releases vom Juni 2026](/articles/2026-06-18--node-js-june-2026-security-releases)) und zurückportierte Active-LTS-Features übernehmen kann. Für den Start ist diese Untergrenze Node 22.22.0+, neben React 19.2.7+ und Vite 7+. React 19.2.7+ und Vite 7+ werden benötigt, weil v8 die Vite-Environment-API (zuvor ein Flag) bedingungslos nutzt und ein modernes React ansteuert."
  - question: "Was ist mit `react-router-dom` in v8 passiert?"
    answer: "Es wurde entfernt. In v7 wurden die DOM-APIs in `react-router/dom` zusammengefasst, und `react-router-dom` wurde nur als Re-Export-Shim behalten, damit bestehende v6-Importe weiterhin funktionierten. In v8 fällt der Shim weg, daher muss jeder verbleibende `react-router-dom`-Import verschoben werden: `RouterProvider` und `HydratedRouter` stammen aus `react-router/dom`, alles andere aus `react-router`."
  - question: "Ist React Router v8 rein ESM?"
    answer: "Ja. Die veröffentlichten Pakete unter `packages/` wurden auf rein ESM umgestellt und die `target`/`lib`-Felder des tsconfig wurden durchgehend von ES2020 auf ES2022 angehoben. Rein ESM zu sein hat zudem die Adapter-Neuschreibungen ermöglicht: `@react-router/node` und `@react-router/serve` konnten `@mjackson/node-fetch-server` zugunsten von `@remix-run/node-fetch-server` ablegen, und `create-react-router` konnte `@remix-run/web-fetch` durch den nativen `fetch` von Node ersetzen."
  - question: "Was bedeutet es, dass Middleware in v8 immer aktiviert ist?"
    answer: "Das Flag `future.v8_middleware` ist entfernt und Middleware läuft bedingungslos. Der `context`, der an `loader`, `action` und `middleware` übergeben wird, ist immer eine `RouterContextProvider`-Instanz, daher muss `getLoadContext` in einem eigenen Server einen `RouterContextProvider` zurückgeben statt eines einfachen Objekts. Der Typ `MiddlewareEnabled` (zuvor `UNSAFE_MiddlewareEnabled`) und der Trick der Modul-Erweiterung `interface Future { v8_middleware: true }` zum Typisieren von `context` im Data Mode werden nicht mehr benötigt."
---

[React Router v8.0.0](https://github.com/remix-run/react-router/releases/tag/react-router%408.0.0) erschien am 17. Juni 2026, gefolgt von einem v8.0.1-Patch am darauffolgenden Tag. Es ist das erste Major Release unter dem [Open-Governance-Modell](https://remix.run/blog/rr-governance) des Projekts und das erste in einem geplanten Jahresrhythmus, der bewusst auf das End-of-Life-Fenster von Node 20 abgestimmt ist. Node 22 selbst erreicht [laut Plan](https://nodejs.org/en/about/previous-releases) etwa im Mai 2027 sein End of Life, was das Ziel ist, das das Team für v9 vorsieht. Die Hauptsache ist weniger ein einzelnes Feature als vielmehr eine Höherstufung: Die Aufgabe der API-Entwicklungsstrategie besteht darin, Major Releases langweilig zu machen, indem Breaking Changes früh hinter [Future Flags](https://reactrouter.com/upgrading/v7) gelandet werden, und v8 ist das Release, in dem jedes `future.v8_*`-Flag aus v7 zum Standard wird.

## Future Flags werden zu Standardwerten hochgestuft

Wenn Sie in v7 alle aktiven Future Flags übernommen hatten, ist die API-Oberfläche von v8 weitgehend unverändert, da diese Flags entfernt oder auf Top-Level-Konfiguration gehoben werden und ihr Verhalten nun bedingungslos ist. Die hochgestuften Flags:

- `future.v8_trailingSlashAwareDataRequests` entfällt; Data-Request-URLs, die Trailing-Slashes beachten, sind der Standard.
- `future.v8_passThroughRequests` entfällt; die eingehende rohe `request` wird nun immer an `loader` und `action` durchgereicht. Verwenden Sie den Parameter `url`, wenn Sie die normalisierte URL ohne React-Router-Interna wie `.data`-Suffixe und `_routes`-Search-Params möchten.
- `future.v8_middleware` entfällt; Middleware läuft immer. Der `context`, der an Loader, Actions und Middleware übergeben wird, ist immer ein `RouterContextProvider`, `getLoadContext` in einem eigenen Server muss einen solchen zurückgeben statt eines einfachen Objekts, der Typ `MiddlewareEnabled` wird entfernt, und der Trick der Modul-Erweiterung `interface Future { v8_middleware: true }` wird zum Typisieren von `context` im Data Mode nicht mehr benötigt.
- `future.v8_viteEnvironmentApi` entfällt; der Build-Pfad über die Vite-Environment-API ist verpflichtend, was erklärt, warum v8 [Vite 7+](/articles/2026-06-15--vite-8-1-beta-wasm-esm-chunk-importmap) voraussetzt und warum die alte Pre-Rendering-Implementierung durch den Vite-Preview-Server-Fluss ersetzt wurde.
- `future.v8_splitRouteModules` wird zu einer Top-Level-Konfigurationsoption `splitRouteModules` und ist standardmäßig `true`. Setzen Sie sie auf `false`, um Route-Module in einem einzigen Chunk zu behalten, oder auf `"enforce"`, um zu verlangen, dass jede Route splittbar ist.

Das Bild von der „Höherstufung" ist die eigentliche Geschichte. Future Flags erlauben dem Team, einen Breaking Change in einem v7-Minor zu landen, ihn von Nutzern übernehmen und Feedback geben zu lassen und dann in der Major den Standard umzuschalten, mit einem Jahr Validierung in Produktion im Rücken. v8 ist das Release, das diese Pipeline einlöst.

## Neue Baselines: Node 22.22, React 19.2.7, Vite 7 und rein ESM

v8 legt eine neue Baseline-Politik fest, die sich genau zu lesen lohnt. React Router unterstützt nun offiziell alle Active-LTS-Node-Versionen sowie nur den neuesten Minor-Zweig von Maintenance-LTS, sodass es die Maintenance-LTS-Untergrenze schnell anheben kann, wenn ein Security-Patch erscheint (wie bei den [Node.js-Security-Releases vom Juni 2026](/articles/2026-06-18--node-js-june-2026-security-releases)) und zurückportierte Active-LTS-Features übernehmen kann. Für den Start ist diese Untergrenze Node 22.22.0+, neben React 19.2.7+ und Vite 7+.

Um die Bibliothek zu modernisieren, ist jedes veröffentlichte Paket nun rein ESM und die `target`/`lib`-Felder des tsconfig wurden durchgehend von ES2020 auf ES2022 angehoben. Diese Entscheidung für rein ESM ist nicht kosmetisch: Sie hat die untenstehenden Adapter-Neuschreibungen erst ermöglicht, weil die Adapter nun direkt andere rein-ESM-Pakete konsumieren konnten.

## `react-router-dom` ist weg, und mit ihm einige als veraltet markierte APIs

Die sichtbarste Entfernung ist [`react-router-dom`](https://github.com/remix-run/react-router/pull/15076). In v7 wurden die DOM-APIs in `react-router/dom` zusammengefasst, und `react-router-dom` wurde nur als Re-Export-Shim behalten, damit bestehende v6-Importe weiter funktionierten. Dieser Shim fällt in v8 weg. Jeder verbleibende `react-router-dom`-Import muss verschoben werden: `RouterProvider` und `HydratedRouter` stammen aus `react-router/dom`, alles andere aus `react-router`.

Drei weitere Entfernungen runden die Liste ab. Die als veraltet markierten `data`-Felder, die an die `meta`-Funktionen der Route-Module übergeben werden, entfallen; verwenden Sie stattdessen `loaderData` auf `MetaArgs` und auf jedem Eintrag in `MetaArgs.matches` ([#14931](https://github.com/remix-run/react-router/pull/14931)). Der Cloudflare-Dev-Proxy unter `@react-router/dev/vite/cloudflare` wird zugunsten von [`@cloudflare/vite-plugin`](https://developers.cloudflare.com/workers/vite-plugin/) entfernt, was auch `wrangler@3` als Peer-Dependency von `@react-router/dev` ablegt. Und das interne `hasErrorBoundary`-Feld, das auf `router.routes` injiziert wurde, entfällt; der Router leitet Error Boundaries nun direkt ab, und `hasErrorBoundary` wird weder auf `RouteObject`, `DataRouteObject`, den JSX-Props von `<Route>` noch in `lazy`-Route-Definitionen akzeptiert ([#15074](https://github.com/remix-run/react-router/pull/15074)).

## Adapter-Interna: nativer Fetch, node-fetch-server, tsdown, TypeScript 6

Die Adapter-Schicht erhielt eine leise Neuschreibung, die für jeden zählt, der React Router auf Node betreibt oder Apps mit `create-react-router` generiert. `@react-router/node` und `@react-router/serve` wechseln von `@mjackson/node-fetch-server` zu `@remix-run/node-fetch-server`, und `create-react-router` ersetzt `@remix-run/web-fetch` durch den nativen `fetch` von Node. Der praktische Nebeneffekt: `create-react-router` unterstützt die Umgebungsvariable `HTTPS_PROXY`, die der alte auf `node-fetch` basierende Polyfill honoriert hat, nicht mehr ([#14929](https://github.com/remix-run/react-router/pull/14929)), was gut zu wissen ist, wenn Ihre CI hinter einem Unternehmens-Proxy sitzt.

Auf der Build-Seite ist der Paket-Build von `tsup` auf `tsdown` migriert und das TypeScript-Werkzeug auf TypeScript 6 umgestiegen, während einzelne Moduldateien in den veröffentlichten Artefakten erhalten blieben, sodass öffentliche APIs und dokumentierte Importpfade unverändert bleiben ([#15092](https://github.com/remix-run/react-router/pull/15092)). `@react-router/dev` hat `cookie` und `set-cookie-parser` durch `cookie-es` ersetzt, die Abhängigkeit `vite-node` zugunsten der nativen Module-Runner-APIs von Vite entfernt und eine lange Reihe von Abhängigkeiten aktualisiert (Babel auf 7.29, `react-refresh` auf 0.18, `es-module-lexer` auf 2.1, `chokidar` auf 5). Der Express-Adapter benötigt nun Express `^4.22.2 || ^5`, und `@react-router/serve` ist auf Express 5.2.1 umgestiegen.

## Der Upgrade-Pfad

Für die meisten Teams ist das Upgrade mechanisch, wenn die Future Flags von v7 bereits aktiviert waren. Die Arbeit besteht darin: Node auf 22.22+, React auf 19.2.7+ und Vite auf 7+ anheben; verbleibende `react-router-dom`-Importe ersetzen; `data` in `meta`-Funktionen zu `loaderData` umbenennen; und sicherstellen, dass `getLoadContext` einen `RouterContextProvider` zurückgibt. Das v7.18.0-Release vom 16. Juni hat außerdem einen [Fix der CSRF-Prüflogik](https://github.com/remix-run/react-router/releases/tag/react-router%407.18.0) geliefert, der hinter einem Reverse Proxy ein potenzieller „brechender Bugfix" ist: Die Prüfung liest nun den `host` aus der Request-URL statt aus HTTP-Headern, sodass `@react-router/serve`- oder `@react-router/express`-Apps ohne aktiviertes `trust proxy` den internen Host möglicherweise zu `allowedActionOrigins` hinzufügen müssen. Testen Sie Mutations-Requests im Rahmen des Upgrades.

v8.0.1 (18. Juni) ist ein einzelner Bereinigungs-Patch, der den veralteten `AppLoadContext`-Typ-Export entfernt, der aus v7 übrig geblieben war, da der Request-Context nun immer über `RouterContextProvider` läuft ([#15207](https://github.com/remix-run/react-router/pull/15207)). Er erscheint einen Tag nach dem Major, das selbst in derselben Woche erscheint, in der [vue-router seine v5-Linie erreicht](/articles/2026-04-06--nuxt-4-4-vue-router-v5-typed-layout-props-28x-faster-dev-routing). Der Jahresrhythmus und die Future-Flag-Pipeline sorgen dafür, dass das nächste Major diesem hier stark ähneln dürfte: Die meisten Brüche werden bereits in einem v8-Minor geliefert worden sein, und v9 wird im Wesentlichen die Standardwerte umschalten.
