diff --git a/CHANGELOG.md b/CHANGELOG.md
index de08d367e7..09263546d7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,196 +13,198 @@ We manage release notes in this file instead of the paginated Github Releases Pa
Table of Contents
- [React Router Releases](#react-router-releases)
+ - [v6.30.1](#v6301)
+ - [Patch Changes](#patch-changes)
- [v6.30.0](#v6300)
- [Minor Changes](#minor-changes)
- - [Patch Changes](#patch-changes)
+ - [Patch Changes](#patch-changes-1)
- [v6.29.0](#v6290)
- [Minor Changes](#minor-changes-1)
- - [Patch Changes](#patch-changes-1)
- - [v6.28.2](#v6282)
- [Patch Changes](#patch-changes-2)
- - [v6.28.1](#v6281)
+ - [v6.28.2](#v6282)
- [Patch Changes](#patch-changes-3)
+ - [v6.28.1](#v6281)
+ - [Patch Changes](#patch-changes-4)
- [v6.28.0](#v6280)
- [What's Changed](#whats-changed)
- [Minor Changes](#minor-changes-2)
- - [Patch Changes](#patch-changes-4)
+ - [Patch Changes](#patch-changes-5)
- [v6.27.0](#v6270)
- [What's Changed](#whats-changed-1)
- [Stabilized APIs](#stabilized-apis)
- [Minor Changes](#minor-changes-3)
- - [Patch Changes](#patch-changes-5)
- - [v6.26.2](#v6262)
- [Patch Changes](#patch-changes-6)
- - [v6.26.1](#v6261)
+ - [v6.26.2](#v6262)
- [Patch Changes](#patch-changes-7)
+ - [v6.26.1](#v6261)
+ - [Patch Changes](#patch-changes-8)
- [v6.26.0](#v6260)
- [Minor Changes](#minor-changes-4)
- - [Patch Changes](#patch-changes-8)
- - [v6.25.1](#v6251)
- [Patch Changes](#patch-changes-9)
+ - [v6.25.1](#v6251)
+ - [Patch Changes](#patch-changes-10)
- [v6.25.0](#v6250)
- [What's Changed](#whats-changed-2)
- [Stabilized `v7_skipActionErrorRevalidation`](#stabilized-v7_skipactionerrorrevalidation)
- [Minor Changes](#minor-changes-5)
- - [Patch Changes](#patch-changes-10)
- - [v6.24.1](#v6241)
- [Patch Changes](#patch-changes-11)
+ - [v6.24.1](#v6241)
+ - [Patch Changes](#patch-changes-12)
- [v6.24.0](#v6240)
- [What's Changed](#whats-changed-3)
- [Lazy Route Discovery (a.k.a. "Fog of War")](#lazy-route-discovery-aka-fog-of-war)
- [Minor Changes](#minor-changes-6)
- - [Patch Changes](#patch-changes-12)
- - [v6.23.1](#v6231)
- [Patch Changes](#patch-changes-13)
+ - [v6.23.1](#v6231)
+ - [Patch Changes](#patch-changes-14)
- [v6.23.0](#v6230)
- [What's Changed](#whats-changed-4)
- [Data Strategy (unstable)](#data-strategy-unstable)
- [Skip Action Error Revalidation (unstable)](#skip-action-error-revalidation-unstable)
- [Minor Changes](#minor-changes-7)
- [v6.22.3](#v6223)
- - [Patch Changes](#patch-changes-14)
- - [v6.22.2](#v6222)
- [Patch Changes](#patch-changes-15)
- - [v6.22.1](#v6221)
+ - [v6.22.2](#v6222)
- [Patch Changes](#patch-changes-16)
+ - [v6.22.1](#v6221)
+ - [Patch Changes](#patch-changes-17)
- [v6.22.0](#v6220)
- [What's Changed](#whats-changed-5)
- [Core Web Vitals Technology Report Flag](#core-web-vitals-technology-report-flag)
- [Minor Changes](#minor-changes-8)
- - [Patch Changes](#patch-changes-17)
- - [v6.21.3](#v6213)
- [Patch Changes](#patch-changes-18)
- - [v6.21.2](#v6212)
+ - [v6.21.3](#v6213)
- [Patch Changes](#patch-changes-19)
- - [v6.21.1](#v6211)
+ - [v6.21.2](#v6212)
- [Patch Changes](#patch-changes-20)
+ - [v6.21.1](#v6211)
+ - [Patch Changes](#patch-changes-21)
- [v6.21.0](#v6210)
- [What's Changed](#whats-changed-6)
- [`future.v7_relativeSplatPath`](#futurev7_relativesplatpath)
- [Partial Hydration](#partial-hydration)
- [Minor Changes](#minor-changes-9)
- - [Patch Changes](#patch-changes-21)
- - [v6.20.1](#v6201)
- [Patch Changes](#patch-changes-22)
+ - [v6.20.1](#v6201)
+ - [Patch Changes](#patch-changes-23)
- [v6.20.0](#v6200)
- [Minor Changes](#minor-changes-10)
- - [Patch Changes](#patch-changes-23)
+ - [Patch Changes](#patch-changes-24)
- [v6.19.0](#v6190)
- [What's Changed](#whats-changed-7)
- [`unstable_flushSync` API](#unstable_flushsync-api)
- [Minor Changes](#minor-changes-11)
- - [Patch Changes](#patch-changes-24)
+ - [Patch Changes](#patch-changes-25)
- [v6.18.0](#v6180)
- [What's Changed](#whats-changed-8)
- [New Fetcher APIs](#new-fetcher-apis)
- [Persistence Future Flag (`future.v7_fetcherPersist`)](#persistence-future-flag-futurev7_fetcherpersist)
- [Minor Changes](#minor-changes-12)
- - [Patch Changes](#patch-changes-25)
+ - [Patch Changes](#patch-changes-26)
- [v6.17.0](#v6170)
- [What's Changed](#whats-changed-9)
- [View Transitions 🚀](#view-transitions-)
- [Minor Changes](#minor-changes-13)
- - [Patch Changes](#patch-changes-26)
+ - [Patch Changes](#patch-changes-27)
- [v6.16.0](#v6160)
- [Minor Changes](#minor-changes-14)
- - [Patch Changes](#patch-changes-27)
+ - [Patch Changes](#patch-changes-28)
- [v6.15.0](#v6150)
- [Minor Changes](#minor-changes-15)
- - [Patch Changes](#patch-changes-28)
- - [v6.14.2](#v6142)
- [Patch Changes](#patch-changes-29)
- - [v6.14.1](#v6141)
+ - [v6.14.2](#v6142)
- [Patch Changes](#patch-changes-30)
+ - [v6.14.1](#v6141)
+ - [Patch Changes](#patch-changes-31)
- [v6.14.0](#v6140)
- [What's Changed](#whats-changed-10)
- [JSON/Text Submissions](#jsontext-submissions)
- [Minor Changes](#minor-changes-16)
- - [Patch Changes](#patch-changes-31)
+ - [Patch Changes](#patch-changes-32)
- [v6.13.0](#v6130)
- [What's Changed](#whats-changed-11)
- [`future.v7_startTransition`](#futurev7_starttransition)
- [Minor Changes](#minor-changes-17)
- - [Patch Changes](#patch-changes-32)
- - [v6.12.1](#v6121)
- [Patch Changes](#patch-changes-33)
+ - [v6.12.1](#v6121)
+ - [Patch Changes](#patch-changes-34)
- [v6.12.0](#v6120)
- [What's Changed](#whats-changed-12)
- [`React.startTransition` support](#reactstarttransition-support)
- [Minor Changes](#minor-changes-18)
- - [Patch Changes](#patch-changes-34)
- - [v6.11.2](#v6112)
- [Patch Changes](#patch-changes-35)
- - [v6.11.1](#v6111)
+ - [v6.11.2](#v6112)
- [Patch Changes](#patch-changes-36)
+ - [v6.11.1](#v6111)
+ - [Patch Changes](#patch-changes-37)
- [v6.11.0](#v6110)
- [Minor Changes](#minor-changes-19)
- - [Patch Changes](#patch-changes-37)
+ - [Patch Changes](#patch-changes-38)
- [v6.10.0](#v6100)
- [What's Changed](#whats-changed-13)
- [Minor Changes](#minor-changes-20)
- [`future.v7_normalizeFormMethod`](#futurev7_normalizeformmethod)
- - [Patch Changes](#patch-changes-38)
+ - [Patch Changes](#patch-changes-39)
- [v6.9.0](#v690)
- [What's Changed](#whats-changed-14)
- [`Component`/`ErrorBoundary` route properties](#componenterrorboundary-route-properties)
- [Introducing Lazy Route Modules](#introducing-lazy-route-modules)
- [Minor Changes](#minor-changes-21)
- - [Patch Changes](#patch-changes-39)
- - [v6.8.2](#v682)
- [Patch Changes](#patch-changes-40)
- - [v6.8.1](#v681)
+ - [v6.8.2](#v682)
- [Patch Changes](#patch-changes-41)
+ - [v6.8.1](#v681)
+ - [Patch Changes](#patch-changes-42)
- [v6.8.0](#v680)
- [Minor Changes](#minor-changes-22)
- - [Patch Changes](#patch-changes-42)
+ - [Patch Changes](#patch-changes-43)
- [v6.7.0](#v670)
- [Minor Changes](#minor-changes-23)
- - [Patch Changes](#patch-changes-43)
- - [v6.6.2](#v662)
- [Patch Changes](#patch-changes-44)
- - [v6.6.1](#v661)
+ - [v6.6.2](#v662)
- [Patch Changes](#patch-changes-45)
+ - [v6.6.1](#v661)
+ - [Patch Changes](#patch-changes-46)
- [v6.6.0](#v660)
- [What's Changed](#whats-changed-15)
- [Minor Changes](#minor-changes-24)
- - [Patch Changes](#patch-changes-46)
+ - [Patch Changes](#patch-changes-47)
- [v6.5.0](#v650)
- [What's Changed](#whats-changed-16)
- [Minor Changes](#minor-changes-25)
- - [Patch Changes](#patch-changes-47)
- - [v6.4.5](#v645)
- [Patch Changes](#patch-changes-48)
- - [v6.4.4](#v644)
+ - [v6.4.5](#v645)
- [Patch Changes](#patch-changes-49)
- - [v6.4.3](#v643)
+ - [v6.4.4](#v644)
- [Patch Changes](#patch-changes-50)
- - [v6.4.2](#v642)
+ - [v6.4.3](#v643)
- [Patch Changes](#patch-changes-51)
- - [v6.4.1](#v641)
+ - [v6.4.2](#v642)
- [Patch Changes](#patch-changes-52)
+ - [v6.4.1](#v641)
+ - [Patch Changes](#patch-changes-53)
- [v6.4.0](#v640)
- [What's Changed](#whats-changed-17)
- [Remix Data APIs](#remix-data-apis)
- - [Patch Changes](#patch-changes-53)
+ - [Patch Changes](#patch-changes-54)
- [v6.3.0](#v630)
- [Minor Changes](#minor-changes-26)
- [v6.2.2](#v622)
- - [Patch Changes](#patch-changes-54)
- - [v6.2.1](#v621)
- [Patch Changes](#patch-changes-55)
+ - [v6.2.1](#v621)
+ - [Patch Changes](#patch-changes-56)
- [v6.2.0](#v620)
- [Minor Changes](#minor-changes-27)
- - [Patch Changes](#patch-changes-56)
- - [v6.1.1](#v611)
- [Patch Changes](#patch-changes-57)
+ - [v6.1.1](#v611)
+ - [Patch Changes](#patch-changes-58)
- [v6.1.0](#v610)
- [Minor Changes](#minor-changes-28)
- - [Patch Changes](#patch-changes-58)
- - [v6.0.2](#v602)
- [Patch Changes](#patch-changes-59)
- - [v6.0.1](#v601)
+ - [v6.0.2](#v602)
- [Patch Changes](#patch-changes-60)
+ - [v6.0.1](#v601)
+ - [Patch Changes](#patch-changes-61)
- [v6.0.0](#v600)
@@ -226,6 +228,17 @@ Date: YYYY-MM-DD
**Full Changelog**: [`v6.X.Y...v6.X.Y`](https://github.com/remix-run/react-router/compare/react-router@6.X.Y...react-router@6.X.Y)
-->
+## v6.30.1
+
+Date: 2025-05-20
+
+### Patch Changes
+
+- Partially revert optimization added in `6.29.0` to reduce calls to `matchRoutes` because it surfaced other issues ([#13623](https://github.com/remix-run/react-router/pull/13623))
+- Stop logging invalid warning when `v7_relativeSplatPath` is set to `false` ([#13502](https://github.com/remix-run/react-router/pull/13502))
+
+**Full Changelog**: [`v6.30.0...v6.30.1`](https://github.com/remix-run/react-router/compare/react-router@6.30.0...react-router@6.30.1)
+
## v6.30.0
Date: 2025-02-27
diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md
index 8dcc97c98c..1d06adb318 100644
--- a/DEVELOPMENT.md
+++ b/DEVELOPMENT.md
@@ -108,18 +108,8 @@ Hotfix releases follow the same process as standard releases above, but the `rel
- Once the stable release is out:
- Merge `release-v6` back to `v6` with a **Normal Merge**
- **Do not** merge `release-v6` to `main`
- - Copy the updated root `CHANGELOG.md` entries for the `6.X.Y` release to `main` and `dev`
- - `git checkout main`
- - `git diff react-router@6.X.Y...react-router@6.X.Y -- "***CHANGELOG.md" > ./docs.patch`
- - `git apply ./docs.patch`
- - `git checkout dev`
- - `git apply ./docs.patch`
- - `rm ./docs.patch`
- - Copy the docs changes to `main` so they show up on the live docs site for v6
- - `git checkout main`
- - `git diff react-router@6.X.Y...react-router@6.X.Y docs/ > ./docs.patch`
- - `git apply ./docs.patch`
- - `rm ./docs.patch`
+ - Manually copy the new root `CHANGELOG.md` entry to `main` and `dev`
+ - We don't worry about backporting individual `packages/*/CHANGELOG.md` updates to `main` for subsequent v6 releases
- The _code_ changes should already be in the `dev` branch
- This should have happened at the time the v6 change was made (except for changes such as deprecation warnings)
- Confirm that the commits in this release are all included in `dev` already, and if not you can manually bring them over by cherry-picking the commit or re-doing the work
diff --git a/build.utils.d.ts b/build.utils.d.ts
new file mode 100644
index 0000000000..575cd77216
--- /dev/null
+++ b/build.utils.d.ts
@@ -0,0 +1 @@
+export declare function createBanner(packageName: string, version: string): string;
diff --git a/contributors.yml b/contributors.yml
index c6771a6f62..65f570562c 100644
--- a/contributors.yml
+++ b/contributors.yml
@@ -155,6 +155,7 @@
- KutnerUri
- kylegirard
- landisdesign
+- laryro
- latin-1
- lequangdongg
- liuhanqu
diff --git a/docs/hooks/use-blocker.md b/docs/hooks/use-blocker.md
index e3c7600ba8..b86cddf03f 100644
--- a/docs/hooks/use-blocker.md
+++ b/docs/hooks/use-blocker.md
@@ -60,6 +60,8 @@ enum HistoryAction {
The `useBlocker` hook allows you to prevent the user from navigating away from the current location, and present them with a custom UI to allow them to confirm the navigation.
+This feature only works if using a data router, see [Picking a Router][pickingarouter]
+
This only works for client-side navigations within your React Router application and will not block document requests. To prevent document navigations you will need to add your own `beforeunload` event handler.
@@ -134,3 +136,4 @@ When in a `blocked` state, you may call `blocker.proceed()` to proceed to the bl
When in a `blocked` state, you may call `blocker.reset()` to return the blocker back to an `unblocked` state and leave the user at the current location.
[example]: https://github.com/remix-run/react-router/tree/main/examples/navigation-blocking
+[pickingarouter]: ../routers/picking-a-router
diff --git a/packages/react-router-dom-v5-compat/CHANGELOG.md b/packages/react-router-dom-v5-compat/CHANGELOG.md
index 447942328d..a3e80169b1 100644
--- a/packages/react-router-dom-v5-compat/CHANGELOG.md
+++ b/packages/react-router-dom-v5-compat/CHANGELOG.md
@@ -1,5 +1,13 @@
# `react-router-dom-v5-compat`
+## 6.30.1
+
+### Patch Changes
+
+- Updated dependencies:
+ - `react-router@6.30.1`
+ - `react-router-dom@6.30.1`
+
## 6.30.0
### Patch Changes
diff --git a/packages/react-router-dom-v5-compat/package.json b/packages/react-router-dom-v5-compat/package.json
index 2c259e573b..14457b5bae 100644
--- a/packages/react-router-dom-v5-compat/package.json
+++ b/packages/react-router-dom-v5-compat/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router-dom-v5-compat",
- "version": "6.30.0",
+ "version": "6.30.1",
"description": "Migration path to React Router v6 from v4/5",
"keywords": [
"react",
diff --git a/packages/react-router-dom/CHANGELOG.md b/packages/react-router-dom/CHANGELOG.md
index 75993ea135..1514ddbbb7 100644
--- a/packages/react-router-dom/CHANGELOG.md
+++ b/packages/react-router-dom/CHANGELOG.md
@@ -1,5 +1,12 @@
# `react-router-dom`
+## 6.30.1
+
+### Patch Changes
+
+- Updated dependencies:
+ - `react-router@6.30.1`
+
## 6.30.0
### Minor Changes
diff --git a/packages/react-router-dom/package.json b/packages/react-router-dom/package.json
index d760e8d988..7aa4da072c 100644
--- a/packages/react-router-dom/package.json
+++ b/packages/react-router-dom/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router-dom",
- "version": "6.30.0",
+ "version": "6.30.1",
"description": "Declarative routing for React web applications",
"keywords": [
"react",
diff --git a/packages/react-router-native/CHANGELOG.md b/packages/react-router-native/CHANGELOG.md
index 60db2406ae..93ac02f561 100644
--- a/packages/react-router-native/CHANGELOG.md
+++ b/packages/react-router-native/CHANGELOG.md
@@ -1,5 +1,12 @@
# `react-router-native`
+## 6.30.1
+
+### Patch Changes
+
+- Updated dependencies:
+ - `react-router@6.30.1`
+
## 6.30.0
### Patch Changes
diff --git a/packages/react-router-native/package.json b/packages/react-router-native/package.json
index d58a346119..4d3b5428b7 100644
--- a/packages/react-router-native/package.json
+++ b/packages/react-router-native/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router-native",
- "version": "6.30.0",
+ "version": "6.30.1",
"description": "Declarative routing for React Native applications",
"keywords": [
"react",
diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md
index 3857b3e135..666bab61fd 100644
--- a/packages/react-router/CHANGELOG.md
+++ b/packages/react-router/CHANGELOG.md
@@ -1,5 +1,12 @@
# `react-router`
+## 6.30.1
+
+### Patch Changes
+
+- Partially revert optimization added in `6.29.0` to reduce calls to `matchRoutes` because it surfaced other issues ([#13623](https://github.com/remix-run/react-router/pull/13623))
+- Stop logging invalid warning when `v7_relativeSplatPath` is set to false ([#13502](https://github.com/remix-run/react-router/pull/13502))
+
## 6.30.0
### Minor Changes
diff --git a/packages/react-router/lib/deprecations.ts b/packages/react-router/lib/deprecations.ts
index f6b4238442..188e200afe 100644
--- a/packages/react-router/lib/deprecations.ts
+++ b/packages/react-router/lib/deprecations.ts
@@ -32,7 +32,7 @@ export function logV6DeprecationWarnings(
if (
renderFuture?.v7_relativeSplatPath === undefined &&
- (!routerFuture || !routerFuture.v7_relativeSplatPath)
+ (!routerFuture || routerFuture.v7_relativeSplatPath === undefined)
) {
logDeprecation(
"v7_relativeSplatPath",
diff --git a/packages/react-router/lib/hooks.tsx b/packages/react-router/lib/hooks.tsx
index 9cffc8c8c7..3a40c3b15c 100644
--- a/packages/react-router/lib/hooks.tsx
+++ b/packages/react-router/lib/hooks.tsx
@@ -1,6 +1,5 @@
import * as React from "react";
import type {
- AgnosticRouteMatch,
Blocker,
BlockerFunction,
Location,
@@ -359,7 +358,7 @@ export function useRoutesImpl(
`useRoutes() may be used only in the context of a component.`
);
- let { navigator, static: isStatic } = React.useContext(NavigationContext);
+ let { navigator } = React.useContext(NavigationContext);
let { matches: parentMatches } = React.useContext(RouteContext);
let routeMatch = parentMatches[parentMatches.length - 1];
let parentParams = routeMatch ? routeMatch.params : {};
@@ -446,13 +445,7 @@ export function useRoutesImpl(
remainingPathname = "/" + segments.slice(parentSegments.length).join("/");
}
- let matches =
- !isStatic &&
- dataRouterState &&
- dataRouterState.matches &&
- dataRouterState.matches.length > 0
- ? (dataRouterState.matches as AgnosticRouteMatch[])
- : matchRoutes(routes, { pathname: remainingPathname });
+ let matches = matchRoutes(routes, { pathname: remainingPathname });
if (__DEV__) {
warning(
diff --git a/packages/react-router/package.json b/packages/react-router/package.json
index 447141ca2c..06ef82559e 100644
--- a/packages/react-router/package.json
+++ b/packages/react-router/package.json
@@ -1,6 +1,6 @@
{
"name": "react-router",
- "version": "6.30.0",
+ "version": "6.30.1",
"description": "Declarative routing for React",
"keywords": [
"react",
diff --git a/scripts/changesets-release.sh b/scripts/changesets-release.sh
index ec85891a83..ad585f1fab 100755
--- a/scripts/changesets-release.sh
+++ b/scripts/changesets-release.sh
@@ -1,13 +1,14 @@
#!/bin/bash
-MODE=$(node -e "console.log(require('./.changeset/pre.json').mode)")
+PACKAGE="./packages/react-router/package.json"
+IS_PRERELEASE=$(node -e "console.log(/-pre/.test(require('${PACKAGE}').version))")
# Can only provide a custom --tag when not in prerelease mode
-# The prerelease tags come from the pre.json "tag" field
-if [ "${MODE}" == "exit" ]; then
- echo "Publishing with v6 tag (stable release)"
- pnpm exec changeset publish --tag v6
-else
+# The prerelease tags come from the `pre.json`` "tag" field
+if [ ${IS_PRERELEASE} == "true" ]; then
echo "Publishing with default changesets tag (pre-release)"
pnpm exec changeset publish
+else
+ echo "Publishing with v6 tag (stable release)"
+ pnpm exec changeset publish --tag version-6
fi