# React Router Releases
This page lists all releases/release notes for React Router back to `v7.0.0`.
- For v6.x releases, please refer to the [v6](https://github.com/remix-run/react-router/blob/v6/CHANGELOG.md) branch
- For releases prior to v6, please refer to the [Github Releases Page](https://github.com/remix-run/react-router/releases)
We manage release notes in this file instead of the paginated Github Releases Page for 2 reasons:
- Pagination in the Github UI means that you cannot easily search release notes for a large span of releases at once
- The paginated Github interface also cuts off longer releases notes without indication in list view, and you need to click into the detail view to see the full set of release notes
Table of Contents
- [React Router Releases](#react-router-releases)
- [v8.5.1](#v851)
- [``](#await-unstable_promise)
- [v8.5.0](#v850)
- [View Transition Deprecations](#view-transition-deprecations)
- [API-only Mode (unstable)](#api-only-mode-unstable)
- [Custom Fetch and Request Metadata (unstable)](#custom-fetch-and-request-metadata-unstable)
- [Application-Controlled Route Discovery (unstable)](#application-controlled-route-discovery-unstable)
- [v8.4.0](#v840)
- [Reduced Route Component Re-renders](#reduced-route-component-re-renders)
- [More Efficient Route Matching (unstable)](#more-efficient-route-matching-unstable)
- [v8.3.1](#v831)
- [v8.3.0](#v830)
- [RSC Entry Updates](#rsc-entry-updates)
- [v8.2.0](#v820)
- [Web Streams Default Server Entry](#web-streams-default-server-entry)
- [v8.1.0](#v810)
- [Agent Skills Installation via `create-react-router`](#agent-skills-installation-via-create-react-router)
- [Observability Metadata](#observability-metadata)
- [v8.0.1](#v801)
- [v8.0.0](#v800)
- [Baseline Support](#baseline-support)
- [Adopted Future Flag Behavior](#adopted-future-flag-behavior)
- [Removed `react-router-dom`](#removed-react-router-dom)
- [Removed deprecated `meta` `data` fields](#removed-deprecated-meta-data-fields)
- [Cloudflare Vite Plugin](#cloudflare-vite-plugin)
- [`@react-router/architect` `useRequestContextDomainName`](#react-routerarchitect-userequestcontextdomainname)
- [Pre-rendering Flow](#pre-rendering-flow)
- [React Router v7 Releases](#react-router-v7-releases)
- [v7.18.0](#v7180)
- [CSRF Check Logic Fix](#csrf-check-logic-fix)
- [v7.17.0](#v7170)
- [v7.16.0](#v7160)
- [v7.15.1](#v7151)
- [v7.15.0](#v7150)
- [Stabilizations](#stabilizations)
- [Route matching optimizations](#route-matching-optimizations)
- [v7.14.2](#v7142)
- [v7.14.1](#v7141)
- [v7.14.0](#v7140)
- [v7.13.2](#v7132)
- [Pass-through Requests (unstable)](#pass-through-requests-unstable)
- [Route handlers/middleware `unstable_url` parameter](#route-handlersmiddleware-unstable_url-parameter)
- [v7.13.1](#v7131)
- [URL Masking (unstable)](#url-masking-unstable)
- [v7.13.0](#v7130)
- [v7.12.0](#v7120)
- [v7.11.0](#v7110)
- [`vite preview` Support](#vite-preview-support)
- [Stabilized Client-side `onError`](#stabilized-client-side-onerror)
- [Call-site Revalidation Opt-out (unstable)](#call-site-revalidation-opt-out-unstable)
- [v7.10.1](#v7101)
- [v7.10.0](#v7100)
- [Stabilized `future.v8_splitRouteModules`](#stabilized-futurev8_splitroutemodules)
- [Stabilized `future.v8_viteEnvironmentApi`](#stabilized-futurev8_viteenvironmentapi)
- [Stabilized `fetcher.reset()`](#stabilized-fetcherreset)
- [Stabilized `DataStrategyMatch.shouldCallHandler()`](#stabilized-datastrategymatchshouldcallhandler)
- [v7.9.6](#v796)
- [v7.9.5](#v795)
- [Instrumentation (unstable)](#instrumentation-unstable)
- [v7.9.4](#v794)
- [`useRoute()` (unstable)](#useroute-unstable)
- [v7.9.3](#v793)
- [v7.9.2](#v792)
- [RSC Framework Mode (unstable)](#rsc-framework-mode-unstable)
- [Fetcher Reset (unstable)](#fetcher-reset-unstable)
- [v7.9.1](#v791)
- [v7.9.0](#v790)
- [Stable Middleware and Context APIs](#stable-middleware-and-context-apis)
- [v7.8.2](#v782)
- [v7.8.1](#v781)
- [v7.8.0](#v780)
- [Consistently named `loaderData` values](#consistently-named-loaderdata-values)
- [Improvements/fixes to the middleware APIs (unstable)](#improvementsfixes-to-the-middleware-apis-unstable)
- [v7.7.1](#v771)
- [v7.7.0](#v770)
- [Unstable RSC APIs](#unstable-rsc-apis)
- [v7.6.3](#v763)
- [v7.6.2](#v762)
- [v7.6.1](#v761)
- [v7.6.0](#v760)
- [`routeDiscovery` Config Option](#routediscovery-config-option)
- [Automatic Types for Future Flags](#automatic-types-for-future-flags)
- [v7.5.3](#v753)
- [v7.5.2](#v752)
- [v7.5.1](#v751)
- [v7.5.0](#v750)
- [`route.lazy` Object API](#routelazy-object-api)
- [v7.4.1](#v741)
- [v7.4.0](#v740)
- [v7.3.0](#v730)
- [v7.2.0](#v720)
- [Type-safe `href` utility](#type-safe-href-utility)
- [Prerendering with a SPA Fallback](#prerendering-with-a-spa-fallback)
- [Allow a root `loader` in SPA Mode](#allow-a-root-loader-in-spa-mode)
- [v7.1.5](#v715)
- [v7.1.4](#v714)
- [v7.1.3](#v713)
- [v7.1.2](#v712)
- [v7.1.1](#v711)
- [v7.1.0](#v710)
- [v7.0.2](#v702)
- [v7.0.1](#v701)
- [v7.0.0](#v700)
## v8.5.1
Date: 2026-10-27
### What's Changed
#### ``
In Data and Framework modes, including their unstable RSC variants, client components can opt into React's `use()` API with ``. This keeps support for render-prop children, `useAsyncValue`, and `useAsyncError` while accepting promise-like values without modifying the source promise.
> **Warning:** The `unstable_promise` prop is unstable and may change in minor or patch releases.
```tsx
import { Suspense } from "react";
import { Await } from "react-router";
Loading reviews...
}>
Could not load reviews}
>
{(reviews) => }
;
```
Pass exactly one of `resolve` or `unstable_promise`; the existing `resolve` API remains supported. With `unstable_promise`, `errorElement` handles promise rejections, while errors thrown when rendering children bubble to the nearest React error boundary.
Streamed promises are also tracked during decoding so settled server content stays visible during hydration updates when using either `` API or `React.use()` directly.
### Patch Changes
- `react-router` - Fix `URIError: URI malformed` when an API-only (`ssr: "unstable_api-only"`) server or an `ssr: false` dev server receives a URL path with a malformed percent-encoding ([#15649](https://github.com/remix-run/react-router/pull/15649))
- `react-router` - Bound server route manifest processing for paths with expensive route expansion ([#15703](https://github.com/remix-run/react-router/pull/15703))
- Fall back to initial route discovery during server rendering and RSC document/data requests
- Account for the number and depth of candidate branches when using regex matching
- `react-router` - Encode commas within paths sent to the lazy route discovery manifest endpoint so routes with commas in their paths are discovered correctly ([#15640](https://github.com/remix-run/react-router/pull/15640))
- `react-router` - Fix fetcher revalidation errors bubbling to the root error boundary instead of the nearest boundary above the route that owns the fetcher ([#15676](https://github.com/remix-run/react-router/pull/15676))
- `react-router` - Avoid duplicate history entries when posting a `