From 6fb1e79f8304eddd8b78759edea83cb32389ebf5 Mon Sep 17 00:00:00 2001 From: Ryan Florence Date: Tue, 16 Jun 2026 08:09:37 -0600 Subject: [PATCH 1/4] Release v7.18.0 (#15187) Co-authored-by: Remix Run Bot --- CHANGELOG.md | 42 +++++++++++++++++++ packages/create-react-router/CHANGELOG.md | 6 +++ packages/create-react-router/package.json | 2 +- .../minor.request-context-domain-name.md | 1 - packages/react-router-architect/CHANGELOG.md | 12 ++++++ packages/react-router-architect/package.json | 2 +- packages/react-router-cloudflare/CHANGELOG.md | 7 ++++ packages/react-router-cloudflare/package.json | 2 +- .../patch.copy-server-watch-config.md | 1 - ...ironments-in-framework-mode-build-hooks.md | 5 --- packages/react-router-dev/CHANGELOG.md | 16 +++++++ packages/react-router-dev/package.json | 2 +- packages/react-router-dom/CHANGELOG.md | 7 ++++ packages/react-router-dom/package.json | 2 +- .../.changes/patch.request-host-hardening.md | 4 -- packages/react-router-express/CHANGELOG.md | 12 ++++++ packages/react-router-express/package.json | 2 +- packages/react-router-fs-routes/CHANGELOG.md | 7 ++++ packages/react-router-fs-routes/package.json | 2 +- packages/react-router-node/CHANGELOG.md | 7 ++++ packages/react-router-node/package.json | 2 +- .../CHANGELOG.md | 7 ++++ .../package.json | 2 +- packages/react-router-serve/CHANGELOG.md | 9 ++++ packages/react-router-serve/package.json | 2 +- .../.changes/patch.fix-bug-prerender.md | 1 - ...-nonce-default-hydrate-fallback-scripts.md | 1 - .../patch.framework-errors-turbo-stream.md | 1 - .../patch.precompute-route-branch-matchers.md | 1 - .../.changes/patch.request-url-csrf-host.md | 1 - ...tch.restrict-data-error-deserialization.md | 1 - .../.changes/patch.rsc-redirect-protocols.md | 1 - .../.changes/patch.url-consolidation.md | 1 - packages/react-router/CHANGELOG.md | 13 ++++++ packages/react-router/package.json | 2 +- 35 files changed, 156 insertions(+), 30 deletions(-) delete mode 100644 packages/react-router-architect/.changes/minor.request-context-domain-name.md delete mode 100644 packages/react-router-dev/.changes/patch.copy-server-watch-config.md delete mode 100644 packages/react-router-dev/.changes/patch.ignore-external-server-environments-in-framework-mode-build-hooks.md delete mode 100644 packages/react-router-express/.changes/patch.request-host-hardening.md delete mode 100644 packages/react-router/.changes/patch.fix-bug-prerender.md delete mode 100644 packages/react-router/.changes/patch.fix-nonce-default-hydrate-fallback-scripts.md delete mode 100644 packages/react-router/.changes/patch.framework-errors-turbo-stream.md delete mode 100644 packages/react-router/.changes/patch.precompute-route-branch-matchers.md delete mode 100644 packages/react-router/.changes/patch.request-url-csrf-host.md delete mode 100644 packages/react-router/.changes/patch.restrict-data-error-deserialization.md delete mode 100644 packages/react-router/.changes/patch.rsc-redirect-protocols.md delete mode 100644 packages/react-router/.changes/patch.url-consolidation.md diff --git a/CHANGELOG.md b/CHANGELOG.md index a80254e96f..6c6aab4054 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ We manage release notes in this file instead of the paginated Github Releases Pa Table of Contents - [React Router Releases](#react-router-releases) + - [v7.18.0](#v7180) - [v7.17.0](#v7170) - [v7.16.0](#v7160) - [Stabilized `future.v8_trailingSlashAwareDataRequests`](#stabilized-futurev8_trailingslashawaredatarequests) @@ -177,6 +178,47 @@ We manage release notes in this file instead of the paginated Github Releases Pa +## v7.18.0 + +Date: 2026-06-15 + +### Minor Changes + +- `@react-router/architect` - Add a `useRequestContextDomainName` option to `createRequestHandler` to derive request URL hosts from the API Gateway request context. ([#15185](https://github.com/remix-run/react-router/pull/15185)) + +### Patch Changes + +- `react-router` - Fix server handler prerender responses when using `ssr: false` and `future.v8_trailingSlashAwareDataRequests: true`. Avoids false positive "SPA Mode" detection when serving prerendered paths ([#15173](https://github.com/remix-run/react-router/pull/15173)) + +- `react-router` - Use the `ServerRouter` nonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. ([#15170](https://github.com/remix-run/react-router/pull/15170)) + +- `react-router` - Use `turbo-stream` to serialize and deserialize Framework Mode hydration errors ([#15175](https://github.com/remix-run/react-router/pull/15175)) + +- `react-router` - Precompute route branch matchers to avoid recompiling route path regexes during matching ([#15186](https://github.com/remix-run/react-router/pull/15186)) + +- `react-router` - Use the constructed request URL host when validating action request origins. ([#15185](https://github.com/remix-run/react-router/pull/15185)) + +- `react-router` - Remove the un-documented custom error serialization logic from Data Mode SSR built-in hydration flows ([#15175](https://github.com/remix-run/react-router/pull/15175)) + +- `react-router` - Validate protocols in RSC render redirects ([#15177](https://github.com/remix-run/react-router/pull/15177)) + +- `react-router` - Consolidate url normalization logic and better handle mixed slashes ([#15176](https://github.com/remix-run/react-router/pull/15176)) + +- `@react-router/dev` - Pass Vite `server.watch` config to child compiler in development mode. ([#15178](https://github.com/remix-run/react-router/pull/15178)) + +- `@react-router/dev` - Ignore external Vite server environments in Framework Mode build hooks ([#14883](https://github.com/remix-run/react-router/pull/14883)) + + When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build. This caused issues with integrations like Nitro, where plugins can register additional environments. + + Framework Mode build hooks now ignore external server environments and only process the app's own server build. + +- `@react-router/express` - Adjust express adapter host computation ([#15185](https://github.com/remix-run/react-router/pull/15185)) + + - read port from `x-forwarded-host` based on `trust proxy` setting + - handle invalid hostname characters + +**Full Changelog**: [`v7.17.0...v7.18.0`](https://github.com/remix-run/react-router/compare/react-router@7.17.0...react-router@7.18.0) + ## v7.17.0 Date: 2026-06-04 diff --git a/packages/create-react-router/CHANGELOG.md b/packages/create-react-router/CHANGELOG.md index 7f3ada89a8..b73392fdff 100644 --- a/packages/create-react-router/CHANGELOG.md +++ b/packages/create-react-router/CHANGELOG.md @@ -1,5 +1,11 @@ # `create-react-router` +## v7.18.0 + +### Patch Changes + +- _No changes_ + ## v7.17.0 ### Patch Changes diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json index 78d6fbebd4..2bce082656 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.17.0", + "version": "7.18.0", "description": "Create a new React Router app", "homepage": "https://reactrouter.com", "bugs": { diff --git a/packages/react-router-architect/.changes/minor.request-context-domain-name.md b/packages/react-router-architect/.changes/minor.request-context-domain-name.md deleted file mode 100644 index 5afe68bd83..0000000000 --- a/packages/react-router-architect/.changes/minor.request-context-domain-name.md +++ /dev/null @@ -1 +0,0 @@ -Add a `useRequestContextDomainName` option to `createRequestHandler` to derive request URL hosts from the API Gateway request context. diff --git a/packages/react-router-architect/CHANGELOG.md b/packages/react-router-architect/CHANGELOG.md index 9c89a75012..767806f582 100644 --- a/packages/react-router-architect/CHANGELOG.md +++ b/packages/react-router-architect/CHANGELOG.md @@ -1,5 +1,17 @@ # `@react-router/architect` +## v7.18.0 + +### Minor Changes + +- Add a `useRequestContextDomainName` option to `createRequestHandler` to derive request URL hosts from the API Gateway request context. ([#15185](https://github.com/remix-run/react-router/pull/15185)) + +### Patch Changes + +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-architect/package.json b/packages/react-router-architect/package.json index 708b810292..c449274aa4 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.17.0", + "version": "7.18.0", "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 88deb9e892..f0628afafb 100644 --- a/packages/react-router-cloudflare/CHANGELOG.md +++ b/packages/react-router-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/cloudflare` +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-cloudflare/package.json b/packages/react-router-cloudflare/package.json index dbd0171557..a922b3903d 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.17.0", + "version": "7.18.0", "description": "Cloudflare platform abstractions for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router-dev/.changes/patch.copy-server-watch-config.md b/packages/react-router-dev/.changes/patch.copy-server-watch-config.md deleted file mode 100644 index e90657d8cd..0000000000 --- a/packages/react-router-dev/.changes/patch.copy-server-watch-config.md +++ /dev/null @@ -1 +0,0 @@ -Pass Vite `server.watch` config to child compiler in development mode. diff --git a/packages/react-router-dev/.changes/patch.ignore-external-server-environments-in-framework-mode-build-hooks.md b/packages/react-router-dev/.changes/patch.ignore-external-server-environments-in-framework-mode-build-hooks.md deleted file mode 100644 index 448a6528d2..0000000000 --- a/packages/react-router-dev/.changes/patch.ignore-external-server-environments-in-framework-mode-build-hooks.md +++ /dev/null @@ -1,5 +0,0 @@ -Ignore external Vite server environments in Framework Mode build hooks - -When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build. This caused issues with integrations like Nitro, where plugins can register additional environments. - -Framework Mode build hooks now ignore external server environments and only process the app's own server build. diff --git a/packages/react-router-dev/CHANGELOG.md b/packages/react-router-dev/CHANGELOG.md index 41db76061e..c597a42cde 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,5 +1,21 @@ # `@react-router/dev` +## v7.18.0 + +### Patch Changes + +- Pass Vite `server.watch` config to child compiler in development mode. ([#15178](https://github.com/remix-run/react-router/pull/15178)) + +- Ignore external Vite server environments in Framework Mode build hooks ([#14883](https://github.com/remix-run/react-router/pull/14883)) + + When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build. This caused issues with integrations like Nitro, where plugins can register additional environments. + + Framework Mode build hooks now ignore external server environments and only process the app's own server build. +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) + - [`@react-router/serve@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/serve@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-dev/package.json b/packages/react-router-dev/package.json index aeea7810e0..5949a0e15c 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.17.0", + "version": "7.18.0", "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 d04fa8edf6..431a3d9819 100644 --- a/packages/react-router-dom/CHANGELOG.md +++ b/packages/react-router-dom/CHANGELOG.md @@ -1,5 +1,12 @@ # react-router-dom +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json index 8fcfe94b32..fcdf6ac661 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.17.0", + "version": "7.18.0", "description": "Declarative routing for React web applications", "keywords": [ "react", diff --git a/packages/react-router-express/.changes/patch.request-host-hardening.md b/packages/react-router-express/.changes/patch.request-host-hardening.md deleted file mode 100644 index 8f19773bb0..0000000000 --- a/packages/react-router-express/.changes/patch.request-host-hardening.md +++ /dev/null @@ -1,4 +0,0 @@ -Adjust express adapter host computation - -- read port from `x-forwarded-host` based on `trust proxy` setting -- handle invalid hostname characters diff --git a/packages/react-router-express/CHANGELOG.md b/packages/react-router-express/CHANGELOG.md index 1ec75e54c5..d572d84b33 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -1,5 +1,17 @@ # `@react-router/express` +## v7.18.0 + +### Patch Changes + +- Adjust express adapter host computation ([#15185](https://github.com/remix-run/react-router/pull/15185)) + + - read port from `x-forwarded-host` based on `trust proxy` setting + - handle invalid hostname characters +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-express/package.json b/packages/react-router-express/package.json index 5fd240c30d..e9ad3686cd 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.17.0", + "version": "7.18.0", "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 1a6c0ab458..5a72bcf580 100644 --- a/packages/react-router-fs-routes/CHANGELOG.md +++ b/packages/react-router-fs-routes/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/fs-routes` +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`@react-router/dev@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/dev@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json index 0df39edb3d..b88d6a14b4 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.17.0", + "version": "7.18.0", "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 00c05e6b74..c0015b6aca 100644 --- a/packages/react-router-node/CHANGELOG.md +++ b/packages/react-router-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/node` +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-node/package.json b/packages/react-router-node/package.json index b8199c7375..496de6417e 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.17.0", + "version": "7.18.0", "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 74899f70af..e39c7ca7d3 100644 --- a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md +++ b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/remix-config-routes-adapter` +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`@react-router/dev@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/dev@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-remix-routes-option-adapter/package.json b/packages/react-router-remix-routes-option-adapter/package.json index 51760df1d8..2a25259864 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.17.0", + "version": "7.18.0", "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 cb1a1077e7..65b1bd9849 100644 --- a/packages/react-router-serve/CHANGELOG.md +++ b/packages/react-router-serve/CHANGELOG.md @@ -1,5 +1,14 @@ # `@react-router/serve` +## v7.18.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) + - [`@react-router/express@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/express@7.18.0) + - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) + ## v7.17.0 ### Patch Changes diff --git a/packages/react-router-serve/package.json b/packages/react-router-serve/package.json index 9683e06c03..4ad270d15c 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.17.0", + "version": "7.18.0", "description": "Production application server for React Router", "bugs": { "url": "https://github.com/remix-run/react-router/issues" diff --git a/packages/react-router/.changes/patch.fix-bug-prerender.md b/packages/react-router/.changes/patch.fix-bug-prerender.md deleted file mode 100644 index 6f503fb22d..0000000000 --- a/packages/react-router/.changes/patch.fix-bug-prerender.md +++ /dev/null @@ -1 +0,0 @@ -Fix server handler prerender responses when using `ssr: false` and `future.v8_trailingSlashAwareDataRequests: true`. Avoids false positive "SPA Mode" detection when serving prerendered paths diff --git a/packages/react-router/.changes/patch.fix-nonce-default-hydrate-fallback-scripts.md b/packages/react-router/.changes/patch.fix-nonce-default-hydrate-fallback-scripts.md deleted file mode 100644 index 62df49634f..0000000000 --- a/packages/react-router/.changes/patch.fix-nonce-default-hydrate-fallback-scripts.md +++ /dev/null @@ -1 +0,0 @@ -Use the `ServerRouter` nonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. diff --git a/packages/react-router/.changes/patch.framework-errors-turbo-stream.md b/packages/react-router/.changes/patch.framework-errors-turbo-stream.md deleted file mode 100644 index 90a935a87a..0000000000 --- a/packages/react-router/.changes/patch.framework-errors-turbo-stream.md +++ /dev/null @@ -1 +0,0 @@ -Use `turbo-stream` to serialize and deserialize Framework Mode hydration errors diff --git a/packages/react-router/.changes/patch.precompute-route-branch-matchers.md b/packages/react-router/.changes/patch.precompute-route-branch-matchers.md deleted file mode 100644 index 240a492936..0000000000 --- a/packages/react-router/.changes/patch.precompute-route-branch-matchers.md +++ /dev/null @@ -1 +0,0 @@ -Precompute route branch matchers to avoid recompiling route path regexes during matching diff --git a/packages/react-router/.changes/patch.request-url-csrf-host.md b/packages/react-router/.changes/patch.request-url-csrf-host.md deleted file mode 100644 index 90f44a6696..0000000000 --- a/packages/react-router/.changes/patch.request-url-csrf-host.md +++ /dev/null @@ -1 +0,0 @@ -Use the constructed request URL host when validating action request origins. diff --git a/packages/react-router/.changes/patch.restrict-data-error-deserialization.md b/packages/react-router/.changes/patch.restrict-data-error-deserialization.md deleted file mode 100644 index 6879c3fb1c..0000000000 --- a/packages/react-router/.changes/patch.restrict-data-error-deserialization.md +++ /dev/null @@ -1 +0,0 @@ -Remove the un-documented custom error serialization logic from Data Mode SSR built-in hydration flows diff --git a/packages/react-router/.changes/patch.rsc-redirect-protocols.md b/packages/react-router/.changes/patch.rsc-redirect-protocols.md deleted file mode 100644 index 624bb35e87..0000000000 --- a/packages/react-router/.changes/patch.rsc-redirect-protocols.md +++ /dev/null @@ -1 +0,0 @@ -Validate protocols in RSC render redirects diff --git a/packages/react-router/.changes/patch.url-consolidation.md b/packages/react-router/.changes/patch.url-consolidation.md deleted file mode 100644 index 2d4d3a81f6..0000000000 --- a/packages/react-router/.changes/patch.url-consolidation.md +++ /dev/null @@ -1 +0,0 @@ -Consolidate url normalization logic and better handle mixed slashes diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 8837cfcd7b..917909fb6f 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,18 @@ # `react-router` +## v7.18.0 + +### Patch Changes + +- Fix server handler prerender responses when using `ssr: false` and `future.v8_trailingSlashAwareDataRequests: true`. Avoids false positive "SPA Mode" detection when serving prerendered paths ([#15173](https://github.com/remix-run/react-router/pull/15173)) +- Use the `ServerRouter` nonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. ([#15170](https://github.com/remix-run/react-router/pull/15170)) +- Use `turbo-stream` to serialize and deserialize Framework Mode hydration errors ([#15175](https://github.com/remix-run/react-router/pull/15175)) +- Precompute route branch matchers to avoid recompiling route path regexes during matching ([#15186](https://github.com/remix-run/react-router/pull/15186)) +- Use the constructed request URL host when validating action request origins. ([#15185](https://github.com/remix-run/react-router/pull/15185)) +- Remove the un-documented custom error serialization logic from Data Mode SSR built-in hydration flows ([#15175](https://github.com/remix-run/react-router/pull/15175)) +- Validate protocols in RSC render redirects ([#15177](https://github.com/remix-run/react-router/pull/15177)) +- Consolidate url normalization logic and better handle mixed slashes ([#15176](https://github.com/remix-run/react-router/pull/15176)) + ## v7.17.0 ### Minor Changes diff --git a/packages/react-router/package.json b/packages/react-router/package.json index ad52ea6fe1..8a94d93415 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "7.17.0", + "version": "7.18.0", "description": "Declarative routing for React", "keywords": [ "react", From 24283e93971e3e4f9f909c0bae63583f173fcd52 Mon Sep 17 00:00:00 2001 From: Remix Run Bot Date: Tue, 16 Jun 2026 14:10:30 +0000 Subject: [PATCH 2/4] chore: format --- CHANGELOG.md | 1 - packages/react-router-dev/CHANGELOG.md | 1 + packages/react-router-express/CHANGELOG.md | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6c6aab4054..f39082a2aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -213,7 +213,6 @@ Date: 2026-06-15 Framework Mode build hooks now ignore external server environments and only process the app's own server build. - `@react-router/express` - Adjust express adapter host computation ([#15185](https://github.com/remix-run/react-router/pull/15185)) - - read port from `x-forwarded-host` based on `trust proxy` setting - handle invalid hostname characters diff --git a/packages/react-router-dev/CHANGELOG.md b/packages/react-router-dev/CHANGELOG.md index c597a42cde..d9d46dd4c5 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -11,6 +11,7 @@ When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build. This caused issues with integrations like Nitro, where plugins can register additional environments. Framework Mode build hooks now ignore external server environments and only process the app's own server build. + - Updated dependencies: - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) diff --git a/packages/react-router-express/CHANGELOG.md b/packages/react-router-express/CHANGELOG.md index d572d84b33..0bf809897e 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -5,9 +5,9 @@ ### Patch Changes - Adjust express adapter host computation ([#15185](https://github.com/remix-run/react-router/pull/15185)) - - read port from `x-forwarded-host` based on `trust proxy` setting - handle invalid hostname characters + - Updated dependencies: - [`react-router@7.18.0`](https://github.com/remix-run/react-router/releases/tag/react-router@7.18.0) - [`@react-router/node@7.18.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@7.18.0) From d7935e4e351521645980af8e17a8960cacedbd9d Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 16 Jun 2026 10:10:30 -0400 Subject: [PATCH 3/4] Update release notes --- CHANGELOG.md | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f39082a2aa..b556c29a17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -180,38 +180,30 @@ We manage release notes in this file instead of the paginated Github Releases Pa ## v7.18.0 -Date: 2026-06-15 +Date: 2026-06-16 ### Minor Changes -- `@react-router/architect` - Add a `useRequestContextDomainName` option to `createRequestHandler` to derive request URL hosts from the API Gateway request context. ([#15185](https://github.com/remix-run/react-router/pull/15185)) +- `@react-router/architect` - Add a `useRequestContextDomainName` option to `createRequestHandler` to derive request URL hosts from the API Gateway request context ([#15185](https://github.com/remix-run/react-router/pull/15185)) + - This flag will become the default behavior in v8, so it is recommended to adopt to prepare for and to v8 better align with your deployment architecture and rely less on manual header parsing in the adapter + - See the [docs](https://reactrouter.com/api/other-api/adapter#react-routerarchitect) for more information ### Patch Changes -- `react-router` - Fix server handler prerender responses when using `ssr: false` and `future.v8_trailingSlashAwareDataRequests: true`. Avoids false positive "SPA Mode" detection when serving prerendered paths ([#15173](https://github.com/remix-run/react-router/pull/15173)) - -- `react-router` - Use the `ServerRouter` nonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. ([#15170](https://github.com/remix-run/react-router/pull/15170)) - +- `react-router` - Fix server handler prerender responses when using `ssr: false` and `future.v8_trailingSlashAwareDataRequests: true` ([#15173](https://github.com/remix-run/react-router/pull/15173)) + - Avoids false positive "SPA Mode" detection when serving prerendered paths +- `react-router` - Use the `ServerRouter` `nonce` for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them ([#15170](https://github.com/remix-run/react-router/pull/15170)) - `react-router` - Use `turbo-stream` to serialize and deserialize Framework Mode hydration errors ([#15175](https://github.com/remix-run/react-router/pull/15175)) - -- `react-router` - Precompute route branch matchers to avoid recompiling route path regexes during matching ([#15186](https://github.com/remix-run/react-router/pull/15186)) - -- `react-router` - Use the constructed request URL host when validating action request origins. ([#15185](https://github.com/remix-run/react-router/pull/15185)) - +- `react-router` - Optimize route matching by extending precomputed route branches to include matchers ([#15186](https://github.com/remix-run/react-router/pull/15186)) +- `react-router` - Use the constructed `request` URL `host` instead of header checks when validating action request origins in the CSRF check ([#15185](https://github.com/remix-run/react-router/pull/15185)) - `react-router` - Remove the un-documented custom error serialization logic from Data Mode SSR built-in hydration flows ([#15175](https://github.com/remix-run/react-router/pull/15175)) - - `react-router` - Validate protocols in RSC render redirects ([#15177](https://github.com/remix-run/react-router/pull/15177)) - - `react-router` - Consolidate url normalization logic and better handle mixed slashes ([#15176](https://github.com/remix-run/react-router/pull/15176)) - - `@react-router/dev` - Pass Vite `server.watch` config to child compiler in development mode. ([#15178](https://github.com/remix-run/react-router/pull/15178)) - - `@react-router/dev` - Ignore external Vite server environments in Framework Mode build hooks ([#14883](https://github.com/remix-run/react-router/pull/14883)) - - When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build. This caused issues with integrations like Nitro, where plugins can register additional environments. - - Framework Mode build hooks now ignore external server environments and only process the app's own server build. - + - When `future.v8_viteEnvironmentApi` is enabled, React Router previously treated any non-client Vite environment as its own server build + - This caused issues with integrations like Nitro, where plugins can register additional environments + - Framework Mode build hooks now ignore external server environments and only process the app's own server build - `@react-router/express` - Adjust express adapter host computation ([#15185](https://github.com/remix-run/react-router/pull/15185)) - read port from `x-forwarded-host` based on `trust proxy` setting - handle invalid hostname characters From 6d283a90607fb321e97d26c7646697764b50e93c Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Tue, 16 Jun 2026 10:16:38 -0400 Subject: [PATCH 4/4] Don't run format on release commits to avoid CI interruption --- .github/workflows/format.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index e25bcde3cc..25870a55dd 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -11,7 +11,8 @@ concurrency: jobs: format: - if: github.repository == 'remix-run/react-router' + # Don't run on release commits since it would just interrupt the publish workflow + if: github.repository == 'remix-run/react-router' && !startsWith(github.event.head_commit.message, 'Release v') runs-on: ubuntu-latest steps: