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: diff --git a/CHANGELOG.md b/CHANGELOG.md index a80254e96f..b556c29a17 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,38 @@ We manage release notes in this file instead of the paginated Github Releases Pa +## v7.18.0 + +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)) + - 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` ([#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` - 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 +- `@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..d9d46dd4c5 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,5 +1,22 @@ # `@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..0bf809897e 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",