Repository navigation
chore(deps): update dependency react-router@<6.30.6 to v8 [security] - #302
Open
renovate[bot] wants to merge 1 commit into
Open
renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
renovate
Bot
force-pushed
the
renovate/npm-react-router-6.30.6-vulnerability
branch
from
October 26, 2026 21:29
8060841 to
3d84063
Compare
renovate
Bot
force-pushed
the
renovate/npm-react-router-6.30.6-vulnerability
branch
from
October 27, 2026 22:39
3d84063 to
2306ded
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
^6.30.6→^8.0.0React 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).
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 OSV and 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 OSV and the GitHub Advisory Database (CC-BY 4.0).
Release Notes
remix-run/react-router (react-router@<6.30.6)
v8.5.1Compare Source
Patch Changes
URIError: URI malformedwhen anssr: falsedev server receives a URL path with a malformed percent-encoding (#15649)<Form>to the current URL with an encodedaction(#15679)actioncontains characters that get percent-encoded, such as spaces or non-ASCII charactersviewTransitionnavigation, for example in a hidden tab (#15582)lazy.Componentimports on loader-less routes to the nearest error boundary (#15658)lazyroute imports instead of caching failures permanently (#15689)shouldRevalidateidlewhen a revalidation completes a pending navigation started by another fetcher's redirectdocument.startViewTransition()overload to the globalDocumenttype (#15680)ViewTransitiontypedeleteDataindestroySessionwhen the session has no ID (#15639).datafiles for hydrating routes with a serverloaderin anssr: falseapp with aprerenderconfigUnstable Changes
<Await unstable_promise={promise}>implementation based on React'suse()API (#15678)React.useinstead of React Router's internal promise trackingerrorElement,useAsyncValue, anduseAsyncErrorsupporterrorElementwhen usingunstable_promise, allowing child render errors to bubble to the nearest React error boundaryReact.use()URIError: URI malformedwhen an API-only (ssr: "unstable_api-only") server receives a URL path with a malformed percent-encoding (#15649)v8.5.0Compare Source
Minor Changes
<ViewTransition>component, available in React 19.3 and later (#15493)viewTransitionprops/options,useViewTransitionState, andNavLink'sisTransitioningrender prop andtransitioningclassPatch Changes
<Await>failing to server render promises decoded from an RSC payload, which caused the Suspense boundary to switch to client rendering (#15597)@types/reactand@types/react-domas optional peer dependencies so the shipped type definitions resolve React types under strict (non-hoisted) node_modules layouts (#15528)unstable_useRouterStatedocumentation example to call the imported alias (#15535)HydrateFallbackof a route discovered throughpatchRoutesOnNavigationduring initial hydration (#15537)state.matcheswhile their loaders run, so<RouterProvider>renders down to the discovered route'sHydrateFallbackinstead of rendering nothingRouterProvidersubscribes, including when other subscribers are already attached, and report current client errors once without replaying server errors during hydration (#15637)matchPathnot treating a static segment as optional when it contains characters outside[\w-](#15425)fetcher.reset(), so its cleared data no longer comes back on the next revalidation (#15633)Unstable Changes
unstable_fetchprop to<HydratedRouter>to customize JavaScript-issued manifest and server data requests in conventional Framework Mode (#15586)navigationType("PUSH","REPLACE", or"POP"for navigation-initiated requests, including reloaded fetchers;nullotherwise)unstable_initiatorandunstable_navigationTypetypeto"navigation"guarantees a non-nullnavigationType, while other data requests have anullnavigationType"initialization"type and include their fetcher key<Link prefetch>use native<link rel="prefetch">elements and do not call the custom implementationunstable_useRouteDiscoveryfor application-controlled route discovery in conventional Framework Mode (#15602)loadAllRoutes()future.unstable_customRouteDiscoveryto opt inevent.defaultBehavior()from a custom mismatch handler to explicitly run built-in recoverynext()v8.4.0Compare Source
Minor Changes
createStaticRouter({ branches })option (#15297)createStaticRouternow caches route branches internally, ignoresbranches, and logs a deprecation warning when the option is providedEntryContext.branchesproperty remains available for compatibility but is always an empty arrayPatch Changes
dataStrategyresult error (#15464)UNSAFE_contexts, so please review carefully if you are using those unsafe exportsdocument.startViewTransitioncalls during initial hydration androuter.revalidate()calls (#15484)SingleFetchNoResultErrorthrown when a fetcher revalidates against a splat route during lazy route discovery (#15395)causeof theUnable to decode turbo-stream responseerror (#15450)Unstable Changes
future.unstable_routePatternMatchingflag for more efficient route matching powered by@remix-run/route-pattern(#15298)unstable_validateParamsroute field to reject invalid parameter values and continue matchingv8.3.1Compare Source
Patch Changes
Expected fetcher: <key>error thrown on navigation when a fetcher is aborted during its post-action revalidation (#15365)<ScrollRestoration>leavinghistory.scrollRestorationset to"auto"after a bfcache restore, which let the browser restore scroll on subsequent history traversals before the destination route had rendered (#15397)relativeoption inuseSubmit/fetcher.submitwhen resolivng theactionpath (#15400)v8.3.0Compare Source
Patch Changes
href/generatePathper RFC 3986 path-segment rules instead ofencodeURIComponent(#15310)$ & + , ; = : @— RFC 3986pchar) are no longer percent-encoded, so values like a semver build1.0.0+1interpolate unchanged instead of becoming1.0.0%2B1/ ? # %, whitespace, non-ASCII) are still escaped exactly as beforecrypto.randomUUID()forcreateMemorySessionStoragesession ids (#15302)createMemorySessionStorageis only intended for local development and testing - sessions are lost when the server restartsNavLinknot applying itspendingstate whentohas a trailing slash (#15300)clientLoadercan skip unnecessary server requests once their components have rendered while still fetching missing server-rendered elements (#15323)TypeError: Invalid state: Unable to enqueue) when a request is aborted while the RSC HTML stream has a pending flush (#15286)injectRSCPayloadreadable side, clear the pending flush, and cancel the underlying RSC payload streamUnstable Changes
Migration
Apps using the default RSC Framework entry do not need to make any changes. Apps with a custom
entry.rsc.tsxshould import the generated client version and pass it tounstable_matchRSCServerRequest:Add CSP nonce support to RSC document rendering (#15320)
nonceoptions tounstable_routeRSCServerRequestandunstable_RSCStaticRouterTo adopt nonce-based CSP, update your
entry.ssr.tsx(runreact-router reveal entry.ssrfirst in RSC Framework Mode) to generate a fresh nonce for each request. Pass it torouteRSCServerRequest, spread therenderHTMLoptions into React's HTML renderer, passoptions.noncetoRSCStaticRouter, and use the same nonce in theContent-Security-Policyresponse header:v8.2.0Compare Source
Patch Changes
href()to properly stringify and URL-encode param values, matchinggeneratePath()(#15277)/school?/user/:id), the internal regex's incorrectly shifted parameter indices resulting in incorrect parameter extraction/one?/two?) were only partially handled/sitemap.xmland outrank them based on definition orderv8.1.0Compare Source
Minor Changes
v8.0.1Compare Source
Patch Changes
AppLoadContexttype export accidentally left over from v7 now that middleware is always enabled and server request context is provided throughRouterContextProvider. (#15207)v8.0.0Compare Source
Major Changes
future.v8_trailingSlashAwareDataRequestsflag (#15100)tsconfig.jsontarget/libfromES2020 -> ES2022(591853e)packages/to ESM-only. (#14895) (59ebcf1)dataparameter in favor ofloaderDataformetaAPIs (to align withRoute.ComponentProps) (#14931)Route.MetaArgs,Route.MetaMatch,MetaArgs,MetaMatch,Route.ComponentProps.matches,UIMatchfuture.v8_passThroughRequestsflag - the raw incomingrequestis now always passed through toloader/action. Useurlfor the normalized URL without React Router-specific implementation details (.datasuffixes,index/_routessearch params). (#15079)hasErrorBoundaryfield added torouter.routeswhen using a data router (#15074)ErrorBoundaryorerrorElementon your routehasErrorBoundaryis no longer accepted onRouteObject(IndexRouteObject/NonIndexRouteObject),DataRouteObject,<Route>JSX props, or as a key inlazyroute definitions.MapRoutePropertiesFunctionsignature no longer requires returninghasErrorBoundary; the router infers it directly.react-router-dompackage (#15076)react-router/domreact-router-domwas kept around as a convenience so existing v6 app imports would still workreact-router-domimports:RouterProvider/HydratedRoutershould be imported fromreact-router/domreact-routerfuture.v8_middlewareflag — middleware is always enabled in v8 (#15078)future.v8_middlewareflag has been removed; middleware is now always enabledcontextparameter passed toloader,action, andmiddlewarefunctions is always aRouterContextProviderinstancegetLoadContextfunctions in custom servers must return aRouterContextProvider— returning a plain object is no longer supportedMiddlewareEnabledtype (previously exported asUNSAFE_MiddlewareEnabled) has been removed since the conditional it gated is now unconditionalFuturemodule augmentation pattern (interface Future { v8_middleware: true }) is no longer needed to typecontextin Data ModeMinor Changes
cookiefrom^1.0.1to^1.1.1set-cookie-parserfrom^2.6.0to^3.1.0Patch Changes
onSubmittype override fromSharedFormPropsto fix deprecation warning with@types/react@19.x(#14932) (59ebcf1)tsuptotsdown. Published package entry points and public APIs are unchanged. (#15092)v7.18.5: v7.18.5Compare Source
See the changelog for release notes: https://github.com/remix-run/react-router/blob/v7/CHANGELOG.md#v7185
v7.18.4: v7.18.4Compare Source
See the changelog for release notes: https://github.com/remix-run/react-router/blob/v7/CHANGELOG.md#v7184
v7.18.3: v7.18.3Compare Source
See the changelog for release notes: https://github.com/remix-run/react-router/blob/v7/CHANGELOG.md#v7183
v7.18.2: v7.18.2Compare Source
See the changelog for release notes: https://github.com/remix-run/react-router/blob/v7/CHANGELOG.md#v7182
v7.18.1: v7.18.1Compare Source
See the changelog for release notes: https://github.com/remix-run/react-router/blob/v7/CHANGELOG.md#v7181
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
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 all
Configuration
📅 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.