From aa35115b85345df2bc640475a57e1b1125a8dae6 Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 29 Jun 2026 15:52:58 -0400 Subject: [PATCH 1/3] Prep 8.1.0 release notes --- .../.changes/minor.agent-skills.md | 8 ++-- .../.changes/patch.use-node-parse-args.md | 2 +- .../patch.bun-babel-default-imports.md | 2 +- .../patch.vite-node-external-conditions.md | 2 +- .../.changes/patch.remove-get-port.md | 2 +- .../.changes/minor.instrumentation-meta.md | 5 +-- scripts/changes/whats-changed.md | 37 +++++++++++++++++++ 7 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 scripts/changes/whats-changed.md diff --git a/packages/create-react-router/.changes/minor.agent-skills.md b/packages/create-react-router/.changes/minor.agent-skills.md index dbccc8b34f..c67139538d 100644 --- a/packages/create-react-router/.changes/minor.agent-skills.md +++ b/packages/create-react-router/.changes/minor.agent-skills.md @@ -1,5 +1,5 @@ -Add a default-on CLI option to include the official React Router agent skill in generated projects. +Add a default-on CLI option to include the official React Router agent skill in generated projects -- New projects include `.agents/skills/react-router` by default when running with `--yes` or in non-interactive shells. -- Interactive runs prompt to include the skill, defaulting to yes. -- Use `--no-agent-skills` to skip copying the skill. +- New projects include `.agents/skills/react-router` by default when running with `--yes` or in non-interactive shells +- Interactive runs prompt to include the skill, defaulting to yes +- Use `--no-agent-skills` to skip copying the skill diff --git a/packages/create-react-router/.changes/patch.use-node-parse-args.md b/packages/create-react-router/.changes/patch.use-node-parse-args.md index 86980802f4..6cd7cb06cd 100644 --- a/packages/create-react-router/.changes/patch.use-node-parse-args.md +++ b/packages/create-react-router/.changes/patch.use-node-parse-args.md @@ -1 +1 @@ -Use Node's built-in utilities for CLI argument parsing, ANSI-stripping, and child process execution to remove the `arg`, `strip-ansi`, and `execa` dependencies. +Use Node's built-in utilities for CLI argument parsing, ANSI-stripping, and child process execution to remove the `arg`, `strip-ansi`, and `execa` dependencies diff --git a/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md b/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md index 46f2ee79f3..f13eb266c1 100644 --- a/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md +++ b/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md @@ -1 +1 @@ -Fixed `react-router typegen` crashes under the Bun runtime when Babel default imports are already unwrapped. +Fixed `react-router typegen` crashes under the Bun runtime when Babel default imports are already unwrapped diff --git a/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md b/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md index 63b2e4c502..e64611f7b1 100644 --- a/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md +++ b/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md @@ -1,3 +1,3 @@ Only add the `"node"` Vite server condition for Framework mode apps that declare a Node server adapter dependency -This prevents non-Node SSR runtimes from resolving Node-specific package exports by default. +- This prevents non-Node SSR runtimes from resolving Node-specific package exports by default diff --git a/packages/react-router-serve/.changes/patch.remove-get-port.md b/packages/react-router-serve/.changes/patch.remove-get-port.md index 0824fa9572..df31efed37 100644 --- a/packages/react-router-serve/.changes/patch.remove-get-port.md +++ b/packages/react-router-serve/.changes/patch.remove-get-port.md @@ -1 +1 @@ -Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency. +Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency diff --git a/packages/react-router/.changes/minor.instrumentation-meta.md b/packages/react-router/.changes/minor.instrumentation-meta.md index c7ce47290e..5484a89d41 100644 --- a/packages/react-router/.changes/minor.instrumentation-meta.md +++ b/packages/react-router/.changes/minor.instrumentation-meta.md @@ -1,5 +1,4 @@ Return route metadata from server request, client navigation, and client fetcher instrumentations -- Adds result metadata after instrumented calls complete, including the URL, - matched route pattern, and params. -- Adds known HTTP status codes to server request handler instrumentation results. +- Adds result metadata after instrumented calls complete, including the URL, matched route pattern, and params +- Adds known HTTP status codes to server request handler instrumentation results diff --git a/scripts/changes/whats-changed.md b/scripts/changes/whats-changed.md new file mode 100644 index 0000000000..5d34e7352e --- /dev/null +++ b/scripts/changes/whats-changed.md @@ -0,0 +1,37 @@ +### What's Changed + +#### Agent Skills Installation via `create-react-router` + +`create-react-router` can now setup the React Router [Agent Skill](https://github.com/remix-run/react-router/tree/main/.agents/skills/react-router) in your new project. Interactive shells will issue a prompt on whether to include the skills, and they will be included by default with when running with `--yes` or in non-interactive shells. You can skip the skill addition with the `--no-agent-skills` CLI flag. + +#### Observability Metadata + +The Instrumentation APIs `info` parameter usually corresponds roughly to the inputs to the thing being instrumented (`handler`, `loader`, etc.). For route level instrumentations such as loaders, this contains useful information like the `pattern` (i.e., `/blog/:slug`) that allows you to report information that is easily aggregated by pattern, instead of having to manually deduce one from the request url. + +However, for outer layers such as the `handler` or a router `navigate` call - we can't provide a `pattern` because we haven't yet done any route matching, so it wasn't easy to report at those levels based on a generic route pattern. + +The internal instrumentation results now contain relevant metadata in `result.meta` for these outer instrumentation layers. For server `handler` instrumentations, we also expose the `statusCode` of the outgoing HTTP response: + +```ts +export const instrumentations = [ + { + handler(handler) { + handler.instrument({ + async request(handleRequest) { + let result = await handleRequest(); + + // Available to server `handler`, and router `navigate`/`fetch` instrumentations + let normalizedUrl = result.meta?.url; + let routePattern = result.meta?.pattern; + let routeParams = result.meta?.params; + + // Available to server `handler` only + let statusCode = result.statusCode; + }, + }); + }, + }, +]; +``` + +Please see the [docs](https://reactrouter.com/how-to/instrumentation#result-metadata) for more information. From 32876147fd414d9115ecdc344f6fef24ccf8a087 Mon Sep 17 00:00:00 2001 From: Ryan Florence Date: Mon, 29 Jun 2026 14:48:09 -0600 Subject: [PATCH 2/3] Release v8.1.0 (#15227) Co-authored-by: Remix Run Bot --- CHANGELOG.md | 67 +++++++++++++++++++ .../.changes/minor.agent-skills.md | 5 -- .../.changes/patch.use-node-parse-args.md | 1 - packages/create-react-router/CHANGELOG.md | 13 ++++ packages/create-react-router/package.json | 2 +- packages/react-router-architect/CHANGELOG.md | 8 +++ packages/react-router-architect/package.json | 2 +- packages/react-router-cloudflare/CHANGELOG.md | 7 ++ packages/react-router-cloudflare/package.json | 2 +- .../patch.build-end-after-prerender.md | 1 - .../patch.bun-babel-default-imports.md | 1 - ...ch.fix-envfile-warning-appeared-vite810.md | 1 - .../patch.vite-node-external-conditions.md | 3 - packages/react-router-dev/CHANGELOG.md | 14 ++++ packages/react-router-dev/package.json | 2 +- packages/react-router-express/CHANGELOG.md | 8 +++ packages/react-router-express/package.json | 2 +- packages/react-router-fs-routes/CHANGELOG.md | 7 ++ packages/react-router-fs-routes/package.json | 2 +- packages/react-router-node/CHANGELOG.md | 7 ++ packages/react-router-node/package.json | 2 +- .../CHANGELOG.md | 7 ++ .../package.json | 2 +- .../.changes/patch.remove-get-port.md | 1 - packages/react-router-serve/CHANGELOG.md | 10 +++ packages/react-router-serve/package.json | 2 +- .../.changes/minor.instrumentation-meta.md | 4 -- packages/react-router/CHANGELOG.md | 8 +++ packages/react-router/package.json | 2 +- scripts/changes/whats-changed.md | 37 ---------- 30 files changed, 166 insertions(+), 64 deletions(-) delete mode 100644 packages/create-react-router/.changes/minor.agent-skills.md delete mode 100644 packages/create-react-router/.changes/patch.use-node-parse-args.md delete mode 100644 packages/react-router-dev/.changes/patch.build-end-after-prerender.md delete mode 100644 packages/react-router-dev/.changes/patch.bun-babel-default-imports.md delete mode 100644 packages/react-router-dev/.changes/patch.fix-envfile-warning-appeared-vite810.md delete mode 100644 packages/react-router-dev/.changes/patch.vite-node-external-conditions.md delete mode 100644 packages/react-router-serve/.changes/patch.remove-get-port.md delete mode 100644 packages/react-router/.changes/minor.instrumentation-meta.md delete mode 100644 scripts/changes/whats-changed.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f1548a9f61..0c4875750f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,9 @@ We manage release notes in this file instead of the paginated Github Releases Pa Table of Contents - [React Router Releases](#react-router-releases) + - [v8.1.0](#v810) + - [Agent Skills Installation via `create-react-router`](#agent-skills-installation-via-create-react-router) + - [Observability Metadata](#observability-metadata) - [v8.0.1](#v801) - [v8.0.0](#v800) - [Baseline Support](#baseline-support) @@ -104,6 +107,70 @@ We manage release notes in this file instead of the paginated Github Releases Pa +## v8.1.0 + +Date: 2026-06-29 + +### What's Changed + +#### Agent Skills Installation via `create-react-router` + +`create-react-router` can now setup the React Router [Agent Skill](https://github.com/remix-run/react-router/tree/main/.agents/skills/react-router) in your new project. Interactive shells will issue a prompt on whether to include the skills, and they will be included by default with when running with `--yes` or in non-interactive shells. You can skip the skill addition with the `--no-agent-skills` CLI flag. + +#### Observability Metadata + +The Instrumentation APIs `info` parameter usually corresponds roughly to the inputs to the thing being instrumented (`handler`, `loader`, etc.). For route level instrumentations such as loaders, this contains useful information like the `pattern` (i.e., `/blog/:slug`) that allows you to report information that is easily aggregated by pattern, instead of having to manually deduce one from the request url. + +However, for outer layers such as the `handler` or a router `navigate` call - we can't provide a `pattern` because we haven't yet done any route matching, so it wasn't easy to report at those levels based on a generic route pattern. + +The internal instrumentation results now contain relevant metadata in `result.meta` for these outer instrumentation layers. For server `handler` instrumentations, we also expose the `statusCode` of the outgoing HTTP response: + +```ts +export const instrumentations = [ + { + handler(handler) { + handler.instrument({ + async request(handleRequest) { + let result = await handleRequest(); + + // Available to server `handler`, and router `navigate`/`fetch` instrumentations + let normalizedUrl = result.meta?.url; + let routePattern = result.meta?.pattern; + let routeParams = result.meta?.params; + + // Available to server `handler` only + let statusCode = result.statusCode; + }, + }); + }, + }, +]; +``` + +Please see the [docs](https://reactrouter.com/how-to/instrumentation#result-metadata) for more information. + +### Minor Changes + +- `react-router` - Return route metadata from server request, client navigation, and client fetcher instrumentations ([#15235](https://github.com/remix-run/react-router/pull/15235)) + - Adds result metadata after instrumented calls complete, including the URL, matched route pattern, and params + - Adds known HTTP status codes to server request handler instrumentation results +- `create-react-router` - Add a default-on CLI option to include the official React Router agent skill in generated projects ([#15213](https://github.com/remix-run/react-router/pull/15213)) + - New projects include `.agents/skills/react-router` by default when running with `--yes` or in non-interactive shells + - Interactive runs prompt to include the skill, defaulting to yes + - Use `--no-agent-skills` to skip copying the skill + +### Patch Changes + +- `@react-router/dev` - Fix a regression with the new prerendering plugin where the `react-router.config.ts` `buildEnd` hook would run before prerendering was completed ([#15211](https://github.com/remix-run/react-router/pull/15211)) +- `@react-router/dev` - Fixed `react-router typegen` crashes under the Bun runtime when Babel default imports are already unwrapped ([#15214](https://github.com/remix-run/react-router/pull/15214)) +- `@react-router/dev` - Replace the deprecated `envFile:false` Vite config with `envDir:false` to eliminate a deprecation warning when using vite@8.1.0+ ([#15230](https://github.com/remix-run/react-router/pull/15230)) +- `@react-router/dev` - Only add the `"node"` Vite server condition for Framework mode apps that declare a Node server adapter dependency ([#15242](https://github.com/remix-run/react-router/pull/15242)) + - This prevents non-Node SSR runtimes from resolving Node-specific package exports by default +- `@react-router/serve` - Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency ([#15239](https://github.com/remix-run/react-router/pull/15239)) +- `create-react-router` - Use Node's built-in utilities for CLI argument parsing, ANSI-stripping, and child process execution to remove the `arg`, `strip-ansi`, and `execa` dependencies ([#15231](https://github.com/remix-run/react-router/pull/15231)) + +**Full Changelog**: [`v8.0.1...v8.1.0`](https://github.com/remix-run/react-router/compare/react-router@8.0.1...react-router@8.1.0) + ## v8.0.1 Date: 2026-06-18 diff --git a/packages/create-react-router/.changes/minor.agent-skills.md b/packages/create-react-router/.changes/minor.agent-skills.md deleted file mode 100644 index c67139538d..0000000000 --- a/packages/create-react-router/.changes/minor.agent-skills.md +++ /dev/null @@ -1,5 +0,0 @@ -Add a default-on CLI option to include the official React Router agent skill in generated projects - -- New projects include `.agents/skills/react-router` by default when running with `--yes` or in non-interactive shells -- Interactive runs prompt to include the skill, defaulting to yes -- Use `--no-agent-skills` to skip copying the skill diff --git a/packages/create-react-router/.changes/patch.use-node-parse-args.md b/packages/create-react-router/.changes/patch.use-node-parse-args.md deleted file mode 100644 index 6cd7cb06cd..0000000000 --- a/packages/create-react-router/.changes/patch.use-node-parse-args.md +++ /dev/null @@ -1 +0,0 @@ -Use Node's built-in utilities for CLI argument parsing, ANSI-stripping, and child process execution to remove the `arg`, `strip-ansi`, and `execa` dependencies diff --git a/packages/create-react-router/CHANGELOG.md b/packages/create-react-router/CHANGELOG.md index d2ad382a70..9a3996c9e4 100644 --- a/packages/create-react-router/CHANGELOG.md +++ b/packages/create-react-router/CHANGELOG.md @@ -1,5 +1,18 @@ # `create-react-router` +## v8.1.0 + +### Minor Changes + +- Add a default-on CLI option to include the official React Router agent skill in generated projects ([#15213](https://github.com/remix-run/react-router/pull/15213)) + - New projects include `.agents/skills/react-router` by default when running with `--yes` or in non-interactive shells + - Interactive runs prompt to include the skill, defaulting to yes + - Use `--no-agent-skills` to skip copying the skill + +### Patch Changes + +- Use Node's built-in utilities for CLI argument parsing, ANSI-stripping, and child process execution to remove the `arg`, `strip-ansi`, and `execa` dependencies ([#15231](https://github.com/remix-run/react-router/pull/15231)) + ## v8.0.1 ### Patch Changes diff --git a/packages/create-react-router/package.json b/packages/create-react-router/package.json index 5b5b10e09f..a282395c79 100644 --- a/packages/create-react-router/package.json +++ b/packages/create-react-router/package.json @@ -1,7 +1,7 @@ { "name": "create-react-router", "type": "module", - "version": "8.0.1", + "version": "8.1.0", "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 5212dbb44f..ebedd043d6 100644 --- a/packages/react-router-architect/CHANGELOG.md +++ b/packages/react-router-architect/CHANGELOG.md @@ -1,5 +1,13 @@ # `@react-router/architect` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + - [`@react-router/node@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-architect/package.json b/packages/react-router-architect/package.json index 49f6223109..d21551ec8a 100644 --- a/packages/react-router-architect/package.json +++ b/packages/react-router-architect/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/architect", "type": "module", - "version": "8.0.1", + "version": "8.1.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 a445375b34..1e06837081 100644 --- a/packages/react-router-cloudflare/CHANGELOG.md +++ b/packages/react-router-cloudflare/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/cloudflare` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-cloudflare/package.json b/packages/react-router-cloudflare/package.json index 537596c13f..5eeddace80 100644 --- a/packages/react-router-cloudflare/package.json +++ b/packages/react-router-cloudflare/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/cloudflare", "type": "module", - "version": "8.0.1", + "version": "8.1.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.build-end-after-prerender.md b/packages/react-router-dev/.changes/patch.build-end-after-prerender.md deleted file mode 100644 index d93d15b962..0000000000 --- a/packages/react-router-dev/.changes/patch.build-end-after-prerender.md +++ /dev/null @@ -1 +0,0 @@ -Fix a regression with the new prerendering plugin where the `react-router.config.ts` `buildEnd` hook would run before prerendering was completed diff --git a/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md b/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md deleted file mode 100644 index f13eb266c1..0000000000 --- a/packages/react-router-dev/.changes/patch.bun-babel-default-imports.md +++ /dev/null @@ -1 +0,0 @@ -Fixed `react-router typegen` crashes under the Bun runtime when Babel default imports are already unwrapped diff --git a/packages/react-router-dev/.changes/patch.fix-envfile-warning-appeared-vite810.md b/packages/react-router-dev/.changes/patch.fix-envfile-warning-appeared-vite810.md deleted file mode 100644 index da1044700a..0000000000 --- a/packages/react-router-dev/.changes/patch.fix-envfile-warning-appeared-vite810.md +++ /dev/null @@ -1 +0,0 @@ -Replace the deprecated `envFile:false` Vite config with `envDir:false` to eliminate a deprecation warning when using vite@8.1.0+ diff --git a/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md b/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md deleted file mode 100644 index e64611f7b1..0000000000 --- a/packages/react-router-dev/.changes/patch.vite-node-external-conditions.md +++ /dev/null @@ -1,3 +0,0 @@ -Only add the `"node"` Vite server condition for Framework mode apps that declare a Node server adapter dependency - -- This prevents non-Node SSR runtimes from resolving Node-specific package exports by default diff --git a/packages/react-router-dev/CHANGELOG.md b/packages/react-router-dev/CHANGELOG.md index 0ac3bd9a96..83213fd938 100644 --- a/packages/react-router-dev/CHANGELOG.md +++ b/packages/react-router-dev/CHANGELOG.md @@ -1,5 +1,19 @@ # `@react-router/dev` +## v8.1.0 + +### Patch Changes + +- Fix a regression with the new prerendering plugin where the `react-router.config.ts` `buildEnd` hook would run before prerendering was completed ([#15211](https://github.com/remix-run/react-router/pull/15211)) +- Fixed `react-router typegen` crashes under the Bun runtime when Babel default imports are already unwrapped ([#15214](https://github.com/remix-run/react-router/pull/15214)) +- Replace the deprecated `envFile:false` Vite config with `envDir:false` to eliminate a deprecation warning when using vite@8.1.0+ ([#15230](https://github.com/remix-run/react-router/pull/15230)) +- Only add the `"node"` Vite server condition for Framework mode apps that declare a Node server adapter dependency ([#15242](https://github.com/remix-run/react-router/pull/15242)) + - This prevents non-Node SSR runtimes from resolving Node-specific package exports by default +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + - [`@react-router/node@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.1.0) + - [`@react-router/serve@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/serve@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-dev/package.json b/packages/react-router-dev/package.json index 85e251e1e9..381d4e83f3 100644 --- a/packages/react-router-dev/package.json +++ b/packages/react-router-dev/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/dev", "type": "module", - "version": "8.0.1", + "version": "8.1.0", "description": "Dev tools and CLI for React Router", "keywords": [ "react", diff --git a/packages/react-router-express/CHANGELOG.md b/packages/react-router-express/CHANGELOG.md index 886cfb1de4..ef65397247 100644 --- a/packages/react-router-express/CHANGELOG.md +++ b/packages/react-router-express/CHANGELOG.md @@ -1,5 +1,13 @@ # `@react-router/express` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + - [`@react-router/node@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-express/package.json b/packages/react-router-express/package.json index 75e11a4dfc..34c8fd1db7 100644 --- a/packages/react-router-express/package.json +++ b/packages/react-router-express/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/express", "type": "module", - "version": "8.0.1", + "version": "8.1.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 1dcf7dad87..9fa7fbbb79 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` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`@react-router/dev@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/dev@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-fs-routes/package.json b/packages/react-router-fs-routes/package.json index 00609bc202..b4b63af1b4 100644 --- a/packages/react-router-fs-routes/package.json +++ b/packages/react-router-fs-routes/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/fs-routes", "type": "module", - "version": "8.0.1", + "version": "8.1.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 ff6c9afe16..baa5cbdb92 100644 --- a/packages/react-router-node/CHANGELOG.md +++ b/packages/react-router-node/CHANGELOG.md @@ -1,5 +1,12 @@ # `@react-router/node` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-node/package.json b/packages/react-router-node/package.json index 9682997ee1..bb824bcd1c 100644 --- a/packages/react-router-node/package.json +++ b/packages/react-router-node/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/node", "type": "module", - "version": "8.0.1", + "version": "8.1.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 bd935d047c..917d97f27a 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` +## v8.1.0 + +### Patch Changes + +- Updated dependencies: + - [`@react-router/dev@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/dev@8.1.0) + ## v8.0.1 ### 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 c0be299b18..444d452930 100644 --- a/packages/react-router-remix-routes-option-adapter/package.json +++ b/packages/react-router-remix-routes-option-adapter/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/remix-routes-option-adapter", "type": "module", - "version": "8.0.1", + "version": "8.1.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/.changes/patch.remove-get-port.md b/packages/react-router-serve/.changes/patch.remove-get-port.md deleted file mode 100644 index df31efed37..0000000000 --- a/packages/react-router-serve/.changes/patch.remove-get-port.md +++ /dev/null @@ -1 +0,0 @@ -Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency diff --git a/packages/react-router-serve/CHANGELOG.md b/packages/react-router-serve/CHANGELOG.md index e0d1f51e1b..7fbde4acd1 100644 --- a/packages/react-router-serve/CHANGELOG.md +++ b/packages/react-router-serve/CHANGELOG.md @@ -1,5 +1,15 @@ # `@react-router/serve` +## v8.1.0 + +### Patch Changes + +- Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency ([#15239](https://github.com/remix-run/react-router/pull/15239)) +- Updated dependencies: + - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0) + - [`@react-router/express@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/express@8.1.0) + - [`@react-router/node@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.1.0) + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router-serve/package.json b/packages/react-router-serve/package.json index c572c3a277..49c3e8732e 100644 --- a/packages/react-router-serve/package.json +++ b/packages/react-router-serve/package.json @@ -1,7 +1,7 @@ { "name": "@react-router/serve", "type": "module", - "version": "8.0.1", + "version": "8.1.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/minor.instrumentation-meta.md b/packages/react-router/.changes/minor.instrumentation-meta.md deleted file mode 100644 index 5484a89d41..0000000000 --- a/packages/react-router/.changes/minor.instrumentation-meta.md +++ /dev/null @@ -1,4 +0,0 @@ -Return route metadata from server request, client navigation, and client fetcher instrumentations - -- Adds result metadata after instrumented calls complete, including the URL, matched route pattern, and params -- Adds known HTTP status codes to server request handler instrumentation results diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index a348e2e47b..14c58666f2 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,13 @@ # `react-router` +## v8.1.0 + +### Minor Changes + +- Return route metadata from server request, client navigation, and client fetcher instrumentations ([#15235](https://github.com/remix-run/react-router/pull/15235)) + - Adds result metadata after instrumented calls complete, including the URL, matched route pattern, and params + - Adds known HTTP status codes to server request handler instrumentation results + ## v8.0.1 ### Patch Changes diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 173f68aa64..9fd6c022e1 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,7 +1,7 @@ { "name": "react-router", "type": "module", - "version": "8.0.1", + "version": "8.1.0", "description": "Declarative routing for React", "keywords": [ "react", diff --git a/scripts/changes/whats-changed.md b/scripts/changes/whats-changed.md deleted file mode 100644 index 5d34e7352e..0000000000 --- a/scripts/changes/whats-changed.md +++ /dev/null @@ -1,37 +0,0 @@ -### What's Changed - -#### Agent Skills Installation via `create-react-router` - -`create-react-router` can now setup the React Router [Agent Skill](https://github.com/remix-run/react-router/tree/main/.agents/skills/react-router) in your new project. Interactive shells will issue a prompt on whether to include the skills, and they will be included by default with when running with `--yes` or in non-interactive shells. You can skip the skill addition with the `--no-agent-skills` CLI flag. - -#### Observability Metadata - -The Instrumentation APIs `info` parameter usually corresponds roughly to the inputs to the thing being instrumented (`handler`, `loader`, etc.). For route level instrumentations such as loaders, this contains useful information like the `pattern` (i.e., `/blog/:slug`) that allows you to report information that is easily aggregated by pattern, instead of having to manually deduce one from the request url. - -However, for outer layers such as the `handler` or a router `navigate` call - we can't provide a `pattern` because we haven't yet done any route matching, so it wasn't easy to report at those levels based on a generic route pattern. - -The internal instrumentation results now contain relevant metadata in `result.meta` for these outer instrumentation layers. For server `handler` instrumentations, we also expose the `statusCode` of the outgoing HTTP response: - -```ts -export const instrumentations = [ - { - handler(handler) { - handler.instrument({ - async request(handleRequest) { - let result = await handleRequest(); - - // Available to server `handler`, and router `navigate`/`fetch` instrumentations - let normalizedUrl = result.meta?.url; - let routePattern = result.meta?.pattern; - let routeParams = result.meta?.params; - - // Available to server `handler` only - let statusCode = result.statusCode; - }, - }); - }, - }, -]; -``` - -Please see the [docs](https://reactrouter.com/how-to/instrumentation#result-metadata) for more information. From 4ec31323cda27007f99daa2cc947f4a3c9bdf12e Mon Sep 17 00:00:00 2001 From: Matt Brophy Date: Mon, 29 Jun 2026 17:24:31 -0400 Subject: [PATCH 3/3] Guard PR checks script changes (#15254) * Guard PR checks script changes Assisted-By: devx/415a0296-ddae-496c-bc3d-6618aeb0e496 * Provide token for PR checks diff Assisted-By: devx/415a0296-ddae-496c-bc3d-6618aeb0e496 * Limit change file warning to package changes Assisted-By: devx/415a0296-ddae-496c-bc3d-6618aeb0e496 --- .github/workflows/pr-checks.yml | 34 +++++++++++++++++++++++++++++++++ scripts/pr.ts | 8 ++++++++ 2 files changed, 42 insertions(+) diff --git a/.github/workflows/pr-checks.yml b/.github/workflows/pr-checks.yml index b7d4230d40..0132b1b88d 100644 --- a/.github/workflows/pr-checks.yml +++ b/.github/workflows/pr-checks.yml @@ -22,22 +22,56 @@ jobs: pull-requests: read steps: + - name: Check changed files + env: + GH_TOKEN: ${{ github.token }} + id: changed-files + run: | + changed_files="$(gh pr diff "${{ github.event.pull_request.number }}" --repo "$GITHUB_REPOSITORY" --name-only)" + + touches_scripts="false" + touches_packages="false" + + while IFS= read -r file; do + case "$file" in + scripts/*) touches_scripts="true" ;; + packages/*) touches_packages="true" ;; + esac + done <<< "$changed_files" + + if [ "$touches_scripts" = "true" ] && [ "$touches_packages" = "true" ]; then + echo "PR checks cannot safely run when a PR changes both scripts/ and packages/." + echo "Please split automation changes and package changes into separate PRs." + exit 1 + elif [ "$touches_scripts" = "true" ]; then + echo "PR touches scripts/ without touching packages/; skipping community helper checks." + echo '{"prNumber":${{ github.event.pull_request.number }},"actions":[]}' > pr-checks-result.json + echo "mode=skip" >> "$GITHUB_OUTPUT" + else + echo "mode=run" >> "$GITHUB_OUTPUT" + fi + - name: Checkout repo + if: steps.changed-files.outputs.mode == 'run' uses: actions/checkout@v7 - name: Setup pnpm + if: steps.changed-files.outputs.mode == 'run' uses: pnpm/action-setup@v6 - name: Setup node + if: steps.changed-files.outputs.mode == 'run' uses: actions/setup-node@v6 with: node-version-file: ".nvmrc" cache: pnpm - name: Install deps + if: steps.changed-files.outputs.mode == 'run' run: pnpm install --frozen-lockfile - name: Run checks + if: steps.changed-files.outputs.mode == 'run' env: GITHUB_TOKEN: ${{ github.token }} PR_NUMBER: ${{ github.event.pull_request.number }} diff --git a/scripts/pr.ts b/scripts/pr.ts index 0da0c9dc53..fd544e6706 100644 --- a/scripts/pr.ts +++ b/scripts/pr.ts @@ -144,6 +144,9 @@ async function changeFileCheck(ctx: CheckContext): Promise { } let files = await getPrFiles(ctx.prNumber); + let touchesPackageFiles = files.some((f) => + f.filename.startsWith("packages/"), + ); let regex = /^packages\/[^/]+\/\.changes\/(major|minor|patch|unstable)\.[^/]+\.md$/; let summaries: ChangeFileSummary[] = files @@ -162,6 +165,11 @@ async function changeFileCheck(ctx: CheckContext): Promise { console.log(`changeFileCheck: found ${summaries.length} change files`); + if (summaries.length === 0 && !touchesPackageFiles) { + console.log("changeFileCheck: no package files changed"); + return []; + } + let body = CHANGE_FILE_MISSING_COMMENT; if (summaries.length > 0) {