From e3eb69525d2055c0866e3b32fc4651c55f8325ca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Feb 2026 16:50:49 +0000 Subject: [PATCH] chore: Update version for release --- .changeset/breezy-pans-warn.md | 5 -- .changeset/clear-stream-timeout.md | 5 -- .changeset/hot-jokes-allow.md | 5 -- .changeset/pink-seas-hope.md | 8 --- .changeset/plenty-olives-rush.md | 5 -- .changeset/poor-tips-own.md | 5 -- .changeset/pre.json | 49 ------------------ .changeset/silly-badgers-cough.md | 50 ------------------- .changeset/twelve-dancers-shop.md | 5 -- .changeset/warm-clouds-shine.md | 5 -- integration/CHANGELOG.md | 1 + packages/create-react-router/CHANGELOG.md | 2 +- packages/create-react-router/package.json | 2 +- packages/react-router-architect/CHANGELOG.md | 9 ++-- packages/react-router-architect/package.json | 2 +- packages/react-router-cloudflare/CHANGELOG.md | 7 ++- packages/react-router-cloudflare/package.json | 2 +- packages/react-router-dev/CHANGELOG.md | 30 +++++++---- packages/react-router-dev/package.json | 2 +- packages/react-router-dom/CHANGELOG.md | 4 +- packages/react-router-dom/package.json | 2 +- packages/react-router-express/CHANGELOG.md | 7 +-- packages/react-router-express/package.json | 2 +- packages/react-router-fs-routes/CHANGELOG.md | 4 +- packages/react-router-fs-routes/package.json | 2 +- packages/react-router-node/CHANGELOG.md | 9 +++- packages/react-router-node/package.json | 2 +- .../CHANGELOG.md | 4 +- .../package.json | 2 +- packages/react-router-serve/CHANGELOG.md | 10 ++-- packages/react-router-serve/package.json | 2 +- packages/react-router/CHANGELOG.md | 43 +++++++++++----- packages/react-router/package.json | 2 +- 33 files changed, 97 insertions(+), 197 deletions(-) delete mode 100644 .changeset/breezy-pans-warn.md delete mode 100644 .changeset/clear-stream-timeout.md delete mode 100644 .changeset/hot-jokes-allow.md delete mode 100644 .changeset/pink-seas-hope.md delete mode 100644 .changeset/plenty-olives-rush.md delete mode 100644 .changeset/poor-tips-own.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/silly-badgers-cough.md delete mode 100644 .changeset/twelve-dancers-shop.md delete mode 100644 .changeset/warm-clouds-shine.md diff --git a/.changeset/breezy-pans-warn.md b/.changeset/breezy-pans-warn.md deleted file mode 100644 index 96853b8c1f..0000000000 --- a/.changeset/breezy-pans-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -fix null reference exception in bad codepath leading to invalid route tree comparisons diff --git a/.changeset/clear-stream-timeout.md b/.changeset/clear-stream-timeout.md deleted file mode 100644 index cf9d792756..0000000000 --- a/.changeset/clear-stream-timeout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -fix: clear timeout when turbo-stream encoding completes diff --git a/.changeset/hot-jokes-allow.md b/.changeset/hot-jokes-allow.md deleted file mode 100644 index 351bd640d3..0000000000 --- a/.changeset/hot-jokes-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Improve error message when Origin header is invalid diff --git a/.changeset/pink-seas-hope.md b/.changeset/pink-seas-hope.md deleted file mode 100644 index 01af67e08e..0000000000 --- a/.changeset/pink-seas-hope.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -"react-router": patch ---- - -Fix matchPath optional params matching without a "/" separator. - -- matchPath("/users/:id?", "/usersblah") now returns null. -- matchPath("/test_route/:part?", "/test_route_more") now returns null. diff --git a/.changeset/plenty-olives-rush.md b/.changeset/plenty-olives-rush.md deleted file mode 100644 index 1299950ae9..0000000000 --- a/.changeset/plenty-olives-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -add RSC unstable_getRequest diff --git a/.changeset/poor-tips-own.md b/.changeset/poor-tips-own.md deleted file mode 100644 index 509d33c52c..0000000000 --- a/.changeset/poor-tips-own.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Fix `HydrateFallback` rendering during initial lazy route discovery with matching splat route diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 178f04f495..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "mode": "exit", - "tag": "pre", - "initialVersions": { - "integration": "0.0.0", - "integration-cloudflare-dev-proxy-template": "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.13.0", - "react-router": "7.13.0", - "@react-router/architect": "7.13.0", - "@react-router/cloudflare": "7.13.0", - "@react-router/dev": "7.13.0", - "react-router-dom": "7.13.0", - "@react-router/express": "7.13.0", - "@react-router/fs-routes": "7.13.0", - "@react-router/node": "7.13.0", - "@react-router/remix-routes-option-adapter": "7.13.0", - "@react-router/serve": "7.13.0", - "@playground/data": "0.0.0", - "@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-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": [ - "breezy-pans-warn", - "clear-stream-timeout", - "hot-jokes-allow", - "pink-seas-hope", - "plenty-olives-rush", - "poor-tips-own", - "silly-badgers-cough", - "twelve-dancers-shop", - "warm-clouds-shine" - ] -} diff --git a/.changeset/silly-badgers-cough.md b/.changeset/silly-badgers-cough.md deleted file mode 100644 index 4135edc35b..0000000000 --- a/.changeset/silly-badgers-cough.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -"react-router": patch ---- - -[UNSTABLE] Add support for `` in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. - -```tsx -// routes/gallery.tsx -export function clientLoader({ request }: Route.LoaderArgs) { - let sp = new URL(request.url).searchParams; - return { - images: getImages(), - // When the router location has the image param, load the modal data - modalImage: sp.has("image") ? getImage(sp.get("image")!) : null, - }; -} - -export default function Gallery({ loaderData }: Route.ComponentProps) { - return ( - <> - - {loaderData.images.map((image) => ( - - {image.alt} - - ))} - - - {/* When the modal data exists, display the modal */} - {data.modalImage ? ( - - {data.modalImage.alt} - - ) : null} - - ); -} -``` - -Notes: - -- The masked location, if present, will be available on `useLocation().unstable_mask` so you can detect whether you are currently masked or not. -- Masked URLs only work for SPA use cases, and will be removed from `history.state` during SSR. -- This provides a first-class API to mask URLs in Data Mode to achieve the same behavior you could do in Declarative Mode via [manual `backgroundLocation` management](https://github.com/remix-run/react-router/tree/main/examples/modal). diff --git a/.changeset/twelve-dancers-shop.md b/.changeset/twelve-dancers-shop.md deleted file mode 100644 index 8f18740909..0000000000 --- a/.changeset/twelve-dancers-shop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 diff --git a/.changeset/warm-clouds-shine.md b/.changeset/warm-clouds-shine.md deleted file mode 100644 index 53b7ea2af7..0000000000 --- a/.changeset/warm-clouds-shine.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"react-router": patch ---- - -Preserve query parameters and hash on manifest version mismatch reload 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 b1e55f1bed..0784fd5bb9 100644 --- a/packages/create-react-router/CHANGELOG.md +++ b/packages/create-react-router/CHANGELOG.md @@ -1,6 +1,6 @@ # `create-react-router` -## 7.13.1-pre.0 +## 7.13.1 ## 7.13.0 diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json index 19e50b8937..a2df126d02 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.13.1-pre.0", + "version": "7.13.1", "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 7ca546d9fb..ac04993c40 100644 --- a/packages/react-router-architect/CHANGELOG.md +++ b/packages/react-router-architect/CHANGELOG.md @@ -1,12 +1,12 @@ # `@react-router/architect` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` - - `@react-router/node@7.13.1-pre.0` + - `react-router@7.13.1` + - `@react-router/node@7.13.1` ## 7.13.0 @@ -103,6 +103,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 @@ -326,6 +327,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` @@ -334,6 +336,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 24661b5e4b..dbe134378c 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.13.1-pre.0", + "version": "7.13.1", "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 2cb7b70422..4190774f96 100644 --- a/packages/react-router-cloudflare/CHANGELOG.md +++ b/packages/react-router-cloudflare/CHANGELOG.md @@ -1,11 +1,11 @@ # `@react-router/cloudflare` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` + - `react-router@7.13.1` ## 7.13.0 @@ -91,6 +91,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 @@ -289,6 +290,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` @@ -297,6 +299,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 77a5ff73b2..6bb01d8ad4 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.13.1-pre.0", + "version": "7.13.1", "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 5f83240065..c0ee22e6cd 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,13 +1,13 @@ # `@react-router/dev` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` - - `@react-router/node@7.13.1-pre.0` - - `@react-router/serve@7.13.1-pre.0` + - `react-router@7.13.1` + - `@react-router/node@7.13.1` + - `@react-router/serve@7.13.1` ## 7.13.0 @@ -37,25 +37,25 @@ | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | - | **Document** | `/a/b/c` | `/a/b/c` ✅ | - | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | + | **Document** | `/a/b/c` | `/a/b/c` ✅ | + | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ----------------- | ------------------------ | - | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | + | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ⚠️ | With this flag enabled, these pathnames will be made consistent though a new `_.data` format for client-side `.data` requests: | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | - | **Document** | `/a/b/c` | `/a/b/c` ✅ | - | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | + | **Document** | `/a/b/c` | `/a/b/c` ✅ | + | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ------------------ | ------------------------ | - | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | - | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | + | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | + | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic. @@ -313,6 +313,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 @@ -1055,6 +1056,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 @@ -1069,6 +1071,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) @@ -1268,6 +1271,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` @@ -1604,6 +1608,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 @@ -2007,6 +2012,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) @@ -2104,6 +2110,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 @@ -2374,6 +2381,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 445a5deecd..cbd36e9bd5 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.13.1-pre.0", + "version": "7.13.1", "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 32e742067b..08ae899ab4 100644 --- a/packages/react-router-dom/CHANGELOG.md +++ b/packages/react-router-dom/CHANGELOG.md @@ -1,11 +1,11 @@ # react-router-dom -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` + - `react-router@7.13.1` ## 7.13.0 diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json index cb162329a3..acf8f7e4fe 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.13.1-pre.0", + "version": "7.13.1", "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 9746c56353..f394ddf339 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -1,12 +1,12 @@ # `@react-router/express` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` - - `@react-router/node@7.13.1-pre.0` + - `react-router@7.13.1` + - `@react-router/node@7.13.1` ## 7.13.0 @@ -103,6 +103,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 21443fc252..27cdb9fae2 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.13.1-pre.0", + "version": "7.13.1", "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 1206c6ace3..57efb2e6c3 100644 --- a/packages/react-router-fs-routes/CHANGELOG.md +++ b/packages/react-router-fs-routes/CHANGELOG.md @@ -1,11 +1,11 @@ # `@react-router/fs-routes` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `@react-router/dev@7.13.1-pre.0` + - `@react-router/dev@7.13.1` ## 7.13.0 diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json index 717dc6ac37..d1782e99d3 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.13.1-pre.0", + "version": "7.13.1", "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 54c621fc48..d731580ca7 100644 --- a/packages/react-router-node/CHANGELOG.md +++ b/packages/react-router-node/CHANGELOG.md @@ -1,11 +1,11 @@ # `@react-router/node` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` + - `react-router@7.13.1` ## 7.13.0 @@ -92,6 +92,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 @@ -291,6 +292,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` @@ -299,6 +301,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` @@ -706,10 +709,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 420a0a62f3..5d44e20d50 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.13.1-pre.0", + "version": "7.13.1", "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 8661c01c0e..8f58373864 100644 --- a/packages/react-router-remix-routes-option-adapter/CHANGELOG.md +++ b/packages/react-router-remix-routes-option-adapter/CHANGELOG.md @@ -1,11 +1,11 @@ # `@react-router/remix-config-routes-adapter` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `@react-router/dev@7.13.1-pre.0` + - `@react-router/dev@7.13.1` ## 7.13.0 diff --git a/packages/react-router-remix-routes-option-adapter/package.json b/packages/react-router-remix-routes-option-adapter/package.json index f0efcb0429..874d21e0f9 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.13.1-pre.0", + "version": "7.13.1", "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 5e35abee84..f956dc5e12 100644 --- a/packages/react-router-serve/CHANGELOG.md +++ b/packages/react-router-serve/CHANGELOG.md @@ -1,13 +1,13 @@ # `@react-router/serve` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - Updated dependencies: - - `react-router@7.13.1-pre.0` - - `@react-router/node@7.13.1-pre.0` - - `@react-router/express@7.13.1-pre.0` + - `react-router@7.13.1` + - `@react-router/node@7.13.1` + - `@react-router/express@7.13.1` ## 7.13.0 @@ -728,10 +728,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 55886a0f26..61fdba42e0 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.13.1-pre.0", + "version": "7.13.1", "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 d87e075d01..98ed5b8338 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,19 +1,24 @@ # `react-router` -## 7.13.1-pre.0 +## 7.13.1 ### Patch Changes - fix null reference exception in bad codepath leading to invalid route tree comparisons ([#14780](https://github.com/remix-run/react-router/pull/14780)) + - fix: clear timeout when turbo-stream encoding completes ([#14810](https://github.com/remix-run/react-router/pull/14810)) + - Improve error message when Origin header is invalid ([#14743](https://github.com/remix-run/react-router/pull/14743)) + - Fix matchPath optional params matching without a "/" separator. ([#14689](https://github.com/remix-run/react-router/pull/14689)) - matchPath("/users/:id?", "/usersblah") now returns null. - - matchPath("/test_route/:part?", "/test_route_more") now returns null. + - matchPath("/test\_route/:part?", "/test\_route\_more") now returns null. + +- add RSC unstable\_getRequest ([#14758](https://github.com/remix-run/react-router/pull/14758)) -- add RSC unstable_getRequest ([#14758](https://github.com/remix-run/react-router/pull/14758)) - Fix `HydrateFallback` rendering during initial lazy route discovery with matching splat route ([#14740](https://github.com/remix-run/react-router/pull/14740)) -- [UNSTABLE] Add support for `` in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. ([#14716](https://github.com/remix-run/react-router/pull/14716)) + +- \[UNSTABLE] Add support for `` in Data Mode which allows users to navigate to a URL in the router but "mask" the URL displayed in the browser. This is useful for contextual routing usages such as displaying an image in a model on top of a gallery, but displaying a browser URL directly to the image that can be shared and loaded without the contextual gallery in the background. ([#14716](https://github.com/remix-run/react-router/pull/14716)) ```tsx // routes/gallery.tsx @@ -55,11 +60,13 @@ ``` Notes: + - The masked location, if present, will be available on `useLocation().unstable_mask` so you can detect whether you are currently masked or not. - Masked URLs only work for SPA use cases, and will be removed from `history.state` during SSR. - This provides a first-class API to mask URLs in Data Mode to achieve the same behavior you could do in Declarative Mode via [manual `backgroundLocation` management](https://github.com/remix-run/react-router/tree/main/examples/modal). - RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 ([#14755](https://github.com/remix-run/react-router/pull/14755)) + - Preserve query parameters and hash on manifest version mismatch reload ([#14813](https://github.com/remix-run/react-router/pull/14813)) ## 7.13.0 @@ -99,25 +106,25 @@ | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | - | **Document** | `/a/b/c` | `/a/b/c` ✅ | - | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | + | **Document** | `/a/b/c` | `/a/b/c` ✅ | + | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ----------------- | ------------------------ | - | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | + | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | | **Data** | `/a/b/c.data` | `/a/b/c` ⚠️ | With this flag enabled, these pathnames will be made consistent though a new `_.data` format for client-side `.data` requests: | URL `/a/b/c` | **HTTP pathname** | **`request` pathname\`** | | ------------ | ----------------- | ------------------------ | - | **Document** | `/a/b/c` | `/a/b/c` ✅ | - | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | + | **Document** | `/a/b/c` | `/a/b/c` ✅ | + | **Data** | `/a/b/c.data` | `/a/b/c` ✅ | | URL `/a/b/c/` | **HTTP pathname** | **`request` pathname\`** | | ------------- | ------------------ | ------------------------ | - | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | - | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | + | **Document** | `/a/b/c/` | `/a/b/c/` ✅ | + | **Data** | `/a/b/c/_.data` ⬅️ | `/a/b/c/` ✅ | This a bug fix but we are putting it behind an opt-in flag because it has the potential to be a "breaking bug fix" if you are relying on the URL format for any other application or caching logic. @@ -144,12 +151,14 @@ - \[UNSTABLE] Add a new `unstable_defaultShouldRevalidate` flag to various APIs to allow opt-ing out of standard revalidation behaviors. ([#14542](https://github.com/remix-run/react-router/pull/14542)) If active routes include a `shouldRevalidate` function, then your value will be passed as `defaultShouldRevalidate` in those function so that the route always has the final revalidation determination. + - `
` - `submit(data, { method: "post", unstable_defaultShouldRevalidate: false })` - `` - `fetcher.submit(data, { method: "post", unstable_defaultShouldRevalidate: false })` This is also available on non-submission APIs that may trigger revalidations due to changing search params: + - `` - `navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })` - `setSearchParams(params, { unstable_defaultShouldRevalidate: false })` @@ -172,6 +181,7 @@ - ⚠️ This is a breaking change if you have begun using `fetcher.unstable_reset()` - Stabilize the `dataStrategy` `match.shouldRevalidateArgs`/`match.shouldCallHandler()` APIs. ([#14592](https://github.com/remix-run/react-router/pull/14592)) + - The `match.shouldLoad` API is now marked deprecated in favor of these more powerful alternatives - If you're using this API in a custom `dataStrategy` today, you can swap to the new API at your convenience: @@ -300,6 +310,7 @@ - Ensure action handlers run for routes with middleware even if no loader is present ([#14443](https://github.com/remix-run/react-router/pull/14443)) - Add `unstable_instrumentations` API to allow users to add observablity to their apps by instrumenting route loaders, actions, middlewares, lazy, as well as server-side request handlers and client side navigations/fetches ([#14412](https://github.com/remix-run/react-router/pull/14412)) + - Framework Mode: - `entry.server.tsx`: `export const unstable_instrumentations = [...]` - `entry.client.tsx`: `` @@ -461,6 +472,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 @@ -487,7 +499,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)) @@ -536,6 +548,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. @@ -569,6 +582,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` @@ -1214,6 +1228,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 - `` @@ -1401,6 +1416,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` @@ -1409,6 +1425,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` @@ -1564,6 +1581,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 @@ -1578,6 +1596,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 10ed7d6792..b82ce73ec9 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "react-router", - "version": "7.13.1-pre.0", + "version": "7.13.1", "description": "Declarative routing for React", "keywords": [ "react",