diff --git a/.changeset/big-drinks-invite.md b/.changeset/big-drinks-invite.md
deleted file mode 100644
index 89c0ab635e..0000000000
--- a/.changeset/big-drinks-invite.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@react-router/dev": patch
----
-
-Introduce a `prerender.unstable_concurrency` option, to support running the prerendering concurrently, potentially speeding up the build.
diff --git a/.changeset/cuddly-dodos-report.md b/.changeset/cuddly-dodos-report.md
deleted file mode 100644
index 55c8a6cec2..0000000000
--- a/.changeset/cuddly-dodos-report.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-"@react-router/dev": patch
-"react-router": patch
----
-
-Move RSCHydratedRouter and utils to `/dom` export.
diff --git a/.changeset/hip-foxes-repeat.md b/.changeset/hip-foxes-repeat.md
deleted file mode 100644
index a146c2e380..0000000000
--- a/.changeset/hip-foxes-repeat.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@react-router/dev": patch
----
-
-Ensure route navigation doesn't remove CSS `link` elements used by dynamic imports
diff --git a/.changeset/khaki-dingos-kiss.md b/.changeset/khaki-dingos-kiss.md
deleted file mode 100644
index 0890188dc8..0000000000
--- a/.changeset/khaki-dingos-kiss.md
+++ /dev/null
@@ -1,22 +0,0 @@
----
-"react-router": patch
----
-
-useRoute: return type-safe `handle`
-
-For example:
-
-```ts
-// app/routes/admin.tsx
-const handle = { hello: "world" };
-```
-
-```ts
-// app/routes/some-other-route.tsx
-export default function Component() {
- const admin = useRoute("routes/admin");
- if (!admin) throw new Error("Not nested within 'routes/admin'");
- console.log(admin.handle);
- // ^? { hello: string }
-}
-```
diff --git a/.changeset/nice-donuts-obey.md b/.changeset/nice-donuts-obey.md
deleted file mode 100644
index 18fa7ad247..0000000000
--- a/.changeset/nice-donuts-obey.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"react-router": patch
----
-
-Ensure action handlers run for routes with middleware even if no loader is present
diff --git a/.changeset/pre.json b/.changeset/pre.json
deleted file mode 100644
index fdae659c81..0000000000
--- a/.changeset/pre.json
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- "mode": "exit",
- "tag": "pre",
- "initialVersions": {
- "integration": "0.0.0",
- "integration-cloudflare-dev-proxy-template": "0.0.0",
- "integration-rsc-parcel": "0.0.0",
- "integration-rsc-vite": "0.0.0",
- "integration-rsc-vite-framework": "0.0.0",
- "integration-vite-5-template": "0.0.0",
- "integration-vite-6-template": "0.0.0",
- "integration-vite-7-beta-template": "0.0.0",
- "integration-vite-plugin-cloudflare-template": "0.0.0",
- "integration-vite-rolldown-template": "0.0.0",
- "create-react-router": "7.9.4",
- "react-router": "7.9.4",
- "@react-router/architect": "7.9.4",
- "@react-router/cloudflare": "7.9.4",
- "@react-router/dev": "7.9.4",
- "react-router-dom": "7.9.4",
- "@react-router/express": "7.9.4",
- "@react-router/fs-routes": "7.9.4",
- "@react-router/node": "7.9.4",
- "@react-router/remix-routes-option-adapter": "7.9.4",
- "@react-router/serve": "7.9.4",
- "@playground/framework": "0.0.0",
- "@playground/framework-express": "0.0.0",
- "@playground/framework-rolldown-vite": "0.0.0",
- "@playground/framework-spa": "0.0.0",
- "@playground/framework-vite-5": "0.0.0",
- "@playground/framework-vite-7-beta": "0.0.0",
- "@playground/rsc-parcel": "0.0.0",
- "@playground/rsc-vite": "0.0.0",
- "@playground/rsc-vite-framework": "0.0.0",
- "@playground/split-route-modules": "0.0.0",
- "@playground/split-route-modules-spa": "0.0.0",
- "@playground/vite-plugin-cloudflare": "0.0.0"
- },
- "changesets": [
- "big-drinks-invite",
- "cuddly-dodos-report",
- "hip-foxes-repeat",
- "khaki-dingos-kiss",
- "nice-donuts-obey",
- "serious-garlics-push",
- "shy-eels-drum"
- ]
-}
diff --git a/.changeset/serious-garlics-push.md b/.changeset/serious-garlics-push.md
deleted file mode 100644
index 7755ca52c3..0000000000
--- a/.changeset/serious-garlics-push.md
+++ /dev/null
@@ -1,13 +0,0 @@
----
-"react-router": patch
----
-
-Add `unstable_instrumentations` API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches
-
-- Framework Mode:
- - `entry.server.tsx`: `export const unstable_instrumentations = [...]`
- - `entry.client.tsx`: ``
-- Data Mode
- - `createBrowserRouter(routes, { unstable_instrumentations: [...] })`
-
-This also adds a new `unstable_pattern` parameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e., `/blog/:slug`) which is useful for aggregating performance metrics by route
diff --git a/.changeset/shy-eels-drum.md b/.changeset/shy-eels-drum.md
deleted file mode 100644
index 2c325638fa..0000000000
--- a/.changeset/shy-eels-drum.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-"@react-router/dev": patch
----
-
-Typegen: only register route module types for routes within the app directory
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 50d1898243..262c5fb008 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -385,7 +385,7 @@ Date: 2025-10-27
#### Instrumentation (unstable)
-This release adds new `unstable_instrumentation` APIs that will allow you to add runtime instrumentation logic to various aspects of your application (server handler, client navigations/fetches, loaders, actions, middleware, `route.lazy`). For more information, please see the [docs](https://reactrouter.com/dev/how-to/instrumentation).
+This release adds new `unstable_instrumentation` APIs that will allow you to add runtime instrumentation logic to various aspects of your application (server handler, client navigations/fetches, loaders, actions, middleware, `route.lazy`). For more information, please see the [docs](https://reactrouter.com/7.9.5/how-to/instrumentation).
### Patch Changes
diff --git a/integration/CHANGELOG.md b/integration/CHANGELOG.md
index 2cf67d87b7..6fccf850d7 100644
--- a/integration/CHANGELOG.md
+++ b/integration/CHANGELOG.md
@@ -5,6 +5,7 @@
### Minor Changes
- Unstable Vite support for Node-based Remix apps ([#7590](https://github.com/remix-run/remix/pull/7590))
+
- `remix build` 👉 `vite build && vite build --ssr`
- `remix dev` 👉 `vite dev`
diff --git a/packages/create-react-router/CHANGELOG.md b/packages/create-react-router/CHANGELOG.md
index 880c0fa00c..659c81c8fb 100644
--- a/packages/create-react-router/CHANGELOG.md
+++ b/packages/create-react-router/CHANGELOG.md
@@ -1,6 +1,6 @@
# `create-react-router`
-## 7.9.5-pre.0
+## 7.9.5
## 7.9.4
diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json
index 2fd3075972..07e9001fad 100644
--- a/packages/create-react-router/package.json
+++ b/packages/create-react-router/package.json
@@ -1,6 +1,6 @@
{
"name": "create-react-router",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Create a new React Router app",
"homepage": "https://reactrouter.com",
"bugs": {
diff --git a/packages/react-router-architect/CHANGELOG.md b/packages/react-router-architect/CHANGELOG.md
index 24cf9f27ed..4b141ef806 100644
--- a/packages/react-router-architect/CHANGELOG.md
+++ b/packages/react-router-architect/CHANGELOG.md
@@ -1,12 +1,12 @@
# `@react-router/architect`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
- - `@react-router/node@7.9.5-pre.0`
+ - `react-router@7.9.5`
+ - `@react-router/node@7.9.5`
## 7.9.4
@@ -47,6 +47,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -270,6 +271,7 @@
### Major Changes
- For Remix consumers migrating to React Router, the `crypto` global from the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) is now required when using cookie and session APIs. This means that the following APIs are provided from `react-router` rather than platform-specific packages: ([#11837](https://github.com/remix-run/react-router/pull/11837))
+
- `createCookie`
- `createCookieSessionStorage`
- `createMemorySessionStorage`
@@ -278,6 +280,7 @@
For consumers running older versions of Node, the `installGlobals` function from `@remix-run/node` has been updated to define `globalThis.crypto`, using [Node's `require('node:crypto').webcrypto` implementation.](https://nodejs.org/api/webcrypto.html)
Since platform-specific packages no longer need to implement this API, the following low-level APIs have been removed:
+
- `createCookieFactory`
- `createSessionStorageFactory`
- `createCookieSessionStorageFactory`
diff --git a/packages/react-router-architect/package.json b/packages/react-router-architect/package.json
index 6cfb165a55..548429f170 100644
--- a/packages/react-router-architect/package.json
+++ b/packages/react-router-architect/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/architect",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Architect server request handler for React Router",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-cloudflare/CHANGELOG.md b/packages/react-router-cloudflare/CHANGELOG.md
index 4d177caaf3..6e43d70bc0 100644
--- a/packages/react-router-cloudflare/CHANGELOG.md
+++ b/packages/react-router-cloudflare/CHANGELOG.md
@@ -1,11 +1,11 @@
# `@react-router/cloudflare`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
+ - `react-router@7.9.5`
## 7.9.4
@@ -42,6 +42,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -240,6 +241,7 @@
- For Remix consumers migrating to React Router, all exports from `@remix-run/cloudflare-pages` are now provided for React Router consumers in the `@react-router/cloudflare` package. There is no longer a separate package for Cloudflare Pages. ([#11801](https://github.com/remix-run/react-router/pull/11801))
- For Remix consumers migrating to React Router, the `crypto` global from the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) is now required when using cookie and session APIs. This means that the following APIs are provided from `react-router` rather than platform-specific packages: ([#11837](https://github.com/remix-run/react-router/pull/11837))
+
- `createCookie`
- `createCookieSessionStorage`
- `createMemorySessionStorage`
@@ -248,6 +250,7 @@
For consumers running older versions of Node, the `installGlobals` function from `@remix-run/node` has been updated to define `globalThis.crypto`, using [Node's `require('node:crypto').webcrypto` implementation.](https://nodejs.org/api/webcrypto.html)
Since platform-specific packages no longer need to implement this API, the following low-level APIs have been removed:
+
- `createCookieFactory`
- `createSessionStorageFactory`
- `createCookieSessionStorageFactory`
diff --git a/packages/react-router-cloudflare/package.json b/packages/react-router-cloudflare/package.json
index c67ac5ea74..a17885a08d 100644
--- a/packages/react-router-cloudflare/package.json
+++ b/packages/react-router-cloudflare/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/cloudflare",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Cloudflare platform abstractions for React Router",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-dev/CHANGELOG.md b/packages/react-router-dev/CHANGELOG.md
index a03ac60ec7..e61549b084 100644
--- a/packages/react-router-dev/CHANGELOG.md
+++ b/packages/react-router-dev/CHANGELOG.md
@@ -1,6 +1,6 @@
# `@react-router/dev`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
@@ -9,9 +9,9 @@
- Ensure route navigation doesn't remove CSS `link` elements used by dynamic imports ([#14463](https://github.com/remix-run/react-router/pull/14463))
- Typegen: only register route module types for routes within the app directory ([#14439](https://github.com/remix-run/react-router/pull/14439))
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
- - `@react-router/node@7.9.5-pre.0`
- - `@react-router/serve@7.9.5-pre.0`
+ - `react-router@7.9.5`
+ - `@react-router/node@7.9.5`
+ - `@react-router/serve@7.9.5`
## 7.9.4
@@ -169,6 +169,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -911,6 +912,7 @@
```
This initial implementation targets type inference for:
+
- `Params` : Path parameters from your routing config in `routes.ts` including file-based routing
- `LoaderData` : Loader data from `loader` and/or `clientLoader` within your route module
- `ActionData` : Action data from `action` and/or `clientAction` within your route module
@@ -925,6 +927,7 @@
```
Check out our docs for more:
+
- [_Explanations > Type Safety_](https://reactrouter.com/dev/guides/explanation/type-safety)
- [_How-To > Setting up type safety_](https://reactrouter.com/dev/guides/how-to/setting-up-type-safety)
@@ -1124,6 +1127,7 @@
- Vite: Provide `Unstable_ServerBundlesFunction` and `Unstable_VitePluginConfig` types ([#8654](https://github.com/remix-run/remix/pull/8654))
- Vite: add `--sourcemapClient` and `--sourcemapServer` flags to `remix vite:build` ([#8613](https://github.com/remix-run/remix/pull/8613))
+
- `--sourcemapClient`
- `--sourcemapClient=inline`
@@ -1460,6 +1464,7 @@
- Add support for `clientLoader`/`clientAction`/`HydrateFallback` route exports ([RFC](https://github.com/remix-run/remix/discussions/7634)) ([#8173](https://github.com/remix-run/remix/pull/8173))
Remix now supports loaders/actions that run on the client (in addition to, or instead of the loader/action that runs on the server). While we still recommend server loaders/actions for the majority of your data needs in a Remix app - these provide some levers you can pull for more advanced use-cases such as:
+
- Leveraging a data source local to the browser (i.e., `localStorage`)
- Managing a client-side cache of server data (like `IndexedDB`)
- Bypassing the Remix server in a BFF setup and hitting your API directly from the browser
@@ -1863,6 +1868,7 @@
- Output esbuild metafiles for bundle analysis ([#6772](https://github.com/remix-run/remix/pull/6772))
Written to server build directory (`build/` by default):
+
- `metafile.css.json`
- `metafile.js.json` (browser JS)
- `metafile.server.json` (server JS)
@@ -1960,6 +1966,7 @@
- built-in tls support ([#6483](https://github.com/remix-run/remix/pull/6483))
New options:
+
- `--tls-key` / `tlsKey`: TLS key
- `--tls-cert` / `tlsCert`: TLS Certificate
@@ -2230,6 +2237,7 @@
```
The dev server will:
+
- force `NODE_ENV=development` and warn you if it was previously set to something else
- rebuild your app whenever your Remix app code changes
- restart your app server whenever rebuilds succeed
diff --git a/packages/react-router-dev/package.json b/packages/react-router-dev/package.json
index 08360cbf6e..c7f0bba96f 100644
--- a/packages/react-router-dev/package.json
+++ b/packages/react-router-dev/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/dev",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Dev tools and CLI for React Router",
"homepage": "https://reactrouter.com",
"bugs": {
diff --git a/packages/react-router-dom/CHANGELOG.md b/packages/react-router-dom/CHANGELOG.md
index 7135a53e2c..f77e6cd742 100644
--- a/packages/react-router-dom/CHANGELOG.md
+++ b/packages/react-router-dom/CHANGELOG.md
@@ -1,11 +1,11 @@
# react-router-dom
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
+ - `react-router@7.9.5`
## 7.9.4
diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json
index f6a693610b..8d0ce97e9d 100644
--- a/packages/react-router-dom/package.json
+++ b/packages/react-router-dom/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router-dom",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Declarative routing for React web applications",
"keywords": [
"react",
diff --git a/packages/react-router-express/CHANGELOG.md b/packages/react-router-express/CHANGELOG.md
index 6af9aa94fc..30ffa1b332 100644
--- a/packages/react-router-express/CHANGELOG.md
+++ b/packages/react-router-express/CHANGELOG.md
@@ -1,12 +1,12 @@
# `@react-router/express`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
- - `@react-router/node@7.9.5-pre.0`
+ - `react-router@7.9.5`
+ - `@react-router/node@7.9.5`
## 7.9.4
@@ -47,6 +47,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
diff --git a/packages/react-router-express/package.json b/packages/react-router-express/package.json
index 9b00fed646..89e80d26c4 100644
--- a/packages/react-router-express/package.json
+++ b/packages/react-router-express/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/express",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Express server request handler for React Router",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-fs-routes/CHANGELOG.md b/packages/react-router-fs-routes/CHANGELOG.md
index 0cc625f9a0..26a9060f82 100644
--- a/packages/react-router-fs-routes/CHANGELOG.md
+++ b/packages/react-router-fs-routes/CHANGELOG.md
@@ -1,11 +1,11 @@
# `@react-router/fs-routes`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `@react-router/dev@7.9.5-pre.0`
+ - `@react-router/dev@7.9.5`
## 7.9.4
diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json
index f5d52d8231..88aaf5f9c7 100644
--- a/packages/react-router-fs-routes/package.json
+++ b/packages/react-router-fs-routes/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/fs-routes",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "File system routing conventions for React Router, for use within routes.ts",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-node/CHANGELOG.md b/packages/react-router-node/CHANGELOG.md
index 684b9a971a..7079986841 100644
--- a/packages/react-router-node/CHANGELOG.md
+++ b/packages/react-router-node/CHANGELOG.md
@@ -1,11 +1,11 @@
# `@react-router/node`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
+ - `react-router@7.9.5`
## 7.9.4
@@ -43,6 +43,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -242,6 +243,7 @@
- Remove single fetch future flag. ([#11522](https://github.com/remix-run/react-router/pull/11522))
- For Remix consumers migrating to React Router, the `crypto` global from the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) is now required when using cookie and session APIs. This means that the following APIs are provided from `react-router` rather than platform-specific packages: ([#11837](https://github.com/remix-run/react-router/pull/11837))
+
- `createCookie`
- `createCookieSessionStorage`
- `createMemorySessionStorage`
@@ -250,6 +252,7 @@
For consumers running older versions of Node, the `installGlobals` function from `@remix-run/node` has been updated to define `globalThis.crypto`, using [Node's `require('node:crypto').webcrypto` implementation.](https://nodejs.org/api/webcrypto.html)
Since platform-specific packages no longer need to implement this API, the following low-level APIs have been removed:
+
- `createCookieFactory`
- `createSessionStorageFactory`
- `createCookieSessionStorageFactory`
@@ -657,10 +660,12 @@
- Introduces the `defer()` API from `@remix-run/router` with support for server-rendering and HTTP streaming. This utility allows you to defer values returned from `loader` functions by returning promises instead of resolved values. This has been refered to as _"sending a promise over the wire"_. ([#4920](https://github.com/remix-run/remix/pull/4920))
Informational Resources:
+
-
-
Documentation Resources (better docs specific to Remix are in the works):
+
-
-
-
diff --git a/packages/react-router-node/package.json b/packages/react-router-node/package.json
index 5cc743cb2b..4d56e558d4 100644
--- a/packages/react-router-node/package.json
+++ b/packages/react-router-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/node",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Node.js platform abstractions for React Router",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md
index 01326fe29c..eb8210fa45 100644
--- a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md
+++ b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md
@@ -1,11 +1,11 @@
# `@react-router/remix-config-routes-adapter`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `@react-router/dev@7.9.5-pre.0`
+ - `@react-router/dev@7.9.5`
## 7.9.4
diff --git a/packages/react-router-remix-routes-option-adapter/package.json b/packages/react-router-remix-routes-option-adapter/package.json
index 64317adf01..04c54023fa 100644
--- a/packages/react-router-remix-routes-option-adapter/package.json
+++ b/packages/react-router-remix-routes-option-adapter/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/remix-routes-option-adapter",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Adapter for Remix's \"routes\" config option, for use within routes.ts",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router-serve/CHANGELOG.md b/packages/react-router-serve/CHANGELOG.md
index 3c0d220e2a..fc24c7e195 100644
--- a/packages/react-router-serve/CHANGELOG.md
+++ b/packages/react-router-serve/CHANGELOG.md
@@ -1,13 +1,13 @@
# `@react-router/serve`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Updated dependencies:
- - `react-router@7.9.5-pre.0`
- - `@react-router/node@7.9.5-pre.0`
- - `@react-router/express@7.9.5-pre.0`
+ - `react-router@7.9.5`
+ - `@react-router/node@7.9.5`
+ - `@react-router/express@7.9.5`
## 7.9.4
@@ -663,10 +663,12 @@
- Introduces the `defer()` API from `@remix-run/router` with support for server-rendering and HTTP streaming. This utility allows you to defer values returned from `loader` functions by returning promises instead of resolved values. This has been refered to as _"sending a promise over the wire"_. ([#4920](https://github.com/remix-run/remix/pull/4920))
Informational Resources:
+
-
-
Documentation Resources (better docs specific to Remix are in the works):
+
-
-
-
diff --git a/packages/react-router-serve/package.json b/packages/react-router-serve/package.json
index 588ee2d690..366c7438d9 100644
--- a/packages/react-router-serve/package.json
+++ b/packages/react-router-serve/package.json
@@ -1,6 +1,6 @@
{
"name": "@react-router/serve",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Production application server for React Router",
"bugs": {
"url": "https://github.com/remix-run/react-router/issues"
diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md
index 1cb3418293..f97a0facda 100644
--- a/packages/react-router/CHANGELOG.md
+++ b/packages/react-router/CHANGELOG.md
@@ -1,10 +1,11 @@
# `react-router`
-## 7.9.5-pre.0
+## 7.9.5
### Patch Changes
- Move RSCHydratedRouter and utils to `/dom` export. ([#14457](https://github.com/remix-run/react-router/pull/14457))
+
- useRoute: return type-safe `handle` ([#14462](https://github.com/remix-run/react-router/pull/14462))
For example:
@@ -25,7 +26,9 @@
```
- Ensure action handlers run for routes with middleware even if no loader is present ([#14443](https://github.com/remix-run/react-router/pull/14443))
+
- Add `unstable_instrumentations` API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches ([#14412](https://github.com/remix-run/react-router/pull/14412))
+
- Framework Mode:
- `entry.server.tsx`: `export const unstable_instrumentations = [...]`
- `entry.client.tsx`: ``
@@ -187,6 +190,7 @@
- Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215))
We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use:
+
- [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider)
- [`createContext`](https://reactrouter.com/api/utils/createContext)
- `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option
@@ -213,7 +217,7 @@
- \[UNSTABLE] Add ``/`` prop for client side error reporting ([#14162](https://github.com/remix-run/react-router/pull/14162))
-- server action revalidation opt out via $SKIP_REVALIDATION field ([#14154](https://github.com/remix-run/react-router/pull/14154))
+- server action revalidation opt out via $SKIP\_REVALIDATION field ([#14154](https://github.com/remix-run/react-router/pull/14154))
- Properly escape interpolated param values in `generatePath()` ([#13530](https://github.com/remix-run/react-router/pull/13530))
@@ -262,6 +266,7 @@
- Remove dependency on `@types/node` in TypeScript declaration files ([#14059](https://github.com/remix-run/react-router/pull/14059))
- Fix types for `UIMatch` to reflect that the `loaderData`/`data` properties may be `undefined` ([#12206](https://github.com/remix-run/react-router/pull/12206))
+
- When an `ErrorBoundary` is being rendered, not all active matches will have loader data available, since it may have been their `loader` that threw to trigger the boundary
- The `UIMatch.data` type was not correctly handing this and would always reflect the presence of data, leading to the unexpected runtime errors when an `ErrorBoundary` was rendered
- ⚠️ This may cause some type errors to show up in your code for unguarded `match.data` accesses - you should properly guard for `undefined` values in those scenarios.
@@ -295,6 +300,7 @@
- \[UNSTABLE] When middleware is enabled, make the `context` parameter read-only (via `Readonly`) so that TypeScript will not allow you to write arbitrary fields to it in loaders, actions, or middleware. ([#14097](https://github.com/remix-run/react-router/pull/14097))
- \[UNSTABLE] Rename and alter the signature/functionality of the `unstable_respond` API in `staticHandler.query`/`staticHandler.queryRoute` ([#14103](https://github.com/remix-run/react-router/pull/14103))
+
- The API has been renamed to `unstable_generateMiddlewareResponse` for clarity
- The main functional change is that instead of running the loaders/actions before calling `unstable_respond` and handing you the result, we now pass a `query`/`queryRoute` function as a parameter and you execute the loaders/actions inside your callback, giving you full access to pre-processing and error handling
- The `query` version of the API now has a signature of `(query: (r: Request) => Promise) => Promise`
@@ -940,6 +946,7 @@
```
Similar to server-side requests, a fresh `context` will be created per navigation (or `fetcher` call). If you have initial data you'd like to populate in the context for every request, you can provide an `unstable_getContext` function at the root of your app:
+
- Library mode - `createBrowserRouter(routes, { unstable_getContext })`
- Framework mode - ``
@@ -1127,6 +1134,7 @@ _No changes_
- Remove `future.v7_normalizeFormMethod` future flag ([#11697](https://github.com/remix-run/react-router/pull/11697))
- For Remix consumers migrating to React Router, the `crypto` global from the [Web Crypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API) is now required when using cookie and session APIs. This means that the following APIs are provided from `react-router` rather than platform-specific packages: ([#11837](https://github.com/remix-run/react-router/pull/11837))
+
- `createCookie`
- `createCookieSessionStorage`
- `createMemorySessionStorage`
@@ -1135,6 +1143,7 @@ _No changes_
For consumers running older versions of Node, the `installGlobals` function from `@remix-run/node` has been updated to define `globalThis.crypto`, using [Node's `require('node:crypto').webcrypto` implementation.](https://nodejs.org/api/webcrypto.html)
Since platform-specific packages no longer need to implement this API, the following low-level APIs have been removed:
+
- `createCookieFactory`
- `createSessionStorageFactory`
- `createCookieSessionStorageFactory`
@@ -1290,6 +1299,7 @@ _No changes_
```
This initial implementation targets type inference for:
+
- `Params` : Path parameters from your routing config in `routes.ts` including file-based routing
- `LoaderData` : Loader data from `loader` and/or `clientLoader` within your route module
- `ActionData` : Action data from `action` and/or `clientAction` within your route module
@@ -1304,6 +1314,7 @@ _No changes_
```
Check out our docs for more:
+
- [_Explanations > Type Safety_](https://reactrouter.com/dev/guides/explanation/type-safety)
- [_How-To > Setting up type safety_](https://reactrouter.com/dev/guides/how-to/setting-up-type-safety)
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index 06ec8578cd..240e926700 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router",
- "version": "7.9.5-pre.0",
+ "version": "7.9.5",
"description": "Declarative routing for React",
"keywords": [
"react",