Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/pr-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }}
Expand Down
67 changes: 67 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ We manage release notes in this file instead of the paginated Github Releases Pa
<summary>Table of Contents</summary>

- [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)
Expand Down Expand Up @@ -104,6 +107,70 @@ We manage release notes in this file instead of the paginated Github Releases Pa

</details>

## 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
Expand Down
5 changes: 0 additions & 5 deletions packages/create-react-router/.changes/minor.agent-skills.md

This file was deleted.

This file was deleted.

13 changes: 13 additions & 0 deletions packages/create-react-router/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/create-react-router/package.json
Original file line number Diff line number Diff line change
@@ -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": {
Expand Down
8 changes: 8 additions & 0 deletions packages/react-router-architect/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-architect/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
7 changes: 7 additions & 0 deletions packages/react-router-cloudflare/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-cloudflare/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

14 changes: 14 additions & 0 deletions packages/react-router-dev/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-dev/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
8 changes: 8 additions & 0 deletions packages/react-router-express/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-express/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
7 changes: 7 additions & 0 deletions packages/react-router-fs-routes/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-fs-routes/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
7 changes: 7 additions & 0 deletions packages/react-router-node/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-node/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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"
Expand Down

This file was deleted.

10 changes: 10 additions & 0 deletions packages/react-router-serve/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion packages/react-router-serve/package.json
Original file line number Diff line number Diff line change
@@ -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"
Expand Down
5 changes: 0 additions & 5 deletions packages/react-router/.changes/minor.instrumentation-meta.md

This file was deleted.

8 changes: 8 additions & 0 deletions packages/react-router/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Loading