Skip to content

Conversation

@renovate
Copy link
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.12.0 age confidence
@react-router/serve (source) 7.9.17.12.0 age confidence

Release Notes

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

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 "@​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.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: 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
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.

1 participant