chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security] - #9554
chore(deps): update dependency react-router@>=6.7.0 <6.30.6 to v7 [security]#9554renovate[bot] wants to merge 1 commit into
Conversation
COMPARE TO
|
| Name | Diff |
|---|---|
| package.json | 0 Bytes |
| pnpm-lock.yaml | 📉 -465 Bytes |
There was a problem hiding this comment.
🟡 Changes recommended
The new react-router override targets v8 while the resolved dependency graph remains on React Router v6/React 18, creating a likely incompatibility and undermining the intended security upgrade.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR (Renovate-generated) attempts to address React Router security advisories by updating the root-level pnpm override for react-router and refreshing the lockfile accordingly.
Changes:
- Updates the root
pnpm.overridesentry forreact-router@>=6.7.0 <6.30.6from^6.30.6to^8.0.0 - Updates
pnpm-lock.yamloverrides to reflect the newreact-routeroverride and includes some incidental lockfile normalization changes
File summaries
| File | Description |
|---|---|
| package.json | Changes root pnpm.overrides to force react-router to v8 for affected dependency ranges |
| pnpm-lock.yaml | Updates lockfile override metadata and related snapshot entries |
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 2
- Review effort level: Lite
💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
| postcss@<8.5.18: ^8.5.18 | ||
| prismjs@<1.30.0: ^1.30.0 | ||
| qs@>=6.11.1 <6.15.2: ^6.15.2 | ||
| react-router@>=6.7.0 <6.30.6: ^6.30.6 | ||
| react-router@>=6.7.0 <6.30.6: ^8.0.0 | ||
| react-router-dom@>=6.7.0 <6.30.6: ^6.30.6 |
0c21e87 to
0898174
Compare
There was a problem hiding this comment.
🟡 Changes recommended
The override update does not result in react-router@7.18.0 being resolved in the lockfile (it remains 6.30.6), so the intended security upgrade is not actually applied and may cause inconsistent installs.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
pnpm-lock.yaml:56
- This override forces react-router "^7.18.0" only for dependency specs in the ">=6.7.0 <6.30.6" range, but the lockfile still contains react-router@6.30.6 and react-router-dom@6.30.6, so the PR doesn’t actually update the installed React Router version. Consider updating the override selector (and react-router-dom) so the resolved versions become v7.18.0, then re-run pnpm to regenerate pnpm-lock.yaml.
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^7.18.0", | ||
| "react-router-dom@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "rollup@>=4.0.0 <4.59.0": "^4.59.0", |
0898174 to
84e9f9a
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The override bumps react-router to a breaking major (v8) that is likely incompatible with the repo’s current React 18 setup and also appears inconsistent with the current lockfile resolution.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override bumps
react-routerfrom the v6 line to v8, which is a breaking major upgrade and is likely incompatible with this repo’s current React 18 setup (seepnpm.peerDependencyRules.allowedVersions.react: ^18.0.0in this same file). Also, the lockfile currently resolvesreact-router@6.30.6(noreact-router@8.xpresent), so this override doesn’t appear to be taking effect. Prefer keeping the security override within v6 (e.g.^6.30.6) to address the vulnerable range without introducing a major-version upgrade.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This lockfile override forces
react-routerto^8.0.0for the vulnerable selector range, but the lockfile itself currently containsreact-router@6.30.6and noreact-router@8.xentries, so the override is either unused or the lockfile wasn’t regenerated after changing it. To avoid an accidental future major bump (and keepreact-routeraligned withreact-router-dom@6.30.6), pin this override to^6.30.6instead.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
84e9f9a to
e7a8c78
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The lockfile still resolves react-router@6.30.6 and contains no react-router@7.18.0, so the intended security upgrade is not actually applied.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:96
- The
overridesentry bumpsreact-routerto^7.18.0, butreact-router-domis still held at^6.30.6and workspace packages appear to depend onreact-router-dom@^6.30.2(so a real v7 upgrade would likely require aligningreact-router-domto v7 and adjusting any breaking API usage). As-is, the lockfile still resolvesreact-router@6.30.6, so this change does not actually apply the intended security upgrade.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
pnpm-lock.yaml:56
pnpm-lock.yamldoes not contain anyreact-router@7.18.0entries and still resolvesreact-router@6.30.6(including viareact-router-dom@6.30.6). This means the override change is currently ineffective and the lockfile is inconsistent with the intended dependency update; please regenerate the lockfile after updating the actual dependency constraints so the resolved versions match.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
e7a8c78 to
64599a0
Compare
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a v7 major for a v6 selector and the lockfile contains no resolved react-router@7.18.0, making the change potentially unsafe and possibly ineffective for remediation.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override selector targets React Router v6 (>=6.7.0 <6.30.6) but forces a v7 major (^7.18.0). This can violate downstream semver expectations and introduce multiple major versions in the graph; also, the lockfile currently contains no resolved react-router@7.18.0 entries (only v6.30.6), so this change likely doesn’t actually apply to anything and may not address the security advisory in practice. Consider keeping this override within the v6 line (or upgrading both react-router-dom and react-router together as part of a deliberate v7 migration).
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This override now points react-router@>=6.7.0 <6.30.6 to ^7.18.0, but the lockfile doesn’t contain any react-router@7.18.0 resolution entries (only react-router@6.30.6). That suggests the override isn’t currently affecting the install graph and may not deliver the intended security remediation; additionally, forcing a major version for a v6 selector can break dependents if it ever does apply.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The new react-router override forces an incompatible major version (v8) relative to the repo’s React 18 baseline and react-router-dom 6.x usage, risking broken dependency resolution.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
pnpm-lock.yaml:55
- This override forces
react-routerto^8.0.0for packages requesting<6.30.6, which can introduce an incompatible major-version mix with the still-pinnedreact-router-dom6.x and the repo’s React 18 baseline. Align this override with the patched 6.x version to avoid unexpected breakage in transitive dependencies.
package.json:94 - The override forces
react-routerto^8.0.0for dependencies that request<6.30.6, but this repo is on React 18 (seepeerDependencyRules.allowedVersions.react) and still depends onreact-router-dom6.x; React Router v8 also removedreact-router-domand requires React 19+, so this override is very likely to create incompatible dependency resolutions. Use the patched 6.x version here (consistent with thereact-router-domoverride) unless you’re doing a coordinated major upgrade.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The updated override forces a v7 major for a v6 selector range and is inconsistent with the current lockfile resolution (still react-router@6.30.6), creating unnecessary compatibility risk.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override selector targets vulnerable v6 ranges (<6.30.6) but the override value forces a v7 major (
^7.18.0). That can unexpectedly break any dependency that declares a v6-compatible range and also doesn’t match the currently-resolved lockfile (which still pinsreact-router@6.30.6). If the goal is just to patch vulnerable v6 versions, keep this override on^6.30.6(or upgrade bothreact-routerandreact-router-domto v7 in a dedicated migration PR).
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This override currently forces
react-routerto^7.18.0for consumers requesting>=6.7.0 <6.30.6, but the lockfile still resolvesreact-router@6.30.6(andreact-router-dom@6.30.6). If the intent is to patch vulnerable v6 ranges, this should remain^6.30.6; otherwise, a full v7 upgrade (includingreact-router-dom) should be reflected in the lockfile.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces react-router v8 while the repo still uses react-router-dom v6, which can produce an incompatible dependency graph and the lockfile does not actually resolve react-router@8 as-is.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:95
- The override forces
react-routerto^8.0.0while the repo still depends onreact-router-domv6 (e.g. packages/* usereact-router-dom@^6.30.2, and this lockfile resolvesreact-router-dom@6.30.6->react-router@6.30.6). If this override ever applies, it can create an incompatible v6/v8 pairing; and as-is it also doesn't actually result inreact-router@8being installed.
Either complete a full React Router v8 migration (including removing/upgrading react-router-dom usage) or keep the override within the v6 line to match react-router-dom@6.30.6.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
pnpm-lock.yaml:56
pnpm-lock.yamlnow records an override to forcereact-router@>=6.7.0 <6.30.6to^8.0.0, but the resolved packages in this lockfile are stillreact-router@6.30.6/react-router-dom@6.30.6. This makes the lock inconsistent with the intent of the override, and if it ever takes effect it risks a broken dependency graph becausereact-router-dom@6.xdepends onreact-router@6.x.
Prefer keeping react-router aligned to the same major as react-router-dom (or migrate both together).
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override moves react-router to v7 while the repo still uses react-router-dom v6 and the lockfile still resolves react-router@6.30.6, so the intended security upgrade is currently ineffective and risks incompatible major-version mixing.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
pnpm-lock.yaml:56
pnpm-lock.yamlstill resolvesreact-router@6.30.6(andreact-router-dom@6.30.6depends on it), so this override to^7.18.0is not taking effect. Also, the selectorreact-router@>=6.7.0 <6.30.6won’t match6.30.6, so even a reinstall will keep6.30.6if that’s what dependents request.
package.json:96- The override bumps
react-routerto a v7 range while the repo still depends onreact-router-domv6 (e.g. packages/account/console/experience usereact-router-dom: ^6.30.2). React Router DOM v6 is built against React Router v6, so forcing a v7react-routercan lead to an incompatible major-version mix (or a no-op if the lockfile stays on v6).
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a major-version jump to react-router v8 for a vulnerability range and is likely to introduce compatibility risk given the repo’s React 18 constraints and react-router-dom v6 usage.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override forces any dependency requesting react-router <6.30.6 onto v8, which is a major-version jump and is likely incompatible with this repo’s React 18 setup (see peerDependencyRules.allowedVersions.react: "^18.0.0") and with react-router-dom v6.x used in packages (e.g. packages/console depends on react-router-dom ^6.30.2). For a security override, it’s safer to pin to the smallest fixed version in the same major (6.30.6) rather than jumping to v8.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This pnpm override bumps react-router for the <6.30.6 vulnerability range to ^8.0.0. Since the lock currently resolves react-router-dom/react-router to 6.30.6, switching this override to v8 is unnecessary for the current install and could introduce future breakage if any dependency reintroduces a <6.30.6 range (react-router v8 is a breaking major). Consider keeping this override at ^6.30.6 to address the CVE with minimal compatibility risk.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
It forces react-router to v7 while the repo still uses react-router-dom v6, and the lockfile does not consistently resolve to v7 (no react-router@7.18.0 entry).
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:96
- The pnpm override forces
react-routerto major v7 whilereact-router-dom(and workspace packages) are still on v6.react-router-dom@6.30.6depends onreact-router@6.30.6(see pnpm-lock.yaml snapshots), so forcing v7 here is very likely to break at runtime/type-level and also doesn’t match the current v6 dependency set. Either upgradereact-router-dom+ all app code to v7 in the same PR, or keep this override on the patched v6 line.
"postcss@<8.5.18": "^8.5.18",
"prismjs@<1.30.0": "^1.30.0",
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
pnpm-lock.yaml:56
- The lockfile override now points to
react-routerv7.18.0, but the lock still resolvesreact-router-dom@6.30.6->react-router@6.30.6and there is noreact-router@7.18.0entry. This suggests pnpm-lock.yaml wasn’t regenerated consistently for this change (or the override shouldn’t be v7).
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override pins a v6-only range of react-router to a v8 major version, which is inconsistent with the repo’s current react-router-dom@6.x/React 18 usage and risks unintended major upgrades.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override targets react-router v6.x (>=6.7.0 <6.30.6), but pins it to ^8.0.0. React Router v8 is a major with different requirements/compatibility (and the repo currently uses react-router-dom@6.x + React 18), so this override is inconsistent and could cause unexpected major upgrades if any dependency resolves to a vulnerable v6 version. Pin this override to the patched v6 release instead (matching react-router-dom).
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- pnpm overrides entry for react-router v6 range (>=6.7.0 <6.30.6) is set to ^8.0.0. This is a major-version jump and is incompatible with the repo's current react-router-dom@6.x usage; it also risks pulling v8 if any dependency requests an older v6 version. Pin this override to the patched v6 version instead.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override change is currently a no-op (lockfile still resolves only react-router@6.30.6), so it likely won’t remediate the intended security issue without a coordinated dependency upgrade strategy.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
pnpm-lock.yaml:56
- Lockfile still contains only
react-router@6.30.6entries, so updating this override to^7.18.0under a<6.30.6selector is currently a no-op and won’t address the intended security update. Consider aligning the override with the actually-installed major (v6) or performing a coordinated v7 upgrade (react-router-dom + app code) so the lockfile containsreact-router@7.x.
package.json:96 - The override targets
react-router@>=6.7.0 <6.30.6, but the lockfile resolvesreact-router@6.30.6, so this change does not actually upgrade any installedreact-routerversion. Additionally, forcingreact-routerto v7 while workspace packages remain onreact-router-domv6 would likely be incompatible if the selector is later widened, so the override strategy needs to be revisited (e.g., upgrade thereact-router-domdependents to v7 together, or keep the override within the v6 major line).
"prismjs@<1.30.0": "^1.30.0",
"qs@>=6.11.1 <6.15.2": "^6.15.2",
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
"rollup@>=4.0.0 <4.59.0": "^4.59.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The v8 migration is incomplete; the workspace and lockfile still use React Router 6.30.6.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade the router used by the workspace:
account,experience, andconsoleall depend onreact-router-dom@^6.30.2, and the lockfile still resolvesreact-router-dom@6.30.6toreact-router@6.30.6. React Router v8 also removesreact-router-domand requires React 19.2.7, while these packages use React 18.3.1. Keep the compatible security-fixed v6 override, or perform the full v8/React migration (including import changes) before targeting v8.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- The lockfile still resolves only
react-router@6.30.6(andreact-router-dom@6.30.6points to that version), with no 8.x package entry. Therefore the changed override is not represented in the installed dependency graph and this PR does not actually install v8; regenerate the lockfile after completing the compatible migration, or leave the override at the fixed 6.30.6 version.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The intended React Router 7.18.0 security update is not installed.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The selector still matches only
react-routerversions below 6.30.6, while every workspace consumer usesreact-router-dom@^6.30.2, whose resolved package pinsreact-routerto 6.30.6. The lockfile consequently still contains onlyreact-router@6.30.6and no 7.18.0, so this override does not install the security update. Update the router/dom dependency strategy together (if moving to v7, use matching v7 packages) and regenerate the lockfile.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This lockfile change records the new override value but does not update the resolved dependency:
react-router@6.30.6remains the only router package entry, andreact-router-dom@6.30.6still depends on it. As a result, the PR leaves the vulnerable/current version installed instead of adding 7.18.0. Correct the dependency/override selector and regenerate this lockfile.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The v8 override is incompatible with existing consumers and is not applied in the lockfile.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- React Router 8 is not a drop-in override for this workspace:
account,console, andexperiencestill depend onreact-router-dom6 and import from that package, while v8 removesreact-router-dom; those packages also pin React 18.3.1, but v8 requires React 19.2.7. The root engine is Node ^22.14.0, below v8's minimum 22.22.0. Migrate all consumers and runtime together, or keep the patched v6.30.6 override instead of forcing an incompatible major into the existing graph.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
package.json:94
- This selector only applies to dependency requests matching
>=6.7.0 <6.30.6. The workspace consumers declarereact-router-dom@^6.30.2, and the lockedreact-router-dom@6.30.6depends on the exactreact-router@6.30.6(pnpm-lock.yaml:27312-27319), so the lockfile still contains no 8.x package. As a result, this change does not apply the intended security upgrade; update the actual router dependency/selector and regenerate the lockfile as part of a compatible migration.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The stated v7/security update is currently a no-op for the workspace dependency graph.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override does not upgrade the dependency used by this workspace: the lockfile still resolves only
react-router-dom@6.30.6and itsreact-router@6.30.6dependency, with noreact-router@7.18.0, whileaccount,console, andexperienceall consumereact-router-dom6.x. The stated v7/security update is therefore a no-op for the current graph. Please either migrate those consumers and thereact-router-domoverride to the v7 pair and regenerate the lockfile, or keep the v6.30.6 override if the intention is only to pin the fixed v6 line.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The v8 upgrade is not applied to the installed graph and required platform and consumer migrations are missing.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade the dependency used by the repository: the lockfile still resolves
react-router-dom@6.30.6withreact-router@6.30.6, and all application packages depend onreact-router-dom6.x. If a matching pre-6.30.6react-routerdependency were introduced, forcing it to v8 would also be incompatible with the v6 DOM package (and this repo's React 18 setup). Keep the patched v6 override, or perform the required v8 migration across the consumers instead of changing only this override.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This override does not actually resolve React Router v8: the lockfile still contains only
react-router@6.30.6, pulled byreact-router-dom@6.30.6, whose exact dependency is outside the>=6.7.0 <6.30.6selector. Consequently this PR leaves the installed graph unchanged; and forcing v8 would require migrating the manyreact-router-domimports plus React 19.2.7 (the workspace currently standardizes on React 18). Please either target a compatible fixed v6 dependency or make the complete v8 migration rather than changing only this override.
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override does not upgrade the installed React Router 6 dependency pair to v7.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This changes only an override selector whose current installed dependency does not match it: the lockfile still resolves
react-router-dom@6.30.6with its exactreact-router@6.30.6dependency (pnpm-lock.yaml:27312-27321), and there is noreact-router@7.18.0entry. Consequently, the application remains on React Router 6 and this PR does not deliver the stated v7 security upgrade. Please either upgrade thereact-router-dom/react-routerpair and adapt its consumers together, or keep the v6 override if 6.30.6 is the intended security-fixed version.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The isolated override does not apply the advertised v8 upgrade; a coordinated migration is required.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
There was a problem hiding this comment.
🔵 Needs a closer look
The security update has no runtime effect until the compatible react-router-dom dependency and lockfile are updated.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade the dependency that the workspace actually installs: all consumers declare
react-router-dom6.x, whose resolved package still depends onreact-router6.30.6, and the selector here explicitly excludes6.30.6. The lockfile contains noreact-router7.18.0 entry, so this security update has no runtime effect; update thereact-router-domdependency/override and its callers together for a v7 migration, or keep the existing v6.30.6 override if v6 is intended.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This lockfile records the override as
^7.18.0, but its package and snapshot sections still resolvereact-router-dom@6.30.6->react-router@6.30.6(pnpm-lock.yaml:14285-14296and27312-27321). Thus a frozen install from this PR continues to use the v6 router and does not receive the advertised security update; regenerate the lockfile after updating the compatiblereact-router-domdependency as well.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a major-version jump (react-router v6→v8) for a selector intended to patch older v6 ranges, which can introduce unexpected breaking/peer-dependency issues if it ever takes effect.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
pnpm-lock.yaml:56
- This lockfile override forces
react-router@>=6.7.0 <6.30.6to^8.0.0, which is a major-version jump for a selector that is meant to patch older v6 ranges and may break consumers expecting the v6 API if this override is ever applied. Align this with the minimal patched version used elsewhere in the lockfile (currently6.30.6) unless you are intentionally migrating the codebase to React Router v8.
package.json:95 - The
pnpm.overridesselector targets React Router versions<6.30.6(a patch-level security pin), but it is currently being forced to^8.0.0, which is a major-version jump and can introduce breaking API/peer-dependency mismatches if any transitive dependency actually resolves through this selector. Since the lockfile currently resolvesreact-routerto6.30.6, this override likely isn’t doing anything today, but it could cause unexpected breakage in the future when a dependency brings in an older v6 range again.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
"react-router-dom@>=6.7.0 <6.30.6": "^6.30.6",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override forces a major-version jump (react-router v6 selector → v7 target) while the lockfile still resolves react-router@6.30.6, creating a high risk of incompatibility and likely not changing the installed dependency set as intended.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- The override selector targets React Router v6 consumers (<6.30.6) but forces a v7.x version. This is a major-version jump that can break packages expecting the v6 API, and the current lockfile resolves react-router to 6.30.6 anyway (no react-router@7.x entries), so this change likely doesn’t actually change what gets installed.
Consider keeping this override within the v6 line (e.g. 6.30.6) unless you’re intentionally migrating the codebase (and react-router-dom) to v7 in the same PR.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
pnpm-lock.yaml:55
- This lockfile override forces react-router v7.x for dependencies requesting v6 (<6.30.6). Since the lockfile currently resolves react-router@6.30.6 (and contains no react-router@7.x), the override appears unused and/or risks introducing an incompatible major version if a v6 consumer matches this selector.
Recommend keeping the override within the v6 major unless you’re upgrading react-router-dom and any app usage to v7 together.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The React Router v8 migration is incomplete and the advertised upgrade is not delivered.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This does not actually upgrade the router: all consumers still declare
react-router-dom6.x, whose 6.30.6 package depends onreact-router6.30.6 (as shown bypnpm-lock.yaml:27312-27317), and the lockfile still contains noreact-routerv8 entry. Either keep the compatible 6.30.6 override for this security fix, or perform the full v8 migration (including replacingreact-router-dom/imports and meeting v8's React and Node requirements); changing this override alone leaves the installed dependency unchanged.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- This selector does not upgrade anything in the current workspace: all consumers declare
react-router-dom(for example,packages/account/package.json:99), and the lockfile still resolvesreact-router-dom@6.30.6toreact-router@6.30.6(lines 27312-27321); there is noreact-router@8entry. Since v8 also removesreact-router-dom, this standalone core override cannot deliver the advertised upgrade. Update the DOM-router consumers as a coordinated migration, or keep the patched v6 pair instead.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
Update the consumer stack and regenerate the lockfile, or retain a compatible patched v6 override.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This change does not upgrade the dependency actually installed by this workspace: the lockfile still contains only
react-router@6.30.6, andreact-router-dom@6.30.6resolves to that version (pnpm-lock.yaml:27312-27319). Because this override selector only matches versions<6.30.6, no current dependency matches it, so the PR's v7 security update is absent from the resolved graph. If v7 is required, update thereact-router-dom/consumer stack and regenerate the lockfile together; otherwise keep the compatible patched v6 override.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The dependency graph still resolves React Router 6.30.6 instead of the advertised v8 upgrade.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
- Files reviewed: 1/2 changed files
- Comments generated: 1
- Review effort level: Lite
| "prismjs@<1.30.0": "^1.30.0", | ||
| "qs@>=6.11.1 <6.15.2": "^6.15.2", | ||
| "react-router@>=6.7.0 <6.30.6": "^6.30.6", | ||
| "react-router@>=6.7.0 <6.30.6": "^8.0.0", |
There was a problem hiding this comment.
🔵 Needs a closer look
Update the React Router consumers and lockfile together, or explicitly retain a patched v6 resolution.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This override does not affect the versions actually installed: its selector only matches
react-routerversions<6.30.6, while all three workspace consumers resolvereact-router-dom@6.30.6, which depends onreact-router@6.30.6; the lockfile contains noreact-router@7.18.0. As a result, this security update neither installs v7 nor changes the runtime dependency. If v7 is intended, update thereact-router-domconsumers and lockfile together (forcing v7 under v6react-router-domwould be incompatible); otherwise keep/use the patched v6 resolution explicitly.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The override and lockfile are inconsistent, and the v8 migration is incomplete.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (2)
package.json:94
- This override does not upgrade any dependency in this workspace: all three consumers declare
react-router-dom6.x, and the lockfile still contains onlyreact-router-dom@6.30.6with itsreact-router@6.30.6dependency—there is noreact-router@8.xsnapshot. If a package later matches this selector, forcing v8 would also be incompatible with the existingreact-router-domv6 imports and React 18.3.1 (v8 removesreact-router-domand requires React 19.2.7). Please either keep the patched v6 override or perform the coordinated v8 migration instead of changing this selector alone.
"react-router@>=6.7.0 <6.30.6": "^8.0.0",
pnpm-lock.yaml:55
- The lockfile does not contain the dependency this override requests: it still resolves
react-router-dom@6.30.6toreact-router@6.30.6(see the package and snapshot entries around lines 14292 and 27317), with noreact-router@8entry. This means the committed lockfile does not represent the changed override; frozen installs can reject it as stale or continue using v6. Regenerate the lockfile with the intended dependency graph before merging.
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🔵 Needs a closer look
The advertised React Router v7 upgrade is not installed, and the override could create an incompatible dependency graph.
Review details
Files not reviewed (1)
- pnpm-lock.yaml: Generated file
Suppressed comments (1)
package.json:94
- This changes only the replacement for vulnerable
react-routerversions<6.30.6, but the repository's actual graph still resolvesreact-router-dom@6.30.6withreact-router@6.30.6(the lockfile has no7.18.0entry). Thus the advertised v7 upgrade is not installed, while any future dependency matching this selector would be forced from v6 to an incompatible major without upgradingreact-router-domand the consuming code. Keep the patched v6 override here, or make the v7 migration a coordinated update of both router packages and their usages.
"react-router@>=6.7.0 <6.30.6": "^7.18.0",
- Files reviewed: 1/2 changed files
- Comments generated: 0 new
- Review effort level: Lite
This PR contains the following updates:
^6.30.6→^7.18.0](https://renovatebot.com/diffs/npm/react-router@>=6.7.0 <6.30.6/6.30.6/7.18.0)React Router: Arbitrary Constructor Injection via deserializeErrors() in React Router SSR Hydration
CVE-2026-53666 / GHSA-337j-9hxr-rhxg
More information
Details
If application code allows attacker supplied input to overwrite certain aspects of errors caught by the SSR process, then it was possible for attacker to trigger unexpected constructor execution on the client which would trigger outbound network traffic. This is only possible with very specific (and unlikely) application layer code.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
React Router: Open redirect via backslash in and useNavigate (CVE-2025-68470 bypass)
CVE-2026-53669 / GHSA-wrjc-x8rr-h8h6
More information
Details
This is a follow up to CVE-2025-68470. React Router was alerted to certain scenarios in which the fix there was incomplete so there still existed some scenarios where attacker supplied paths passed to navigation mechanisms could result in unexpected external navigations.
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:L/VA:N/SC:L/SI:L/SA:NReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
remix-run/react-router (react-router@>=6.7.0 <6.30.6)
v7.18.0Compare Source
Patch Changes
ssr: falseandfuture.v8_trailingSlashAwareDataRequests: true. Avoids false positive "SPA Mode" detection when serving prerendered paths (#15173)ServerRouternonce for nonce-aware SSR components when they don't provide their own value so strict CSP pages can load them. (#15170)turbo-streamto serialize and deserialize Framework Mode hydration errors (#15175)v7.17.0Compare Source
Minor Changes
Ship a subset of the official documentation inside the
react-routerpackage (#15121)node_modules/react-router/docs, letting AI coding agents and the React Router agent skills read official docs locallyapi/),community/content, and tutorials (tutorials/)v7.16.0Compare Source
Minor Changes
future.unstable_trailingSlashAwareDataRequestsasfuture.v8_trailingSlashAwareDataRequests(#15098)Patch Changes
Disable manifest path when lazy route dicovery is disabled (#15068)
Fix browser URL creation to use the configured history window instead of the global window. (#15066)
createBrowserURLImplso custom window contexts keep the correct URL origin.Fix
useNavigation()return type to preserve discriminated union across navigation states (#15095)Widen
MetaDescriptorscript:ld+jsontype fromLdJsonObjecttoLdJsonObject | LdJsonObject[]to permit multiple JSON-LD schemas in a single<script type="application/ld+json">tag emitted by<Meta />(#15082)v7.15.1Compare Source
Patch Changes
serverLoader()returning stale SSR data when a client navigation aborts pending hydration before the hydrationclientLoaderresolves (#15022)RouterProvideronErrorcallback not being called for synchronous initial loader errors in SPA mode (#15039) (#14942)useFetchersto return a stable identity and only change if fetchers changed (#15028)Unstable Changes
unstable_useRouterState()hook that consolidates access to active and pending router states (RFC: #12358) (#15017)Data/Framework/RSC only — throws when used without a data router
This should allow you to consolidate usages of the following hooks which will likely be deprecated and removed in a future major version
useLocationuseSearchParamsuseParamsuseMatchesuseNavigationTypeuseNavigationv7.15.0Compare Source
Minor Changes
Stabilize
unstable_defaultShouldRevalidateasdefaultShouldRevalidateon<Link>,<Form>,useLinkClickHandler,useSubmit,fetcher.submit, andsetSearchParams(a993f09)Stabilize the instrumentation APIs.
unstable_instrumentationsis nowinstrumentationsandunstable_patternis nowpattern(a993f09)unstable_ServerInstrumentation,unstable_ClientInstrumentation,unstable_InstrumentRequestHandlerFunction,unstable_InstrumentRouterFunction,unstable_InstrumentRouteFunction, andunstable_InstrumentationHandlerResulttypes have had theirunstable_prefixes removedStabilize
unstable_maskasmaskon<Link>,useLinkClickHandler, anduseNavigate, and rename the correspondingLocation.unstable_maskfield toLocation.mask(a993f09)Stabilize the
unstable_normalizePathoption onstaticHandler.queryandstaticHandler.queryRouteasnormalizePath(a993f09)Stabilize
future.unstable_passThroughRequestsasfuture.v8_passThroughRequests(a993f09)Remove
unstable_subResourceIntegrityfrom the runtimeFutureConfigtype; the flag is now controlled by the top-levelsubResourceIntegrityoption inreact-router.config.ts(a993f09)Stabilize
unstable_urlasurlonloader,action, andmiddlewarefunction args (a993f09)Stabilize
unstable_useTransitionsasuseTransitionson<BrowserRouter>,<HashRouter>,<HistoryRouter>,<MemoryRouter>,<Router>,<RouterProvider>,<HydratedRouter>, anduseLinkClickHandler(a993f09)Patch Changes
Add
nonceto<Scripts><link rel="modulepreload">elements (if provided) (af5d49b)Fix a bug with
unstable_defaultShouldRevalidate={false}where parent routes that did not export ashouldRevalidatefunction could be incorrectly included in the single fetch call for new child route data (#15012)Improve server-side route matching performance by pre-computing flattened/cached route branches (#14967) (af5d49b)
Mark
maskas an optional field inLocationfor easier mocking in unit tests (#14999)Cache flattened/ranked route branches to optimize server-side route matching (#14967)
Improve route matching performance in Framework/Data Mode (#14971) (af5d49b)
matchRoutesin data router scenarios7.6.0(#13562)matchesbut always updatingmatch.routeto the latest route in themanifestv7.14.2Compare Source
Patch Changes
Remove the un-documented custom error serialization logic from the internal turbo-stream implementation. React Router only automatically handles serialization of
Errorand it's standard subtypes (SyntaxError,TypeError, etc.). ([aabf4a1)Properly handle parent middleware redirects during
fetcher.load([aabf4a1)Remove redundant
Omit<RouterProviderProps, "flushSync">fromreact-router/domRouterProvider([aabf4a1)Improved types for
generatePath'sparamarg ([aabf4a1)Type errors when required params are omitted:
Allow omission of optional params:
Allows extra keys:
v7.14.1Compare Source
Patch Changes
HydrateFallbackand initial loaders land before therouter.subscribecall happens in theRouterProviderlayout effectv7.14.0Compare Source
Patch Changes
UNSTABLE RSC FRAMEWORK MODE BREAKING CHANGE - Existing route module exports remain unchanged from stable v7 non-RSC mode, but new exports are added for RSC mode. If you want to use RSC features, you will need to update your route modules to export the new annotations. (#14901)
If you are using RSC framework mode currently, you will need to update your route modules to the new conventions. The following route module components have their own mutually exclusive server component counterparts:
ServerComponentdefaultServerErrorBoundaryErrorBoundaryServerLayoutLayoutServerHydrateFallbackHydrateFallbackIf you were previously exporting a
ServerComponent, yourErrorBoundary,Layout, andHydrateFallbackwere also server components. If you want to keep those as server components, you can rename them and prefix them withServer. If you were previously importing the implementations of those components from a client module, you can simply inline them.Example:
Before
After
rsc Link prefetch (#14902)
Remove recursion from turbo-stream v2 allowing for encoding / decoding of massive payloads. (#14838)
encodeViaTurboStream leaked memory via unremoved AbortSignal listener (#14900)
v7.13.2Compare Source
Patch Changes
Fix clientLoader.hydrate when an ancestor route is also hydrating a clientLoader (#14835)
Fix type error when passing Framework Mode route components using
Route.ComponentPropstocreateRoutesStub(#14892)Fix percent encoding in relative path navigation (#14786)
Add
future.unstable_passThroughRequestsflag (#14775)By default, React Router normalizes the
request.urlpassed to yourloader,action, andmiddlewarefunctions by removing React Router's internal implementation details (.datasuffixes,index+_routesquery params).Enabling this flag removes that normalization and passes the raw HTTP
requestinstance to your handlers. This provides a few benefits:new Request()calls on the critical path.datasuffix (useful for observability purposes)If you were previously relying on the normalization of
request.url, you can switch to use the new siblingunstable_urlparameter which contains aURLinstance representing the normalized location:Internal refactor to consolidate framework-agnostic/React-specific route type layers - no public API changes (#14765)
Sync protocol validation to rsc flows (#14882)
Add a new
unstable_url: URLparameter to route handler methods (loader,action,middleware, etc.) representing the normalized URL the application is navigating to or fetching, with React Router implementation details removed (.datasuffix,index/_routesquery params) (#14775)This is being added alongside the new
future.unstable_passthroughRequestsfuture flag so that users still have a way to access the normalized URL when that flag is enabled and non-normalizedrequest's are being passed to your handlers. When adopting this flag, you will only need to start leveraging this new parameter if you are relying on the normalization ofrequest.urlin your application code.If you don't have the flag enabled, then
unstable_urlwill matchrequest.url.v7.13.1Compare Source
Patch Changes
fix null reference exception in bad codepath leading to invalid route tree comparisons (#14780)
fix: clear timeout when turbo-stream encoding completes (#14810)
Improve error message when Origin header is invalid (#14743)
Fix matchPath optional params matching without a "/" separator. (#14689)
add RSC unstable_getRequest (#14758)
Fix
HydrateFallbackrendering during initial lazy route discovery with matching splat route (#14740)[UNSTABLE] Add support for
<Link unstable_mask>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)Notes:
useLocation().unstable_maskso you can detect whether you are currently masked or not.history.stateduring SSR.backgroundLocationmanagement.RSC: Update failed origin checks to return a 400 status and appropriate UI instead of a generic 500 (#14755)
Preserve query parameters and hash on manifest version mismatch reload (#14813)
v7.13.0Compare Source
Minor Changes
crossOriginprop toLinkscomponent (#14687)Patch Changes
allowedActionOriginsglob check so**matches all domains (#14722)v7.12.0Compare Source
Minor Changes
react-router.config.tsconfigallowedActionOriginsfield. (#14708)Patch Changes
Fix
generatePathwhen used with suffixed params (i.e., "/books/:id.json") (#14269)Export
UNSAFE_createMemoryHistoryandUNSAFE_createHashHistoryalongsideUNSAFE_createBrowserHistoryfor consistency. These are not intended to be used for new apps but intended to help apps usiongunstable_HistoryRoutermigrate from v6->v7 so they can adopt the newer APIs. (#14663)Escape HTML in scroll restoration keys (#14705)
Validate redirect locations (#14706)
[UNSTABLE] Pass
<Scripts nonce>value through to the underlyingimportmapscripttag when usingfuture.unstable_subResourceIntegrity(#14675)[UNSTABLE] Add a new
future.unstable_trailingSlashAwareDataRequestsflag to provide consistent behavior ofrequest.pathnameinsidemiddleware,loader, andactionfunctions on document and data requests when a trailing slash is present in the browser URL. (#14644)Currently, your HTTP and
requestpathnames would be as follows for/a/b/cand/a/b/c//a/b/crequestpathname`/a/b/c/a/b/c✅/a/b/c.data/a/b/c✅/a/b/c/requestpathname`/a/b/c//a/b/c/✅/a/b/c.data/a/b/cWith this flag enabled, these pathnames will be made consistent though a new
_.dataformat for client-side.datarequests:/a/b/crequestpathname`/a/b/c/a/b/c✅/a/b/c.data/a/b/c✅/a/b/c/requestpathname`/a/b/c//a/b/c/✅/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.
Enabling this flag also changes the format of client side
.datarequests from/_root.datato/_.datawhen navigating to/to align with the new format. This does not impact therequestpathname which is still/in all cases.Preserve
clientLoader.hydrate=truewhen using<HydratedRouter unstable_instrumentations>(#14674)v7.11.0Compare Source
Minor Changes
<HydratedRouter onError>/<RouterProvider onError>(#14546)Patch Changes
add support for throwing redirect Response's at RSC render time (#14596)
Support for throwing
data()and Response from server component render phase. Response body is not serialized as async work is not allowed as error encoding phase. If you wish to transmit data to the boundary, throwdata()instead. (#14632)Fix
unstable_useTransitionsprop on<Router>component to permit omission for backewards compatibility (#14646)routeRSCServerRequestreplacefetchServerwithserverResponse(#14597)[UNSTABLE] Add a new
unstable_defaultShouldRevalidateflag to various APIs to allow opt-ing out of standard revalidation behaviors. (#14542)If active routes include a
shouldRevalidatefunction, then your value will be passed asdefaultShouldRevalidatein those function so that the route always has the final revalidation determination.<Form method="post" unstable_defaultShouldRevalidate={false}>submit(data, { method: "post", unstable_defaultShouldRevalidate: false })<fetcher.Form 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:
<Link to="/" unstable_defaultShouldRevalidate={false}>navigate("/?foo=bar", { unstable_defaultShouldRevalidate: false })setSearchParams(params, { unstable_defaultShouldRevalidate: false })Allow redirects to be returned from client side middleware (#14598)
Handle
dataStrategyimplementations that return insufficient result sets by adding errors for routes without any available result (#14627)v7.10.1Compare Source
Patch Changes
useOptimisticstub we provide for React 18 users to use a stable setter function to avoid potentialuseEffectloops - specifically when using<Link viewTransition>(#14628)v7.10.0Compare Source
Minor Changes
Stabilize
fetcher.reset()(#14545)fetcher.unstable_reset()Stabilize the
dataStrategymatch.shouldRevalidateArgs/match.shouldCallHandler()APIs. (#14592)The
match.shouldLoadAPI is now marked deprecated in favor of these more powerful alternativesIf you're using this API in a custom
dataStrategytoday, you can swap to the new API at your convenience:match.shouldRevalidateArgsis the argument that will be passed to the routeshouldRevaliatefunctionCombined with the parameter accepted by
match.shouldCallHandler, you can define a custom revalidation behavior for yourdataStrategy:Patch Changes
Fix a Framework Mode bug where the
defaultShouldRevalidateparameter toshouldRevalidatewould not be correct afteractionreturned a 4xx/5xx response (truewhen it should have beenfalse) (#14592)shouldRevalidatefunction relied on that parameter, you may have seen unintended revalidationsFix
fetcher.submitfailing with plain objects containing atagNameproperty (#14534)[UNSTABLE] Add
unstable_patternto the parameters for client sideunstable_onError, refactor how it's called byRouterProviderto avoid potential strict mode issues (#14573)Add new
unstable_useTransitionsflag to routers to give users control over the usage ofReact.startTransitionandReact.useOptimistic. (#14524)<HydratedRouter unstable_transition>/<RouterProvider unstable_transition>React.startTransitionReact.startTransitiontrueif you run into this scenario to get the enhanceduseOptimisticbehavior (requires React 19)trueReact.startTransition(as they are without the flag)Link/Formnavigations will be wrapped inReact.startTransitionReact.useOptimistic(i.e.,useNavigation(),useFetchers(), etc.)falseReact.startTransitionorReact.useOptimisticon any navigations or state changes<BrowserRouter unstable_useTransitions>React.startTransitiontrueReact.startTransition(as they are without the flag)Link/Formnavigations will be wrapped inReact.startTransitionfalseReact.startTransitionon any navigations or state changesFix the promise returned from
useNavigatein Framework/Data Mode so that it properly tracks the duration ofpopstatenavigations (i.e.,navigate(-1)) (#14524)Fix internal type error in useRoute types that surfaces when skipLibCheck is disabled (#14577)
Preserve
statusTexton theErrorResponseinstance when throwingdata()from a route handler (#14555)Optimize href() to avoid backtracking regex on splat (#14329)
v7.9.6Compare Source
Patch Changes
[UNSTABLE] Add
location/paramsas arguments to client-sideunstable_onErrorto permit enhanced error reporting. (#14509)unstable_onError. The seconderrorInfoparameter is now an object withlocationandparams:Properly handle ancestor thrown middleware errors before
next()on fetcher submissions (#14517)Fix issue with splat routes interfering with multiple calls to patchRoutesOnNavigation (#14487)
Normalize double-slashes in
resolvePath(#14529)v7.9.5Compare Source
Patch Changes
Move RSCHydratedRouter and utils to
/domexport. (#14457)useRoute: return type-safe
handle(#14462)For example:
Ensure action handlers run for routes with middleware even if no loader is present (#14443)
Add
unstable_instrumentationsAPI 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)entry.server.tsx:export const unstable_instrumentations = [...]entry.client.tsx:<HydratedRouter unstable_instrumentations={[...]} />createBrowserRouter(routes, { unstable_instrumentations: [...] })This also adds a new
unstable_patternparameter to loaders/actions/middleware which contains the un-interpolated route pattern (i.e.,/blog/:slug) which is useful for aggregating performance metrics by routev7.9.4Compare Source
Patch Changes
handle external redirects in from server actions (#14400)
New (unstable)
useRoutehook for accessing data from specific routes (#14407)For example, let's say you have an
adminroute somewhere in your app and you want any child routes ofadminto all have access to theloaderDataandactionDatafromadmin.You might even want to create a reusable widget that all of the routes nested under
admincould use:In framework mode,
useRouteknows all your app's routes and gives you TS errors when invalid route IDs are passed in:useRoutereturnsundefinedif the route is not part of the current page:Note: the
rootroute is the exception since it is guaranteed to be part of the current page.As a result,
useRoutenever returnsundefinedforroot.loaderDataandactionDataare marked as optional since they could be accessed before theactionis triggered or after theloaderthrew an error:If instead of a specific route, you wanted access to the current route's
loaderDataandactionData, you can calluseRoutewithout arguments:This usage is equivalent to calling
useLoaderDataanduseActionData, but consolidates all route data access into one hook:useRoute.Note: when calling
useRoute()(without a route ID), TS has no way to know which route is the current route.As a result,
loaderDataandactionDataare typed asunknown.If you want more type-safety, you can either narrow the type yourself with something like
zodor you can refactor your app to pass down typed props to yourAdminWidget:v7.9.3Compare Source
Patch Changes
Do not try to use
turbo-streamto decode CDN errors that never reached the server (#14385)Fix Data Mode regression causing a 404 during initial load in when
middlewareexists without anyloaderfunctions (#14393)v7.9.2Compare Source
Patch Changes
middlewareon initial load even if no loaders exist (#14348)createRoutesStubto run route middleware<RoutesStub future={{ v8_middleware: true }} />flag to enable the propercontexttypeUpdate Lazy Route Discovery manifest requests to use a singular comma-separated
pathsquery param instead of repeatedpquery params (#14321)[UNSTABLE] Add
fetcher.unstable_reset()API (#14206)Made useOutlet element reference have stable identity in-between route chages (#13382)
feat: enable full transition support for the rsc router (#14362)
In RSC Data Mode, handle SSR'd client errors and re-try in the browser (#14342)
Support
middlewareprop on<Route>for usage with a data router viacreateRoutesFromElements(#14357)Handle encoded question mark and hash characters in ancestor splat routes (#14249)
Fail gracefully on manifest version mismatch logic if
sessionStorageaccess is blocked (#14335)v7.9.1Compare Source
Patch Changes
Futureinterface naming frommiddleware->v8_middleware(#14327)v7.9.0Compare Source
Minor Changes
Stabilize middleware and context APIs. (#14215)
We have removed the
unstable_prefix from the following APIs and they are now considered stable and ready for production use:RouterContextProvidercreateContextcreateBrowserRoutergetContextoption<HydratedRouter>getContextpropPlease see the Middleware Docs, the Middleware RFC, and the Client-side Context RFC for more information.
Patch Changes
meta()JSON-LD content (#14316)hreffunction available in a react-server context (#14262)getPayload()is called to allow for "in-context" decoding and hoisting of contextual assets (#14248)href()now correctly processes routes that have an extension after the parameter or are a single optional parameter. (#13797)v7.8.2Compare Source
Patch Changes
[UNSTABLE] Remove Data Mode
future.unstable_middlewareflag fromcreateBrowserRouter(#14213)getLoadContexttype behavior change[UNSTABLE] Add
<RouterProvider unstable_onError>/<HydratedRouter unstable_onError>prop for client side error reporting (#14162)server action revalidation opt out via $SKIP_REVALIDATION field (#14154)
Properly escape interpolated param values in
generatePath()(#13530)Maintain
ReadonlyMapandReadonlySettypes in server response data. (#13092)[UNSTABLE] Delay serialization of
.dataredirects to 202 responses until after middleware chain (#14205)Fix
TypeErrorif you throw from `patchRoutesOnNavigatConfiguration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.