diff --git a/.changeset/blue-masks-boil.md b/.changeset/blue-masks-boil.md deleted file mode 100644 index bdb9c7892a..0000000000 --- a/.changeset/blue-masks-boil.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"react-router": patch ---- - -- Update client-side router to run client `middleware` on initial load even if no loaders exist -- Update `createRoutesStub` to run route middleware - - You will need to set the `` flag to enable the proper `context` type diff --git a/.changeset/chilly-needles-taste.md b/.changeset/chilly-needles-taste.md deleted file mode 100644 index e8fa149f18..0000000000 --- a/.changeset/chilly-needles-taste.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"react-router": patch ---- - -Update Lazy Route Discovery manifest requests to use a singular comma-separated `paths` query param instead of repeated `p` query params - -- This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes -- If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits diff --git a/.changeset/fetcher-reset.md b/.changeset/fetcher-reset.md deleted file mode 100644 index 1cc1500728..0000000000 --- a/.changeset/fetcher-reset.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -[UNSTABLE] Add `fetcher.unstable_reset()` API diff --git a/.changeset/fix-preset-future-flags.md b/.changeset/fix-preset-future-flags.md deleted file mode 100644 index 58b8edc491..0000000000 --- a/.changeset/fix-preset-future-flags.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -"@react-router/dev": patch ---- - -Fix preset future flags being ignored during config resolution - -Fixes a bug where future flags defined by presets were completely ignored. The config resolution was incorrectly reading from `reactRouterUserConfig.future` instead of the merged `userAndPresetConfigs.future`, causing all preset-defined future flags to be lost. - -This fix ensures presets can properly enable experimental features as intended by the preset system design. \ No newline at end of file diff --git a/.changeset/funny-gifts-melt.md b/.changeset/funny-gifts-melt.md deleted file mode 100644 index 0552590f0a..0000000000 --- a/.changeset/funny-gifts-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-router/dev": patch ---- - -Add unstable support for RSC Framework Mode diff --git a/.changeset/honest-bears-pull.md b/.changeset/honest-bears-pull.md deleted file mode 100644 index b40184bc10..0000000000 --- a/.changeset/honest-bears-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Made useOutlet element reference have stable identity in-between route chages diff --git a/.changeset/lucky-tables-itch.md b/.changeset/lucky-tables-itch.md deleted file mode 100644 index 862c92c055..0000000000 --- a/.changeset/lucky-tables-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -feat: enable full transition support for the rsc router diff --git a/.changeset/nice-apples-burn.md b/.changeset/nice-apples-burn.md deleted file mode 100644 index 7d9559f56a..0000000000 --- a/.changeset/nice-apples-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-router/serve": patch ---- - -disable compression for RSC responses for now diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index bb7da71f07..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,54 +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.1", - "react-router": "7.9.1", - "@react-router/architect": "7.9.1", - "@react-router/cloudflare": "7.9.1", - "@react-router/dev": "7.9.1", - "react-router-dom": "7.9.1", - "@react-router/express": "7.9.1", - "@react-router/fs-routes": "7.9.1", - "@react-router/node": "7.9.1", - "@react-router/remix-routes-option-adapter": "7.9.1", - "@react-router/serve": "7.9.1", - "@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": [ - "blue-masks-boil", - "chilly-needles-taste", - "fetcher-reset", - "fix-preset-future-flags", - "funny-gifts-melt", - "honest-bears-pull", - "lucky-tables-itch", - "nice-apples-burn", - "silent-emus-grow", - "slow-laws-do", - "sour-crews-destroy", - "two-mice-grin", - "yellow-ears-begin" - ] -} diff --git a/.changeset/silent-emus-grow.md b/.changeset/silent-emus-grow.md deleted file mode 100644 index d9a2c44a93..0000000000 --- a/.changeset/silent-emus-grow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -In RSC Data Mode, handle SSR'd client errors and re-try in the browser diff --git a/.changeset/slow-laws-do.md b/.changeset/slow-laws-do.md deleted file mode 100644 index 13ba3cfc49..0000000000 --- a/.changeset/slow-laws-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Support `middleware` prop on `` for usage with a data router via `createRoutesFromElements` diff --git a/.changeset/sour-crews-destroy.md b/.changeset/sour-crews-destroy.md deleted file mode 100644 index 4d14c2945a..0000000000 --- a/.changeset/sour-crews-destroy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@react-router/dev": patch ---- - -Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` diff --git a/.changeset/two-mice-grin.md b/.changeset/two-mice-grin.md deleted file mode 100644 index 3c8383d48e..0000000000 --- a/.changeset/two-mice-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Handle encoded question mark and hash characters in ancestor splat routes diff --git a/.changeset/yellow-ears-begin.md b/.changeset/yellow-ears-begin.md deleted file mode 100644 index 8d0c3c80d8..0000000000 --- a/.changeset/yellow-ears-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Fail gracefully on manifest version mismatch logic if `sessionStorage` access is blocked diff --git a/CHANGELOG.md b/CHANGELOG.md index 49920828b5..458e0446f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,8 @@ We manage release notes in this file instead of the paginated Github Releases Pa - [React Router Releases](#react-router-releases) - [v7.9.2](#v792) - [What's Changed](#whats-changed) + - [RSC Framework Mode (unstable)](#rsc-framework-mode-unstable) + - [Fetcher Reset (unstable)](#fetcher-reset-unstable) - [Patch Changes](#patch-changes) - [Unstable Changes](#unstable-changes) - [v7.9.1](#v791) @@ -369,7 +371,15 @@ Date: 2025-09-24 ### What's Changed -This release contains a handful of bug fixes, but we think you'll be most excited about the new unstable stuff. This release includes our first release of unstable support for RSC in Framework Mode! You can read more about it in our [blog post](https://remix.run/blog/rsc-framework-mode-preview) and the [docs](https://reactrouter.com/dev/how-to/react-server-components#rsc-framework-mode). This release also includes a new (long-requested) `fetcher.unstable_reset()` API to reset fetchers back to their initial `idle` state. +This release contains a handful of bug fixes, but we think you'll be most excited about the new unstable stuff 😉. + +#### RSC Framework Mode (unstable) + +This release includes our first release of unstable support for RSC in Framework Mode! You can read more about it in our [blog post](https://remix.run/blog/rsc-framework-mode-preview) and the [docs](https://reactrouter.com/how-to/react-server-components#rsc-framework-mode). + +#### Fetcher Reset (unstable) + +This release also includes a new (long-requested) `fetcher.unstable_reset()` API to reset fetchers back to their initial `idle` state. ### Patch Changes @@ -391,9 +401,9 @@ This release contains a handful of bug fixes, but we think you'll be most excite ⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_ - `react-router` - Add `fetcher.unstable_reset()` API ([#14206](https://github.com/remix-run/react-router/pull/14206)) -- `@react-router/dev` - Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336)) - `react-router` - In RSC Data Mode, handle SSR'd client errors and re-try in the browser ([#14342](https://github.com/remix-run/react-router/pull/14342)) - `react-router` - Enable full transition support for the RSC router ([#14362](https://github.com/remix-run/react-router/pull/14362)) +- `@react-router/dev` - Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336)) - `@react-router/serve` - Disable `compression()` middleware in RSC framework mode ([#14381](https://github.com/remix-run/react-router/pull/14381)) **Full Changelog**: [`v7.9.1...v7.9.2`](https://github.com/remix-run/react-router/compare/react-router@7.9.1...react-router@7.9.2) 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 9551b629b6..46248d8c92 100644 --- a/packages/create-react-router/CHANGELOG.md +++ b/packages/create-react-router/CHANGELOG.md @@ -1,12 +1,8 @@ # `create-react-router` -## 7.9.2-pre.3 +## 7.9.2 -## 7.9.2-pre.2 - -## 7.9.2-pre.1 - -## 7.9.2-pre.0 +_No changes_ ## 7.9.1 diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json index a6e853e994..a5ad8e609f 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.2-pre.3", + "version": "7.9.2", "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 2b7e8eb08e..1da2b7124f 100644 --- a/packages/react-router-architect/CHANGELOG.md +++ b/packages/react-router-architect/CHANGELOG.md @@ -1,36 +1,12 @@ # `@react-router/architect` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `react-router@7.9.2-pre.3` - - `@react-router/node@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - - `@react-router/node@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - - `@react-router/node@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` - - `@react-router/node@7.9.2-pre.0` + - `react-router@7.9.2` + - `@react-router/node@7.9.2` ## 7.9.1 @@ -47,6 +23,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 +247,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 +256,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 954e3b9b2b..9e7c2c1110 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.2-pre.3", + "version": "7.9.2", "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 0f26eeff49..0c25a32490 100644 --- a/packages/react-router-cloudflare/CHANGELOG.md +++ b/packages/react-router-cloudflare/CHANGELOG.md @@ -1,32 +1,11 @@ # `@react-router/cloudflare` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `react-router@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` + - `react-router@7.9.2` ## 7.9.1 @@ -42,6 +21,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 +220,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 +229,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 f134da65ce..9897f57dd9 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.2-pre.3", + "version": "7.9.2", "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 f1ac1bf8e3..0b21ce1299 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,15 +1,6 @@ # `@react-router/dev` -## 7.9.2-pre.3 - -### Patch Changes - -- Updated dependencies: - - `@react-router/serve@7.9.2-pre.3` - - `react-router@7.9.2-pre.3` - - `@react-router/node@7.9.2-pre.3` - -## 7.9.2-pre.2 +## 7.9.2 ### Patch Changes @@ -19,30 +10,14 @@ This fix ensures presets can properly enable experimental features as intended by the preset system design. -- Updated dependencies: - - `react-router@7.9.2-pre.2` - - `@react-router/node@7.9.2-pre.2` - - `@react-router/serve@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - - `@react-router/node@7.9.2-pre.1` - - `@react-router/serve@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - - Add unstable support for RSC Framework Mode ([#14336](https://github.com/remix-run/react-router/pull/14336)) + - Switch internal vite plugin Response logic to use `@remix-run/node-fetch-server` ([#13927](https://github.com/remix-run/react-router/pull/13927)) + - Updated dependencies: - - `react-router@7.9.2-pre.0` - - `@react-router/node@7.9.2-pre.0` - - `@react-router/serve@7.9.2-pre.0` + - `react-router@7.9.2` + - `@react-router/serve@7.9.2` + - `@react-router/node@7.9.2` ## 7.9.1 @@ -61,6 +36,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 @@ -803,6 +779,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 @@ -817,6 +794,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) @@ -1016,6 +994,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` @@ -1352,6 +1331,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 @@ -1755,6 +1735,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) @@ -1852,6 +1833,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 @@ -2122,6 +2104,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 37f99bcb91..114f9c9f36 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.2-pre.3", + "version": "7.9.2", "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 4092a34a70..eb67840d0a 100644 --- a/packages/react-router-dom/CHANGELOG.md +++ b/packages/react-router-dom/CHANGELOG.md @@ -1,32 +1,11 @@ # react-router-dom -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `react-router@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` + - `react-router@7.9.2` ## 7.9.1 diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json index f1268c6319..a2061889b7 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.2-pre.3", + "version": "7.9.2", "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 6cfa9b0a47..30d4c1b187 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -1,36 +1,12 @@ # `@react-router/express` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `react-router@7.9.2-pre.3` - - `@react-router/node@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - - `@react-router/node@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - - `@react-router/node@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` - - `@react-router/node@7.9.2-pre.0` + - `react-router@7.9.2` + - `@react-router/node@7.9.2` ## 7.9.1 @@ -47,6 +23,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 5a8469fa0c..3ffab6f810 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.2-pre.3", + "version": "7.9.2", "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 474fb4196b..0336b8a6d8 100644 --- a/packages/react-router-fs-routes/CHANGELOG.md +++ b/packages/react-router-fs-routes/CHANGELOG.md @@ -1,32 +1,11 @@ # `@react-router/fs-routes` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `@react-router/dev@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.0` + - `@react-router/dev@7.9.2` ## 7.9.1 diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json index 97b3263695..6a74cf9feb 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.2-pre.3", + "version": "7.9.2", "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 2907f1ddd8..d492d812b7 100644 --- a/packages/react-router-node/CHANGELOG.md +++ b/packages/react-router-node/CHANGELOG.md @@ -1,32 +1,11 @@ # `@react-router/node` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `react-router@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` + - `react-router@7.9.2` ## 7.9.1 @@ -42,6 +21,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 @@ -241,6 +221,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` @@ -249,6 +230,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` @@ -656,10 +638,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 d837f4d76c..296b51be4f 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.2-pre.3", + "version": "7.9.2", "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 58bbf5bce3..8ec81f0cf2 100644 --- a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md +++ b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md @@ -1,32 +1,11 @@ # `@react-router/remix-config-routes-adapter` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - Updated dependencies: - - `@react-router/dev@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `@react-router/dev@7.9.2-pre.0` + - `@react-router/dev@7.9.2` ## 7.9.1 diff --git a/packages/react-router-remix-routes-option-adapter/package.json b/packages/react-router-remix-routes-option-adapter/package.json index d0a2797403..c38f0963a9 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.2-pre.3", + "version": "7.9.2", "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 5f300ec7f2..a4614aefb8 100644 --- a/packages/react-router-serve/CHANGELOG.md +++ b/packages/react-router-serve/CHANGELOG.md @@ -1,41 +1,14 @@ # `@react-router/serve` -## 7.9.2-pre.3 +## 7.9.2 ### Patch Changes - disable compression for RSC responses for now ([#14381](https://github.com/remix-run/react-router/pull/14381)) - Updated dependencies: - - `react-router@7.9.2-pre.3` - - `@react-router/express@7.9.2-pre.3` - - `@react-router/node@7.9.2-pre.3` - -## 7.9.2-pre.2 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.2` - - `@react-router/express@7.9.2-pre.2` - - `@react-router/node@7.9.2-pre.2` - -## 7.9.2-pre.1 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.1` - - `@react-router/node@7.9.2-pre.1` - - `@react-router/express@7.9.2-pre.1` - -## 7.9.2-pre.0 - -### Patch Changes - -- Updated dependencies: - - `react-router@7.9.2-pre.0` - - `@react-router/node@7.9.2-pre.0` - - `@react-router/express@7.9.2-pre.0` + - `react-router@7.9.2` + - `@react-router/node@7.9.2` + - `@react-router/express@7.9.2` ## 7.9.1 @@ -663,10 +636,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 da338aca93..42c995a848 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.2-pre.3", + "version": "7.9.2", "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 b9300cefd9..6c39008486 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,31 +1,29 @@ # `react-router` -## 7.9.2-pre.3 - -## 7.9.2-pre.2 - -## 7.9.2-pre.1 - -### Patch Changes - -- feat: enable full transition support for the rsc router ([#14362](https://github.com/remix-run/react-router/pull/14362)) - -## 7.9.2-pre.0 +## 7.9.2 ### Patch Changes - - Update client-side router to run client `middleware` on initial load even if no loaders exist ([#14348](https://github.com/remix-run/react-router/pull/14348)) - Update `createRoutesStub` to run route middleware - You will need to set the `` flag to enable the proper `context` type + - Update Lazy Route Discovery manifest requests to use a singular comma-separated `paths` query param instead of repeated `p` query params ([#14321](https://github.com/remix-run/react-router/pull/14321)) - This is because Cloudflare has a hard limit of 100 URL search param key/value pairs when used as a key for caching purposes - If more that 100 paths were included, the cache key would be incomplete and could produce false-positive cache hits -- [UNSTABLE] Add `fetcher.unstable_reset()` API ([#14206](https://github.com/remix-run/react-router/pull/14206)) +- \[UNSTABLE] Add `fetcher.unstable_reset()` API ([#14206](https://github.com/remix-run/react-router/pull/14206)) + - Made useOutlet element reference have stable identity in-between route chages ([#13382](https://github.com/remix-run/react-router/pull/13382)) + +- feat: enable full transition support for the rsc router ([#14362](https://github.com/remix-run/react-router/pull/14362)) + - In RSC Data Mode, handle SSR'd client errors and re-try in the browser ([#14342](https://github.com/remix-run/react-router/pull/14342)) + - Support `middleware` prop on `` for usage with a data router via `createRoutesFromElements` ([#14357](https://github.com/remix-run/react-router/pull/14357)) + - Handle encoded question mark and hash characters in ancestor splat routes ([#14249](https://github.com/remix-run/react-router/pull/14249)) + - Fail gracefully on manifest version mismatch logic if `sessionStorage` access is blocked ([#14335](https://github.com/remix-run/react-router/pull/14335)) ## 7.9.1 @@ -41,6 +39,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 @@ -67,7 +66,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)) @@ -116,6 +115,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. @@ -149,6 +149,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` @@ -794,6 +795,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 - `` @@ -981,6 +983,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` @@ -989,6 +992,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` @@ -1144,6 +1148,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 @@ -1158,6 +1163,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 a81ad87caa..59376903f1 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "7.9.2-pre.3", + "version": "7.9.2", "description": "Declarative routing for React", "keywords": [ "react",