Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: remix-run/react-router
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: react-router-dom@7.4.0
Choose a base ref
...
head repository: remix-run/react-router
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: react-router-dom@7.4.1
Choose a head ref

Commits on Mar 18, 2025

  1. Fix grammatical error (#13249)

    * Fix grammatical error
    
    * Update contributors.yml
    samimsu authored Mar 18, 2025
    Copy the full SHA
    e202977 View commit details
  2. Copy the full SHA
    1635219 View commit details

Commits on Mar 19, 2025

  1. Copy the full SHA
    91c7bac View commit details
  2. Copy the full SHA
    5ba8f4a View commit details
  3. Copy the full SHA
    205f0de View commit details
  4. chore: format

    remix-run-bot committed Mar 19, 2025
    Copy the full SHA
    ef64c55 View commit details
  5. chore: format

    remix-run-bot committed Mar 19, 2025
    Copy the full SHA
    e2b74d9 View commit details
  6. Copy the full SHA
    4447236 View commit details
  7. Copy the full SHA
    ef30a33 View commit details
  8. Copy the full SHA
    237304d View commit details

Commits on Mar 20, 2025

  1. Copy the full SHA
    47c4c03 View commit details
  2. Copy the full SHA
    f1e14a2 View commit details
  3. Fix wording on layout routes

    Fixes #13270
    timdorr authored Mar 20, 2025
    Copy the full SHA
    b97a9c8 View commit details

Commits on Mar 22, 2025

  1. Link the links link to links

    timdorr authored Mar 22, 2025
    Copy the full SHA
    4db774f View commit details
  2. Also fix the meta link

    timdorr authored Mar 22, 2025
    Copy the full SHA
    cbb711f View commit details

Commits on Mar 24, 2025

  1. fix Location link (#13291)

    * fix Location link
    
    * add username to contributors.yml
    justjavac authored Mar 24, 2025
    Copy the full SHA
    aff9797 View commit details

Commits on Mar 25, 2025

  1. more data docs

    ryanflorence committed Mar 25, 2025
    Copy the full SHA
    3cb7b48 View commit details

Commits on Mar 26, 2025

  1. Copy the full SHA
    efa08f6 View commit details
  2. host parse (#13309)

    jacob-ebey authored Mar 26, 2025
    Copy the full SHA
    6fdb79b View commit details
  3. chore: format

    remix-run-bot committed Mar 26, 2025
    Copy the full SHA
    1dd8128 View commit details
  4. Copy the full SHA
    b48d1b4 View commit details
  5. Enter prerelease mode

    brophdawg11 committed Mar 26, 2025
    Copy the full SHA
    bc5ccc6 View commit details
  6. chore: Update version for release (pre) (#13312)

    * chore: Update version for release (pre)
    
    * Draft release notes
    
    ---------
    
    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    Co-authored-by: Matt Brophy <matt@brophy.org>
    github-actions[bot] and brophdawg11 authored Mar 26, 2025
    Copy the full SHA
    9693bf4 View commit details
  7. update changelog

    jacob-ebey committed Mar 26, 2025
    Copy the full SHA
    1a5ba7c View commit details

Commits on Mar 28, 2025

  1. Update release notes

    brophdawg11 committed Mar 28, 2025
    Copy the full SHA
    2cf0a49 View commit details
  2. Exit prerelease mode

    brophdawg11 committed Mar 28, 2025
    Copy the full SHA
    1bdd091 View commit details
  3. chore: Update version for release (#13322)

    Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
    github-actions[bot] authored Mar 28, 2025
    Copy the full SHA
    7350eef View commit details
Showing with 2,263 additions and 559 deletions.
  1. +110 −76 CHANGELOG.md
  2. +2 −0 contributors.yml
  3. +1 −1 docs/api/components/Links.md
  4. +1 −1 docs/api/components/Meta.md
  5. +3 −3 docs/api/hooks/unstable_usePrompt.md
  6. +2 −2 docs/api/hooks/useBlocker.md
  7. +1 −1 docs/api/hooks/useLocation.md
  8. +138 −0 docs/start/data/actions.md
  9. +6 −1 docs/start/data/custom.md
  10. +40 −0 docs/start/data/data-loading.md
  11. +55 −0 docs/start/data/installation.md
  12. +12 −0 docs/start/data/navigating.md
  13. +12 −0 docs/start/data/pending-ui.md
  14. +186 −0 docs/start/data/route-object.md
  15. +281 −0 docs/start/data/routing.md
  16. +2 −8 docs/start/declarative/installation.md
  17. +4 −0 docs/start/declarative/navigating.md
  18. +2 −0 docs/start/declarative/routing.md
  19. +2 −0 docs/start/declarative/url-values.md
  20. +4 −0 docs/start/framework/actions.md
  21. +4 −0 docs/start/framework/data-loading.md
  22. +3 −3 docs/start/framework/deploying.md
  23. +2 −8 docs/start/framework/installation.md
  24. +4 −0 docs/start/framework/navigating.md
  25. +4 −0 docs/start/framework/pending-ui.md
  26. +4 −0 docs/start/framework/rendering.md
  27. +4 −0 docs/start/framework/route-module.md
  28. +5 −17 docs/start/framework/routing.md
  29. +4 −0 docs/start/framework/testing.md
  30. +19 −2 docs/start/modes.md
  31. +185 −6 integration/middleware-test.ts
  32. +24 −0 integration/typegen-test.ts
  33. +2 −0 packages/create-react-router/CHANGELOG.md
  34. +1 −1 packages/create-react-router/package.json
  35. +8 −0 packages/react-router-architect/CHANGELOG.md
  36. +1 −1 packages/react-router-architect/package.json
  37. +7 −0 packages/react-router-cloudflare/CHANGELOG.md
  38. +1 −1 packages/react-router-cloudflare/package.json
  39. +14 −1 packages/react-router-dev/CHANGELOG.md
  40. +2 −0 packages/react-router-dev/manifest.ts
  41. +1 −1 packages/react-router-dev/package.json
  42. +1 −1 packages/react-router-dev/typegen/index.ts
  43. +38 −2 packages/react-router-dev/vite/plugin.ts
  44. +2 −0 packages/react-router-dev/vite/route-chunks.ts
  45. +6 −1 packages/react-router-dev/vite/static/refresh-utils.cjs
  46. +8 −1 packages/react-router-dom/CHANGELOG.md
  47. +1 −1 packages/react-router-dom/package.json
  48. +10 −1 packages/react-router-express/CHANGELOG.md
  49. +24 −0 packages/react-router-express/__tests__/server-test.ts
  50. +1 −1 packages/react-router-express/package.json
  51. +9 −3 packages/react-router-express/server.ts
  52. +7 −0 packages/react-router-fs-routes/CHANGELOG.md
  53. +1 −1 packages/react-router-fs-routes/package.json
  54. +8 −1 packages/react-router-node/CHANGELOG.md
  55. +1 −1 packages/react-router-node/package.json
  56. +7 −0 packages/react-router-remix-routes-option-adapter/CHANGELOG.md
  57. +1 −1 packages/react-router-remix-routes-option-adapter/package.json
  58. +10 −1 packages/react-router-serve/CHANGELOG.md
  59. +1 −1 packages/react-router-serve/package.json
  60. +13 −1 packages/react-router/CHANGELOG.md
  61. +374 −0 packages/react-router/__tests__/router/context-middleware-test.ts
  62. +37 −23 packages/react-router/__tests__/router/data-strategy-test.ts
  63. +313 −247 packages/react-router/__tests__/router/lazy-test.ts
  64. +19 −52 packages/react-router/__tests__/router/utils/data-router-setup.ts
  65. +2 −0 packages/react-router/lib/context.ts
  66. +9 −0 packages/react-router/lib/dom/ssr/components.tsx
  67. +5 −3 packages/react-router/lib/dom/ssr/routes-test-stub.tsx
  68. +19 −3 packages/react-router/lib/dom/ssr/routes.tsx
  69. +147 −65 packages/react-router/lib/router/router.ts
  70. +21 −11 packages/react-router/lib/router/utils.ts
  71. +2 −2 packages/react-router/lib/types/route-module.ts
  72. +1 −1 packages/react-router/package.json
  73. +1 −0 playground/middleware/dev-server.ts
  74. +1 −0 playground/middleware/react-router.config.ts
186 changes: 110 additions & 76 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -13,15 +13,19 @@ We manage release notes in this file instead of the paginated Github Releases Pa
<summary>Table of Contents</summary>

- [React Router Releases](#react-router-releases)
- [v7.4.0](#v740)
- [Minor Changes](#minor-changes)
- [v7.4.1](#v741)
- [Security Notice](#security-notice)
- [Patch Changes](#patch-changes)
- [Unstable Changes](#unstable-changes)
- [v7.4.0](#v740)
- [Minor Changes](#minor-changes)
- [Patch Changes](#patch-changes-1)
- [Unstable Changes](#unstable-changes-1)
- [Changes by Package](#changes-by-package)
- [v7.3.0](#v730)
- [Minor Changes](#minor-changes-1)
- [Patch Changes](#patch-changes-1)
- [Unstable Changes](#unstable-changes-1)
- [Patch Changes](#patch-changes-2)
- [Unstable Changes](#unstable-changes-2)
- [Client-side `context` (unstable)](#client-side-context-unstable)
- [Middleware (unstable)](#middleware-unstable)
- [Middleware `context` parameter](#middleware-context-parameter)
@@ -33,28 +37,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [Prerendering with a SPA Fallback](#prerendering-with-a-spa-fallback)
- [Allow a root `loader` in SPA Mode](#allow-a-root-loader-in-spa-mode)
- [Minor Changes](#minor-changes-2)
- [Patch Changes](#patch-changes-2)
- [Unstable Changes](#unstable-changes-2)
- [Patch Changes](#patch-changes-3)
- [Unstable Changes](#unstable-changes-3)
- [Split Route Modules (unstable)](#split-route-modules-unstable)
- [Changes by Package](#changes-by-package-2)
- [v7.1.5](#v715)
- [Patch Changes](#patch-changes-3)
- [v7.1.4](#v714)
- [Patch Changes](#patch-changes-4)
- [v7.1.3](#v713)
- [v7.1.4](#v714)
- [Patch Changes](#patch-changes-5)
- [v7.1.2](#v712)
- [v7.1.3](#v713)
- [Patch Changes](#patch-changes-6)
- [v7.1.1](#v711)
- [v7.1.2](#v712)
- [Patch Changes](#patch-changes-7)
- [v7.1.1](#v711)
- [Patch Changes](#patch-changes-8)
- [v7.1.0](#v710)
- [Minor Changes](#minor-changes-3)
- [Patch Changes](#patch-changes-8)
- [Patch Changes](#patch-changes-9)
- [Changes by Package](#changes-by-package-3)
- [v7.0.2](#v702)
- [Patch Changes](#patch-changes-9)
- [v7.0.1](#v701)
- [Patch Changes](#patch-changes-10)
- [v7.0.1](#v701)
- [Patch Changes](#patch-changes-11)
- [v7.0.0](#v700)
- [Breaking Changes](#breaking-changes)
- [Package Restructuring](#package-restructuring)
@@ -71,199 +75,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
- [Major Changes (`react-router`)](#major-changes-react-router)
- [Major Changes (`@react-router/*`)](#major-changes-react-router-1)
- [Minor Changes](#minor-changes-4)
- [Patch Changes](#patch-changes-11)
- [Patch Changes](#patch-changes-12)
- [Changes by Package](#changes-by-package-4)
- [React Router v6 Releases](#react-router-v6-releases)
- [v6.30.0](#v6300)
- [Minor Changes](#minor-changes-5)
- [Patch Changes](#patch-changes-12)
- [Patch Changes](#patch-changes-13)
- [v6.29.0](#v6290)
- [Minor Changes](#minor-changes-6)
- [Patch Changes](#patch-changes-13)
- [v6.28.2](#v6282)
- [Patch Changes](#patch-changes-14)
- [v6.28.1](#v6281)
- [v6.28.2](#v6282)
- [Patch Changes](#patch-changes-15)
- [v6.28.1](#v6281)
- [Patch Changes](#patch-changes-16)
- [v6.28.0](#v6280)
- [What's Changed](#whats-changed-1)
- [Minor Changes](#minor-changes-7)
- [Patch Changes](#patch-changes-16)
- [Patch Changes](#patch-changes-17)
- [v6.27.0](#v6270)
- [What's Changed](#whats-changed-2)
- [Stabilized APIs](#stabilized-apis)
- [Minor Changes](#minor-changes-8)
- [Patch Changes](#patch-changes-17)
- [v6.26.2](#v6262)
- [Patch Changes](#patch-changes-18)
- [v6.26.1](#v6261)
- [v6.26.2](#v6262)
- [Patch Changes](#patch-changes-19)
- [v6.26.1](#v6261)
- [Patch Changes](#patch-changes-20)
- [v6.26.0](#v6260)
- [Minor Changes](#minor-changes-9)
- [Patch Changes](#patch-changes-20)
- [v6.25.1](#v6251)
- [Patch Changes](#patch-changes-21)
- [v6.25.1](#v6251)
- [Patch Changes](#patch-changes-22)
- [v6.25.0](#v6250)
- [What's Changed](#whats-changed-3)
- [Stabilized `v7_skipActionErrorRevalidation`](#stabilized-v7_skipactionerrorrevalidation)
- [Minor Changes](#minor-changes-10)
- [Patch Changes](#patch-changes-22)
- [v6.24.1](#v6241)
- [Patch Changes](#patch-changes-23)
- [v6.24.1](#v6241)
- [Patch Changes](#patch-changes-24)
- [v6.24.0](#v6240)
- [What's Changed](#whats-changed-4)
- [Lazy Route Discovery (a.k.a. "Fog of War")](#lazy-route-discovery-aka-fog-of-war)
- [Minor Changes](#minor-changes-11)
- [Patch Changes](#patch-changes-24)
- [v6.23.1](#v6231)
- [Patch Changes](#patch-changes-25)
- [v6.23.1](#v6231)
- [Patch Changes](#patch-changes-26)
- [v6.23.0](#v6230)
- [What's Changed](#whats-changed-5)
- [Data Strategy (unstable)](#data-strategy-unstable)
- [Skip Action Error Revalidation (unstable)](#skip-action-error-revalidation-unstable)
- [Minor Changes](#minor-changes-12)
- [v6.22.3](#v6223)
- [Patch Changes](#patch-changes-26)
- [v6.22.2](#v6222)
- [Patch Changes](#patch-changes-27)
- [v6.22.1](#v6221)
- [v6.22.2](#v6222)
- [Patch Changes](#patch-changes-28)
- [v6.22.1](#v6221)
- [Patch Changes](#patch-changes-29)
- [v6.22.0](#v6220)
- [What's Changed](#whats-changed-6)
- [Core Web Vitals Technology Report Flag](#core-web-vitals-technology-report-flag)
- [Minor Changes](#minor-changes-13)
- [Patch Changes](#patch-changes-29)
- [v6.21.3](#v6213)
- [Patch Changes](#patch-changes-30)
- [v6.21.2](#v6212)
- [v6.21.3](#v6213)
- [Patch Changes](#patch-changes-31)
- [v6.21.1](#v6211)
- [v6.21.2](#v6212)
- [Patch Changes](#patch-changes-32)
- [v6.21.1](#v6211)
- [Patch Changes](#patch-changes-33)
- [v6.21.0](#v6210)
- [What's Changed](#whats-changed-7)
- [`future.v7_relativeSplatPath`](#futurev7_relativesplatpath)
- [Partial Hydration](#partial-hydration)
- [Minor Changes](#minor-changes-14)
- [Patch Changes](#patch-changes-33)
- [v6.20.1](#v6201)
- [Patch Changes](#patch-changes-34)
- [v6.20.1](#v6201)
- [Patch Changes](#patch-changes-35)
- [v6.20.0](#v6200)
- [Minor Changes](#minor-changes-15)
- [Patch Changes](#patch-changes-35)
- [Patch Changes](#patch-changes-36)
- [v6.19.0](#v6190)
- [What's Changed](#whats-changed-8)
- [`unstable_flushSync` API](#unstable_flushsync-api)
- [Minor Changes](#minor-changes-16)
- [Patch Changes](#patch-changes-36)
- [Patch Changes](#patch-changes-37)
- [v6.18.0](#v6180)
- [What's Changed](#whats-changed-9)
- [New Fetcher APIs](#new-fetcher-apis)
- [Persistence Future Flag (`future.v7_fetcherPersist`)](#persistence-future-flag-futurev7_fetcherpersist)
- [Minor Changes](#minor-changes-17)
- [Patch Changes](#patch-changes-37)
- [Patch Changes](#patch-changes-38)
- [v6.17.0](#v6170)
- [What's Changed](#whats-changed-10)
- [View Transitions 🚀](#view-transitions-)
- [Minor Changes](#minor-changes-18)
- [Patch Changes](#patch-changes-38)
- [Patch Changes](#patch-changes-39)
- [v6.16.0](#v6160)
- [Minor Changes](#minor-changes-19)
- [Patch Changes](#patch-changes-39)
- [Patch Changes](#patch-changes-40)
- [v6.15.0](#v6150)
- [Minor Changes](#minor-changes-20)
- [Patch Changes](#patch-changes-40)
- [v6.14.2](#v6142)
- [Patch Changes](#patch-changes-41)
- [v6.14.1](#v6141)
- [v6.14.2](#v6142)
- [Patch Changes](#patch-changes-42)
- [v6.14.1](#v6141)
- [Patch Changes](#patch-changes-43)
- [v6.14.0](#v6140)
- [What's Changed](#whats-changed-11)
- [JSON/Text Submissions](#jsontext-submissions)
- [Minor Changes](#minor-changes-21)
- [Patch Changes](#patch-changes-43)
- [Patch Changes](#patch-changes-44)
- [v6.13.0](#v6130)
- [What's Changed](#whats-changed-12)
- [`future.v7_startTransition`](#futurev7_starttransition)
- [Minor Changes](#minor-changes-22)
- [Patch Changes](#patch-changes-44)
- [v6.12.1](#v6121)
- [Patch Changes](#patch-changes-45)
- [v6.12.1](#v6121)
- [Patch Changes](#patch-changes-46)
- [v6.12.0](#v6120)
- [What's Changed](#whats-changed-13)
- [`React.startTransition` support](#reactstarttransition-support)
- [Minor Changes](#minor-changes-23)
- [Patch Changes](#patch-changes-46)
- [v6.11.2](#v6112)
- [Patch Changes](#patch-changes-47)
- [v6.11.1](#v6111)
- [v6.11.2](#v6112)
- [Patch Changes](#patch-changes-48)
- [v6.11.1](#v6111)
- [Patch Changes](#patch-changes-49)
- [v6.11.0](#v6110)
- [Minor Changes](#minor-changes-24)
- [Patch Changes](#patch-changes-49)
- [Patch Changes](#patch-changes-50)
- [v6.10.0](#v6100)
- [What's Changed](#whats-changed-14)
- [Minor Changes](#minor-changes-25)
- [`future.v7_normalizeFormMethod`](#futurev7_normalizeformmethod)
- [Patch Changes](#patch-changes-50)
- [Patch Changes](#patch-changes-51)
- [v6.9.0](#v690)
- [What's Changed](#whats-changed-15)
- [`Component`/`ErrorBoundary` route properties](#componenterrorboundary-route-properties)
- [Introducing Lazy Route Modules](#introducing-lazy-route-modules)
- [Minor Changes](#minor-changes-26)
- [Patch Changes](#patch-changes-51)
- [v6.8.2](#v682)
- [Patch Changes](#patch-changes-52)
- [v6.8.1](#v681)
- [v6.8.2](#v682)
- [Patch Changes](#patch-changes-53)
- [v6.8.1](#v681)
- [Patch Changes](#patch-changes-54)
- [v6.8.0](#v680)
- [Minor Changes](#minor-changes-27)
- [Patch Changes](#patch-changes-54)
- [Patch Changes](#patch-changes-55)
- [v6.7.0](#v670)
- [Minor Changes](#minor-changes-28)
- [Patch Changes](#patch-changes-55)
- [v6.6.2](#v662)
- [Patch Changes](#patch-changes-56)
- [v6.6.1](#v661)
- [v6.6.2](#v662)
- [Patch Changes](#patch-changes-57)
- [v6.6.1](#v661)
- [Patch Changes](#patch-changes-58)
- [v6.6.0](#v660)
- [What's Changed](#whats-changed-16)
- [Minor Changes](#minor-changes-29)
- [Patch Changes](#patch-changes-58)
- [Patch Changes](#patch-changes-59)
- [v6.5.0](#v650)
- [What's Changed](#whats-changed-17)
- [Minor Changes](#minor-changes-30)
- [Patch Changes](#patch-changes-59)
- [v6.4.5](#v645)
- [Patch Changes](#patch-changes-60)
- [v6.4.4](#v644)
- [v6.4.5](#v645)
- [Patch Changes](#patch-changes-61)
- [v6.4.3](#v643)
- [v6.4.4](#v644)
- [Patch Changes](#patch-changes-62)
- [v6.4.2](#v642)
- [v6.4.3](#v643)
- [Patch Changes](#patch-changes-63)
- [v6.4.1](#v641)
- [v6.4.2](#v642)
- [Patch Changes](#patch-changes-64)
- [v6.4.1](#v641)
- [Patch Changes](#patch-changes-65)
- [v6.4.0](#v640)
- [What's Changed](#whats-changed-18)
- [Remix Data APIs](#remix-data-apis)
- [Patch Changes](#patch-changes-65)
- [Patch Changes](#patch-changes-66)
- [v6.3.0](#v630)
- [Minor Changes](#minor-changes-31)
- [v6.2.2](#v622)
- [Patch Changes](#patch-changes-66)
- [v6.2.1](#v621)
- [Patch Changes](#patch-changes-67)
- [v6.2.1](#v621)
- [Patch Changes](#patch-changes-68)
- [v6.2.0](#v620)
- [Minor Changes](#minor-changes-32)
- [Patch Changes](#patch-changes-68)
- [v6.1.1](#v611)
- [Patch Changes](#patch-changes-69)
- [v6.1.1](#v611)
- [Patch Changes](#patch-changes-70)
- [v6.1.0](#v610)
- [Minor Changes](#minor-changes-33)
- [Patch Changes](#patch-changes-70)
- [v6.0.2](#v602)
- [Patch Changes](#patch-changes-71)
- [v6.0.1](#v601)
- [v6.0.2](#v602)
- [Patch Changes](#patch-changes-72)
- [v6.0.1](#v601)
- [Patch Changes](#patch-changes-73)
- [v6.0.0](#v600)

</details>
@@ -305,6 +309,36 @@ Date: YYYY-MM-DD
**Full Changelog**: [`v7.X.Y...v7.X.Y`](https://github.com/remix-run/react-router/compare/react-router@7.X.Y...react-router@7.X.Y)
-->

## v7.4.1

Date: 2025-03-28

### Security Notice

Fixed a security vulnerability that allowed URL manipulation and potential cache pollution via the `Host` and `X-Forwarded-Host` headers due to inadequate port sanitization.

### Patch Changes

- `react-router` - Dedupe calls to `route.lazy` functions ([#13260](https://github.com/remix-run/react-router/pull/13260))
- `@react-router/dev` - Fix path in prerender error messages ([#13257](https://github.com/remix-run/react-router/pull/13257))
- `@react-router/dev` - Fix typegen for virtual modules when `moduleDetection` is set to `force` ([#13267](https://github.com/remix-run/react-router/pull/13267))
- `@react-router/express` - Better validation of `x-forwarded-host` header to prevent potential security issues ([#13309](https://github.com/remix-run/react-router/pull/13309))

### Unstable Changes

⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_

- `react-router` - Fix types on `unstable_MiddlewareFunction` to avoid type errors when a middleware doesn't return a value ([#13311](https://github.com/remix-run/react-router/pull/13311))
- `react-router` - Add support for `route.unstable_lazyMiddleware` function to allow lazy loading of middleware logic ([#13210](https://github.com/remix-run/react-router/pull/13210))
- ⚠️ We do not recommend adoption of this API currently as we are likely going to change it prior to the stable release of middleware
- ⚠️ This may be a breaking change if your app is currently returning `unstable_middleware` from `route.lazy`
- The `route.unstable_middleware` property is no longer supported in the return value from `route.lazy`
- If you want to lazily load middleware, you must use `route.unstable_lazyMiddleware`
- `@react-router/dev` - When both `future.unstable_middleware` and `future.unstable_splitRouteModules` are enabled, split `unstable_clientMiddleware` route exports into separate chunks when possible ([#13210](https://github.com/remix-run/react-router/pull/13210))
- `@react-router/dev` - Improve performance of `future.unstable_middleware` by ensuring that route modules are only blocking during the middleware phase when the `unstable_clientMiddleware` has been defined ([#13210](https://github.com/remix-run/react-router/pull/13210))

**Full Changelog**: [`v7.4.0...v7.4.1`](https://github.com/remix-run/react-router/compare/react-router@7.4.0...react-router@7.4.1)

## v7.4.0

Date: 2025-03-19
2 changes: 2 additions & 0 deletions contributors.yml
Original file line number Diff line number Diff line change
@@ -167,6 +167,7 @@
- jrestall
- juanpprieto
- jungwoo3490
- justjavac
- kachun333
- Kakamotobi
- kantuni
@@ -281,6 +282,7 @@
- ryanflorence
- ryanhiebert
- saengmotmi
- samimsu
- sanjai451
- sanketshah19
- saul-atomrigs
2 changes: 1 addition & 1 deletion docs/api/components/Links.md
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ title: Links

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.Links.html)

Renders all of the `<link>` tags created by route module [LinksFunction](../Other/LinksFunction) export. You should render it inside the `<head>` of your document.
Renders all of the `<link>` tags created by route module [`links`](../../start/framework/route-module#links) export. You should render it inside the `<head>` of your document.

```tsx
import { Links } from "react-router";
2 changes: 1 addition & 1 deletion docs/api/components/Meta.md
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@ title: Meta

[Reference Documentation ↗](https://api.reactrouter.com/v7/functions/react_router.Meta.html)

Renders all the `<meta>` tags created by route module [MetaFunction](../Other/MetaFunction) exports. You should render it inside the `<head>` of your HTML.
Renders all the `<meta>` tags created by route module [`meta`](../../start/framework/route-module#meta) export. You should render it inside the `<head>` of your HTML.

```tsx
import { Meta } from "react-router";
Loading