Skip to content

Update react-router monorepo to v7.14.0#48

Open
renovate[bot] wants to merge 1 commit intomainfrom
renovate/react-router-monorepo
Open

Update react-router monorepo to v7.14.0#48
renovate[bot] wants to merge 1 commit intomainfrom
renovate/react-router-monorepo

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate bot commented Sep 24, 2025

This PR contains the following updates:

Package Change Age Confidence
@react-router/dev (source) 7.9.17.14.0 age confidence
@react-router/serve (source) 7.9.17.14.0 age confidence

Release Notes

remix-run/react-router (@​react-router/dev)

v7.14.0

Compare Source

Minor Changes
Patch Changes
  • support for prerendering multiple server bundles with v8_viteEnvironmentApi (#​14921)

  • rsc framework mode prerender / spa mode support (#​14907)

  • 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:

    Server Component Export Client Component
    ServerComponent default
    ServerErrorBoundary ErrorBoundary
    ServerLayout Layout
    ServerHydrateFallback HydrateFallback

    If you were previously exporting a ServerComponent, your ErrorBoundary, Layout, and HydrateFallback were also server components. If you want to keep those as server components, you can rename them and prefix them with Server. If you were previously importing the implementations of those components from a client module, you can simply inline them.

    Example:

    Before

    import { ErrorBoundary as ClientErrorBoundary } from "./client";
    
    export function ServerComponent() {
      // ...
    }
    
    export function ErrorBoundary() {
      return <ClientErrorBoundary />;
    }
    
    export function Layout() {
      // ...
    }
    
    export function HydrateFallback() {
      // ...
    }

    After

    export function ServerComponent() {
      // ...
    }
    
    export function ErrorBoundary() {
      // previous implementation of ClientErrorBoundary, this is now a client component
    }
    
    export function ServerLayout() {
      // rename previous Layout export to ServerLayout to make it a server component
    }
    
    export function ServerHydrateFallback() {
      // rename previous HydrateFallback export to ServerHydrateFallback to make it a server component
    }
  • update the reveal command to support rsc for entry.client, entry.rsc, entry.ssr (#​14904)

  • Updated dependencies:

    • react-router@7.14.0
    • @react-router/node@7.14.0
    • @react-router/serve@7.14.0

v7.13.2

Compare Source

Patch Changes
  • Fix react-router dev crash when Unix socket files exist in the project root (#​14854)

  • Escape redirect locations in prerendered redirect HTML (#​14880)

  • Add future.unstable_passThroughRequests flag (#​14775)

    By default, React Router normalizes the request.url passed to your loader, action, and middleware functions by removing React Router's internal implementation details (.data suffixes, index + _routes query params).

    Enabling this flag removes that normalization and passes the raw HTTP request instance to your handlers. This provides a few benefits:

    • Reduces server-side overhead by eliminating multiple new Request() calls on the critical path
    • Allows you to distinguish document from data requests in your handlers base don the presence of a .data suffix (useful for observability purposes)

    If you were previously relying on the normalization of request.url, you can switch to use the new sibling unstable_url parameter which contains a URL instance representing the normalized location:

    // ❌ Before: you could assume there was no `.data` suffix in `request.url`
    export async function loader({ request }: Route.LoaderArgs) {
      let url = new URL(request.url);
      if (url.pathname === "/path") {
        // This check will fail with the flag enabled because the `.data` suffix will
        // exist on data requests
      }
    }
    
    // ✅ After: use `unstable_url` for normalized routing logic and `request.url`
    // for raw routing logic
    export async function loader({ request, unstable_url }: Route.LoaderArgs) {
      if (unstable_url.pathname === "/path") {
        // This will always have the `.data` suffix stripped
      }
    
      // And now you can distinguish between document versus data requests
      let isDataRequest = new URL(request.url).pathname.endsWith(".data");
    }
  • Add a new unstable_url: URL parameter 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/_routes query params) (#​14775)

    This is being added alongside the new future.unstable_passthroughRequests future flag so that users still have a way to access the normalized URL when that flag is enabled and non-normalized request'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 of request.url in your application code.

    If you don't have the flag enabled, then unstable_url will match request.url.

  • Updated dependencies:

    • react-router@7.13.2
    • @react-router/node@7.13.2
    • @react-router/serve@7.13.2

v7.13.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.1
    • @react-router/node@7.13.1
    • @react-router/serve@7.13.1

v7.13.0

Compare Source

Patch Changes

v7.12.0

Compare Source

Minor Changes
  • Add additional layer of CSRF protection by rejecting submissions to UI routes from external origins. If you need to permit access to specific external origins, you can specify them in the react-router.config.ts config allowedActionOrigins field. (#​14708)
Patch Changes
  • Fix Maximum call stack size exceeded errors when HMR is triggered against code with cyclic imports (#​14522)

  • fix(vite): Skip SSR middleware in preview server for SPA mode (#​14673)

  • [UNSTABLE] Add a new future.unstable_trailingSlashAwareDataRequests flag to provide consistent behavior of request.pathname inside middleware, loader, and action functions on document and data requests when a trailing slash is present in the browser URL. (#​14644)

    Currently, your HTTP and request pathnames would be as follows for /a/b/c and /a/b/c/

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /a/b/c.data /a/b/c ⚠️

    With this flag enabled, these pathnames will be made consistent though a new _.data format for client-side .data requests:

    URL /a/b/c HTTP pathname request pathname`
    Document /a/b/c /a/b/c
    Data /a/b/c.data /a/b/c
    URL /a/b/c/ HTTP pathname request pathname`
    Document /a/b/c/ /a/b/c/
    Data /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 .data requests from /_root.data to /_.data when navigating to / to align with the new format. This does not impact the request pathname which is still / in all cases.

  • Updated dependencies:

    • react-router@7.12.0
    • @react-router/node@7.12.0
    • @react-router/serve@7.12.0

v7.11.0

Compare Source

Minor Changes
Patch Changes
  • rsc framework mode manual chunking for react and react-router deps (#​14655)
  • add support for throwing redirect Response's at RSC render time (#​14596)
  • support custom entrypoints for RSC framework mode (#​14643)
  • routeRSCServerRequest replace fetchServer with serverResponse (#​14597)
  • rsc framewlrk mode - optimize react-server-dom-webpack if in project package.json (#​14656)
  • Updated dependencies:
    • react-router@7.11.0
    • @react-router/serve@7.11.0
    • @react-router/node@7.11.0

v7.10.1

Compare Source

Patch Changes
  • Import ESM package pkg-types with a dynamic import() to fix issues on Node 20.18 (#​14624)
  • Update valibot dependency to ^1.2.0 to address GHSA-vqpr-j7v3-hqw9 (#​14608)
  • Updated dependencies:
    • react-router@7.10.1
    • @react-router/node@7.10.1
    • @react-router/serve@7.10.1

v7.10.0

Compare Source

Minor Changes
  • Stabilize future.v8_splitRouteModules, replacing future.unstable_splitRouteModules (#​14595)

    • ⚠️ This is a breaking change if you have begun using future.unstable_splitRouteModules. Please update your react-router.config.ts.
  • Stabilize future.v8_viteEnvironmentApi, replacing future.unstable_viteEnvironmentApi (#​14595)

    • ⚠️ This is a breaking change if you have begun using future.unstable_viteEnvironmentApi. Please update your react-router.config.ts.
Patch Changes
  • Load environment variables before evaluating routes.ts (#​14446)

    For example, you can now compute your routes based on VITE_-prefixed environment variables:

    # .env
    VITE_ENV_ROUTE=my-route
    // app/routes.ts
    import { type RouteConfig, route } from "@&#8203;react-router/dev/routes";
    
    const routes: RouteConfig = [];
    if (import.meta.env.VITE_ENV_ROUTE === "my-route") {
      routes.push(route("my-route", "routes/my-route.tsx"));
    }
    
    export default routes;
  • Updated dependencies:

    • react-router@7.10.0
    • @react-router/node@7.10.0
    • @react-router/serve@7.10.0

v7.9.6

Compare Source

Patch Changes
  • Use a dynamic import() to load ESM-only p-map dependency to avoid issues on Node 20.18 and below (#​14492)
  • Short circuit HEAD document requests before calling renderToPipeableStream in the default entry.server.tsx to more closely align with the spec (#​14488)
  • Updated dependencies:
    • react-router@7.9.6
    • @react-router/node@7.9.6
    • @react-router/serve@7.9.6

v7.9.5

Compare Source

Patch Changes
  • Introduce a prerender.unstable_concurrency option, to support running the prerendering concurrently, potentially speeding up the build. (#​14380)
  • Move RSCHydratedRouter and utils to /dom export. (#​14457)
  • Ensure route navigation doesn't remove CSS link elements used by dynamic imports (#​14463)
  • Typegen: only register route module types for routes within the app directory (#​14439)
  • Updated dependencies:
    • react-router@7.9.5
    • @react-router/node@7.9.5
    • @react-router/serve@7.9.5

v7.9.4

Compare Source

Patch Changes
  • Update valibot dependency to ^1.1.0 (#​14379)

  • New (unstable) useRoute hook for accessing data from specific routes (#​14407)

    For example, let's say you have an admin route somewhere in your app and you want any child routes of admin to all have access to the loaderData and actionData from admin.

    // app/routes/admin.tsx
    import { Outlet } from "react-router";
    
    export const loader = () => ({ message: "Hello, loader!" });
    
    export const action = () => ({ count: 1 });
    
    export default function Component() {
      return (
        <div>
          {/* ... */}
          <Outlet />
          {/* ... */}
        </div>
      );
    }

    You might even want to create a reusable widget that all of the routes nested under admin could use:

    import { unstable_useRoute as useRoute } from "react-router";
    
    export function AdminWidget() {
      // How to get `message` and `count` from `admin` route?
    }

    In framework mode, useRoute knows all your app's routes and gives you TS errors when invalid route IDs are passed in:

    export function AdminWidget() {
      const admin = useRoute("routes/dmin");
      //                      ^^^^^^^^^^^
    }

    useRoute returns undefined if the route is not part of the current page:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
    }

    Note: the root route is the exception since it is guaranteed to be part of the current page.
    As a result, useRoute never returns undefined for root.

    loaderData and actionData are marked as optional since they could be accessed before the action is triggered or after the loader threw an error:

    export function AdminWidget() {
      const admin = useRoute("routes/admin");
      if (!admin) {
        throw new Error(`AdminWidget used outside of "routes/admin"`);
      }
      const { loaderData, actionData } = admin;
      console.log(loaderData);
      //          ^? { message: string } | undefined
      console.log(actionData);
      //          ^? { count: number } | undefined
    }

    If instead of a specific route, you wanted access to the current route's loaderData and actionData, you can call useRoute without arguments:

    export function AdminWidget() {
      const currentRoute = useRoute();
      currentRoute.loaderData;
      currentRoute.actionData;
    }

    This usage is equivalent to calling useLoaderData and useActionData, 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, loaderData and actionData are typed as unknown.
    If you want more type-safety, you can either narrow the type yourself with something like zod or you can refactor your app to pass down typed props to your AdminWidget:

    export function AdminWidget({
      message,
      count,
    }: {
      message: string;
      count: number;
    }) {
      /* ... */
    }
  • Updated dependencies:

    • react-router@7.9.4
    • @react-router/node@7.9.4
    • @react-router/serve@7.9.4

v7.9.3

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.3
    • @react-router/node@7.9.3
    • @react-router/serve@7.9.3

v7.9.2

Compare Source

Patch Changes
  • Fix preset future flags being ignored during config resolution (#​14369)

    Fixes a bug where future flags defined by presets were completely ignored. The config resolution was incorrectly reading from reactRouterUserConfig.future instead of the merged userAndPresetConfigs.future, causing all preset-defined future flags to be lost.

    This fix ensures presets can properly enable experimental features as intended by the preset system design.

  • Add unstable support for RSC Framework Mode (#​14336)

  • Switch internal vite plugin Response logic to use @remix-run/node-fetch-server (#​13927)

  • Updated dependencies:

    • react-router@7.9.2
    • @react-router/serve@7.9.2
    • @react-router/node@7.9.2
remix-run/react-router (@​react-router/serve)

v7.14.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.14.0
    • @react-router/node@7.14.0
    • @react-router/express@7.14.0

v7.13.2

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.2
    • @react-router/node@7.13.2
    • @react-router/express@7.13.2

v7.13.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.1
    • @react-router/node@7.13.1
    • @react-router/express@7.13.1

v7.13.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.13.0
    • @react-router/node@7.13.0
    • @react-router/express@7.13.0

v7.12.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.12.0
    • @react-router/node@7.12.0
    • @react-router/express@7.12.0

v7.11.0

Compare Source

Patch Changes
  • support custom entrypoints for RSC framework mode (#​14643)
  • Update compression and morgan dependencies to address on-headers CVE: GHSA-76c9-3jph-rj3q (#​14652)
  • Updated dependencies:
    • react-router@7.11.0
    • @react-router/node@7.11.0
    • @react-router/express@7.11.0

v7.10.1

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.1
    • @react-router/node@7.10.1
    • @react-router/express@7.10.1

v7.10.0

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.10.0
    • @react-router/node@7.10.0
    • @react-router/express@7.10.0

v7.9.6

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.6
    • @react-router/node@7.9.6
    • @react-router/express@7.9.6

v7.9.5

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.5
    • @react-router/node@7.9.5
    • @react-router/express@7.9.5

v7.9.4

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.4
    • @react-router/node@7.9.4
    • @react-router/express@7.9.4

v7.9.3

Compare Source

Patch Changes
  • Updated dependencies:
    • react-router@7.9.3
    • @react-router/node@7.9.3
    • @react-router/express@7.9.3

v7.9.2

Compare Source

Patch Changes
  • disable compression for RSC responses for now (#​14381)
  • Updated dependencies:
    • react-router@7.9.2
    • @react-router/node@7.9.2
    • @react-router/express@7.9.2

Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 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 these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from a103245 to efb5c11 Compare September 26, 2025 22:00
@renovate renovate bot changed the title Update react-router monorepo to v7.9.2 Update react-router monorepo to v7.9.3 Sep 26, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from efb5c11 to 0781256 Compare October 8, 2025 18:13
@renovate renovate bot changed the title Update react-router monorepo to v7.9.3 Update react-router monorepo to v7.9.4 Oct 8, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 0781256 to ed91542 Compare October 29, 2025 22:51
@renovate renovate bot changed the title Update react-router monorepo to v7.9.4 Update react-router monorepo to v7.9.5 Oct 29, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from ed91542 to d2268cb Compare November 13, 2025 23:53
@renovate renovate bot changed the title Update react-router monorepo to v7.9.5 Update react-router monorepo to v7.9.6 Nov 13, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from d2268cb to 0039e46 Compare November 18, 2025 12:00
@renovate renovate bot changed the title Update react-router monorepo to v7.9.6 Update react-router monorepo to v7.10.0 Dec 2, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch 2 times, most recently from 56ba538 to 36a0c55 Compare December 4, 2025 17:43
@renovate renovate bot changed the title Update react-router monorepo to v7.10.0 Update react-router monorepo to v7.10.1 Dec 4, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 36a0c55 to ebfbb85 Compare December 17, 2025 19:14
@renovate renovate bot changed the title Update react-router monorepo to v7.10.1 Update react-router monorepo to v7.11.0 Dec 17, 2025
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from ebfbb85 to 7983255 Compare January 7, 2026 20:40
@renovate renovate bot changed the title Update react-router monorepo to v7.11.0 Update react-router monorepo to v7.12.0 Jan 7, 2026
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 7983255 to f62f92a Compare January 9, 2026 01:34
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from f62f92a to 9ad162c Compare January 23, 2026 22:03
@renovate renovate bot changed the title Update react-router monorepo to v7.12.0 Update react-router monorepo to v7.13.0 Jan 23, 2026
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 9ad162c to da77e66 Compare February 12, 2026 11:54
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from da77e66 to dd1e184 Compare February 23, 2026 18:16
@renovate renovate bot changed the title Update react-router monorepo to v7.13.0 Update react-router monorepo to v7.13.1 Feb 23, 2026
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from dd1e184 to a6ae2ff Compare March 23, 2026 18:00
@renovate renovate bot changed the title Update react-router monorepo to v7.13.1 Update react-router monorepo to v7.13.2 Mar 23, 2026
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch 2 times, most recently from 73688c1 to 7420ddf Compare March 30, 2026 20:56
@renovate renovate bot force-pushed the renovate/react-router-monorepo branch from 7420ddf to cff4216 Compare April 2, 2026 21:45
@renovate renovate bot changed the title Update react-router monorepo to v7.13.2 Update react-router monorepo to v7.14.0 Apr 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants