@@ -13,15 +13,18 @@ We manage release notes in this file instead of the paginated Github Releases Pa
1313 <summary >Table of Contents</summary >
1414
1515- [ React Router Releases] ( #react-router-releases )
16- - [ v7.4.0] ( #v740 )
17- - [ Minor Changes] ( #minor-changes )
16+ - [ v7.4.1] ( #v741 )
1817 - [ Patch Changes] ( #patch-changes )
1918 - [ Unstable Changes] ( #unstable-changes )
19+ - [ v7.4.0] ( #v740 )
20+ - [ Minor Changes] ( #minor-changes )
21+ - [ Patch Changes] ( #patch-changes-1 )
22+ - [ Unstable Changes] ( #unstable-changes-1 )
2023 - [ Changes by Package] ( #changes-by-package )
2124 - [ v7.3.0] ( #v730 )
2225 - [ Minor Changes] ( #minor-changes-1 )
23- - [ Patch Changes] ( #patch-changes-1 )
24- - [ Unstable Changes] ( #unstable-changes-1 )
26+ - [ Patch Changes] ( #patch-changes-2 )
27+ - [ Unstable Changes] ( #unstable-changes-2 )
2528 - [ Client-side ` context ` (unstable)] ( #client-side-context-unstable )
2629 - [ Middleware (unstable)] ( #middleware-unstable )
2730 - [ Middleware ` context ` parameter] ( #middleware-context-parameter )
@@ -33,28 +36,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
3336 - [ Prerendering with a SPA Fallback] ( #prerendering-with-a-spa-fallback )
3437 - [ Allow a root ` loader ` in SPA Mode] ( #allow-a-root-loader-in-spa-mode )
3538 - [ Minor Changes] ( #minor-changes-2 )
36- - [ Patch Changes] ( #patch-changes-2 )
37- - [ Unstable Changes] ( #unstable-changes-2 )
39+ - [ Patch Changes] ( #patch-changes-3 )
40+ - [ Unstable Changes] ( #unstable-changes-3 )
3841 - [ Split Route Modules (unstable)] ( #split-route-modules-unstable )
3942 - [ Changes by Package] ( #changes-by-package-2 )
4043 - [ v7.1.5] ( #v715 )
41- - [ Patch Changes] ( #patch-changes-3 )
42- - [ v7.1.4] ( #v714 )
4344 - [ Patch Changes] ( #patch-changes-4 )
44- - [ v7.1.3 ] ( #v713 )
45+ - [ v7.1.4 ] ( #v714 )
4546 - [ Patch Changes] ( #patch-changes-5 )
46- - [ v7.1.2 ] ( #v712 )
47+ - [ v7.1.3 ] ( #v713 )
4748 - [ Patch Changes] ( #patch-changes-6 )
48- - [ v7.1.1 ] ( #v711 )
49+ - [ v7.1.2 ] ( #v712 )
4950 - [ Patch Changes] ( #patch-changes-7 )
51+ - [ v7.1.1] ( #v711 )
52+ - [ Patch Changes] ( #patch-changes-8 )
5053 - [ v7.1.0] ( #v710 )
5154 - [ Minor Changes] ( #minor-changes-3 )
52- - [ Patch Changes] ( #patch-changes-8 )
55+ - [ Patch Changes] ( #patch-changes-9 )
5356 - [ Changes by Package] ( #changes-by-package-3 )
5457 - [ v7.0.2] ( #v702 )
55- - [ Patch Changes] ( #patch-changes-9 )
56- - [ v7.0.1] ( #v701 )
5758 - [ Patch Changes] ( #patch-changes-10 )
59+ - [ v7.0.1] ( #v701 )
60+ - [ Patch Changes] ( #patch-changes-11 )
5861 - [ v7.0.0] ( #v700 )
5962 - [ Breaking Changes] ( #breaking-changes )
6063 - [ Package Restructuring] ( #package-restructuring )
@@ -71,199 +74,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
7174 - [ Major Changes (` react-router ` )] ( #major-changes-react-router )
7275 - [ Major Changes (` @react-router/* ` )] ( #major-changes-react-router-1 )
7376 - [ Minor Changes] ( #minor-changes-4 )
74- - [ Patch Changes] ( #patch-changes-11 )
77+ - [ Patch Changes] ( #patch-changes-12 )
7578 - [ Changes by Package] ( #changes-by-package-4 )
7679- [ React Router v6 Releases] ( #react-router-v6-releases )
7780 - [ v6.30.0] ( #v6300 )
7881 - [ Minor Changes] ( #minor-changes-5 )
79- - [ Patch Changes] ( #patch-changes-12 )
82+ - [ Patch Changes] ( #patch-changes-13 )
8083 - [ v6.29.0] ( #v6290 )
8184 - [ Minor Changes] ( #minor-changes-6 )
82- - [ Patch Changes] ( #patch-changes-13 )
83- - [ v6.28.2] ( #v6282 )
8485 - [ Patch Changes] ( #patch-changes-14 )
85- - [ v6.28.1 ] ( #v6281 )
86+ - [ v6.28.2 ] ( #v6282 )
8687 - [ Patch Changes] ( #patch-changes-15 )
88+ - [ v6.28.1] ( #v6281 )
89+ - [ Patch Changes] ( #patch-changes-16 )
8790 - [ v6.28.0] ( #v6280 )
8891 - [ What's Changed] ( #whats-changed-1 )
8992 - [ Minor Changes] ( #minor-changes-7 )
90- - [ Patch Changes] ( #patch-changes-16 )
93+ - [ Patch Changes] ( #patch-changes-17 )
9194 - [ v6.27.0] ( #v6270 )
9295 - [ What's Changed] ( #whats-changed-2 )
9396 - [ Stabilized APIs] ( #stabilized-apis )
9497 - [ Minor Changes] ( #minor-changes-8 )
95- - [ Patch Changes] ( #patch-changes-17 )
96- - [ v6.26.2] ( #v6262 )
9798 - [ Patch Changes] ( #patch-changes-18 )
98- - [ v6.26.1 ] ( #v6261 )
99+ - [ v6.26.2 ] ( #v6262 )
99100 - [ Patch Changes] ( #patch-changes-19 )
101+ - [ v6.26.1] ( #v6261 )
102+ - [ Patch Changes] ( #patch-changes-20 )
100103 - [ v6.26.0] ( #v6260 )
101104 - [ Minor Changes] ( #minor-changes-9 )
102- - [ Patch Changes] ( #patch-changes-20 )
103- - [ v6.25.1] ( #v6251 )
104105 - [ Patch Changes] ( #patch-changes-21 )
106+ - [ v6.25.1] ( #v6251 )
107+ - [ Patch Changes] ( #patch-changes-22 )
105108 - [ v6.25.0] ( #v6250 )
106109 - [ What's Changed] ( #whats-changed-3 )
107110 - [ Stabilized ` v7_skipActionErrorRevalidation ` ] ( #stabilized-v7_skipactionerrorrevalidation )
108111 - [ Minor Changes] ( #minor-changes-10 )
109- - [ Patch Changes] ( #patch-changes-22 )
110- - [ v6.24.1] ( #v6241 )
111112 - [ Patch Changes] ( #patch-changes-23 )
113+ - [ v6.24.1] ( #v6241 )
114+ - [ Patch Changes] ( #patch-changes-24 )
112115 - [ v6.24.0] ( #v6240 )
113116 - [ What's Changed] ( #whats-changed-4 )
114117 - [ Lazy Route Discovery (a.k.a. "Fog of War")] ( #lazy-route-discovery-aka-fog-of-war )
115118 - [ Minor Changes] ( #minor-changes-11 )
116- - [ Patch Changes] ( #patch-changes-24 )
117- - [ v6.23.1] ( #v6231 )
118119 - [ Patch Changes] ( #patch-changes-25 )
120+ - [ v6.23.1] ( #v6231 )
121+ - [ Patch Changes] ( #patch-changes-26 )
119122 - [ v6.23.0] ( #v6230 )
120123 - [ What's Changed] ( #whats-changed-5 )
121124 - [ Data Strategy (unstable)] ( #data-strategy-unstable )
122125 - [ Skip Action Error Revalidation (unstable)] ( #skip-action-error-revalidation-unstable )
123126 - [ Minor Changes] ( #minor-changes-12 )
124127 - [ v6.22.3] ( #v6223 )
125- - [ Patch Changes] ( #patch-changes-26 )
126- - [ v6.22.2] ( #v6222 )
127128 - [ Patch Changes] ( #patch-changes-27 )
128- - [ v6.22.1 ] ( #v6221 )
129+ - [ v6.22.2 ] ( #v6222 )
129130 - [ Patch Changes] ( #patch-changes-28 )
131+ - [ v6.22.1] ( #v6221 )
132+ - [ Patch Changes] ( #patch-changes-29 )
130133 - [ v6.22.0] ( #v6220 )
131134 - [ What's Changed] ( #whats-changed-6 )
132135 - [ Core Web Vitals Technology Report Flag] ( #core-web-vitals-technology-report-flag )
133136 - [ Minor Changes] ( #minor-changes-13 )
134- - [ Patch Changes] ( #patch-changes-29 )
135- - [ v6.21.3] ( #v6213 )
136137 - [ Patch Changes] ( #patch-changes-30 )
137- - [ v6.21.2 ] ( #v6212 )
138+ - [ v6.21.3 ] ( #v6213 )
138139 - [ Patch Changes] ( #patch-changes-31 )
139- - [ v6.21.1 ] ( #v6211 )
140+ - [ v6.21.2 ] ( #v6212 )
140141 - [ Patch Changes] ( #patch-changes-32 )
142+ - [ v6.21.1] ( #v6211 )
143+ - [ Patch Changes] ( #patch-changes-33 )
141144 - [ v6.21.0] ( #v6210 )
142145 - [ What's Changed] ( #whats-changed-7 )
143146 - [ ` future.v7_relativeSplatPath ` ] ( #futurev7_relativesplatpath )
144147 - [ Partial Hydration] ( #partial-hydration )
145148 - [ Minor Changes] ( #minor-changes-14 )
146- - [ Patch Changes] ( #patch-changes-33 )
147- - [ v6.20.1] ( #v6201 )
148149 - [ Patch Changes] ( #patch-changes-34 )
150+ - [ v6.20.1] ( #v6201 )
151+ - [ Patch Changes] ( #patch-changes-35 )
149152 - [ v6.20.0] ( #v6200 )
150153 - [ Minor Changes] ( #minor-changes-15 )
151- - [ Patch Changes] ( #patch-changes-35 )
154+ - [ Patch Changes] ( #patch-changes-36 )
152155 - [ v6.19.0] ( #v6190 )
153156 - [ What's Changed] ( #whats-changed-8 )
154157 - [ ` unstable_flushSync ` API] ( #unstable_flushsync-api )
155158 - [ Minor Changes] ( #minor-changes-16 )
156- - [ Patch Changes] ( #patch-changes-36 )
159+ - [ Patch Changes] ( #patch-changes-37 )
157160 - [ v6.18.0] ( #v6180 )
158161 - [ What's Changed] ( #whats-changed-9 )
159162 - [ New Fetcher APIs] ( #new-fetcher-apis )
160163 - [ Persistence Future Flag (` future.v7_fetcherPersist ` )] ( #persistence-future-flag-futurev7_fetcherpersist )
161164 - [ Minor Changes] ( #minor-changes-17 )
162- - [ Patch Changes] ( #patch-changes-37 )
165+ - [ Patch Changes] ( #patch-changes-38 )
163166 - [ v6.17.0] ( #v6170 )
164167 - [ What's Changed] ( #whats-changed-10 )
165168 - [ View Transitions 🚀] ( #view-transitions- )
166169 - [ Minor Changes] ( #minor-changes-18 )
167- - [ Patch Changes] ( #patch-changes-38 )
170+ - [ Patch Changes] ( #patch-changes-39 )
168171 - [ v6.16.0] ( #v6160 )
169172 - [ Minor Changes] ( #minor-changes-19 )
170- - [ Patch Changes] ( #patch-changes-39 )
173+ - [ Patch Changes] ( #patch-changes-40 )
171174 - [ v6.15.0] ( #v6150 )
172175 - [ Minor Changes] ( #minor-changes-20 )
173- - [ Patch Changes] ( #patch-changes-40 )
174- - [ v6.14.2] ( #v6142 )
175176 - [ Patch Changes] ( #patch-changes-41 )
176- - [ v6.14.1 ] ( #v6141 )
177+ - [ v6.14.2 ] ( #v6142 )
177178 - [ Patch Changes] ( #patch-changes-42 )
179+ - [ v6.14.1] ( #v6141 )
180+ - [ Patch Changes] ( #patch-changes-43 )
178181 - [ v6.14.0] ( #v6140 )
179182 - [ What's Changed] ( #whats-changed-11 )
180183 - [ JSON/Text Submissions] ( #jsontext-submissions )
181184 - [ Minor Changes] ( #minor-changes-21 )
182- - [ Patch Changes] ( #patch-changes-43 )
185+ - [ Patch Changes] ( #patch-changes-44 )
183186 - [ v6.13.0] ( #v6130 )
184187 - [ What's Changed] ( #whats-changed-12 )
185188 - [ ` future.v7_startTransition ` ] ( #futurev7_starttransition )
186189 - [ Minor Changes] ( #minor-changes-22 )
187- - [ Patch Changes] ( #patch-changes-44 )
188- - [ v6.12.1] ( #v6121 )
189190 - [ Patch Changes] ( #patch-changes-45 )
191+ - [ v6.12.1] ( #v6121 )
192+ - [ Patch Changes] ( #patch-changes-46 )
190193 - [ v6.12.0] ( #v6120 )
191194 - [ What's Changed] ( #whats-changed-13 )
192195 - [ ` React.startTransition ` support] ( #reactstarttransition-support )
193196 - [ Minor Changes] ( #minor-changes-23 )
194- - [ Patch Changes] ( #patch-changes-46 )
195- - [ v6.11.2] ( #v6112 )
196197 - [ Patch Changes] ( #patch-changes-47 )
197- - [ v6.11.1 ] ( #v6111 )
198+ - [ v6.11.2 ] ( #v6112 )
198199 - [ Patch Changes] ( #patch-changes-48 )
200+ - [ v6.11.1] ( #v6111 )
201+ - [ Patch Changes] ( #patch-changes-49 )
199202 - [ v6.11.0] ( #v6110 )
200203 - [ Minor Changes] ( #minor-changes-24 )
201- - [ Patch Changes] ( #patch-changes-49 )
204+ - [ Patch Changes] ( #patch-changes-50 )
202205 - [ v6.10.0] ( #v6100 )
203206 - [ What's Changed] ( #whats-changed-14 )
204207 - [ Minor Changes] ( #minor-changes-25 )
205208 - [ ` future.v7_normalizeFormMethod ` ] ( #futurev7_normalizeformmethod )
206- - [ Patch Changes] ( #patch-changes-50 )
209+ - [ Patch Changes] ( #patch-changes-51 )
207210 - [ v6.9.0] ( #v690 )
208211 - [ What's Changed] ( #whats-changed-15 )
209212 - [ ` Component ` /` ErrorBoundary ` route properties] ( #componenterrorboundary-route-properties )
210213 - [ Introducing Lazy Route Modules] ( #introducing-lazy-route-modules )
211214 - [ Minor Changes] ( #minor-changes-26 )
212- - [ Patch Changes] ( #patch-changes-51 )
213- - [ v6.8.2] ( #v682 )
214215 - [ Patch Changes] ( #patch-changes-52 )
215- - [ v6.8.1 ] ( #v681 )
216+ - [ v6.8.2 ] ( #v682 )
216217 - [ Patch Changes] ( #patch-changes-53 )
218+ - [ v6.8.1] ( #v681 )
219+ - [ Patch Changes] ( #patch-changes-54 )
217220 - [ v6.8.0] ( #v680 )
218221 - [ Minor Changes] ( #minor-changes-27 )
219- - [ Patch Changes] ( #patch-changes-54 )
222+ - [ Patch Changes] ( #patch-changes-55 )
220223 - [ v6.7.0] ( #v670 )
221224 - [ Minor Changes] ( #minor-changes-28 )
222- - [ Patch Changes] ( #patch-changes-55 )
223- - [ v6.6.2] ( #v662 )
224225 - [ Patch Changes] ( #patch-changes-56 )
225- - [ v6.6.1 ] ( #v661 )
226+ - [ v6.6.2 ] ( #v662 )
226227 - [ Patch Changes] ( #patch-changes-57 )
228+ - [ v6.6.1] ( #v661 )
229+ - [ Patch Changes] ( #patch-changes-58 )
227230 - [ v6.6.0] ( #v660 )
228231 - [ What's Changed] ( #whats-changed-16 )
229232 - [ Minor Changes] ( #minor-changes-29 )
230- - [ Patch Changes] ( #patch-changes-58 )
233+ - [ Patch Changes] ( #patch-changes-59 )
231234 - [ v6.5.0] ( #v650 )
232235 - [ What's Changed] ( #whats-changed-17 )
233236 - [ Minor Changes] ( #minor-changes-30 )
234- - [ Patch Changes] ( #patch-changes-59 )
235- - [ v6.4.5] ( #v645 )
236237 - [ Patch Changes] ( #patch-changes-60 )
237- - [ v6.4.4 ] ( #v644 )
238+ - [ v6.4.5 ] ( #v645 )
238239 - [ Patch Changes] ( #patch-changes-61 )
239- - [ v6.4.3 ] ( #v643 )
240+ - [ v6.4.4 ] ( #v644 )
240241 - [ Patch Changes] ( #patch-changes-62 )
241- - [ v6.4.2 ] ( #v642 )
242+ - [ v6.4.3 ] ( #v643 )
242243 - [ Patch Changes] ( #patch-changes-63 )
243- - [ v6.4.1 ] ( #v641 )
244+ - [ v6.4.2 ] ( #v642 )
244245 - [ Patch Changes] ( #patch-changes-64 )
246+ - [ v6.4.1] ( #v641 )
247+ - [ Patch Changes] ( #patch-changes-65 )
245248 - [ v6.4.0] ( #v640 )
246249 - [ What's Changed] ( #whats-changed-18 )
247250 - [ Remix Data APIs] ( #remix-data-apis )
248- - [ Patch Changes] ( #patch-changes-65 )
251+ - [ Patch Changes] ( #patch-changes-66 )
249252 - [ v6.3.0] ( #v630 )
250253 - [ Minor Changes] ( #minor-changes-31 )
251254 - [ v6.2.2] ( #v622 )
252- - [ Patch Changes] ( #patch-changes-66 )
253- - [ v6.2.1] ( #v621 )
254255 - [ Patch Changes] ( #patch-changes-67 )
256+ - [ v6.2.1] ( #v621 )
257+ - [ Patch Changes] ( #patch-changes-68 )
255258 - [ v6.2.0] ( #v620 )
256259 - [ Minor Changes] ( #minor-changes-32 )
257- - [ Patch Changes] ( #patch-changes-68 )
258- - [ v6.1.1] ( #v611 )
259260 - [ Patch Changes] ( #patch-changes-69 )
261+ - [ v6.1.1] ( #v611 )
262+ - [ Patch Changes] ( #patch-changes-70 )
260263 - [ v6.1.0] ( #v610 )
261264 - [ Minor Changes] ( #minor-changes-33 )
262- - [ Patch Changes] ( #patch-changes-70 )
263- - [ v6.0.2] ( #v602 )
264265 - [ Patch Changes] ( #patch-changes-71 )
265- - [ v6.0.1 ] ( #v601 )
266+ - [ v6.0.2 ] ( #v602 )
266267 - [ Patch Changes] ( #patch-changes-72 )
268+ - [ v6.0.1] ( #v601 )
269+ - [ Patch Changes] ( #patch-changes-73 )
267270 - [ v6.0.0] ( #v600 )
268271
269272</details >
@@ -305,6 +308,32 @@ Date: YYYY-MM-DD
305308**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)
306309-->
307310
311+ ## v7.4.1
312+
313+ Date: 2025-03-27
314+
315+ ### Patch Changes
316+
317+ - ` react-router ` - Dedupe calls to ` route.lazy ` functions ([ #13260 ] ( https://github.com/remix-run/react-router/pull/13260 ) )
318+ - ` @react-router/dev ` - Fix path in prerender error messages ([ #13257 ] ( https://github.com/remix-run/react-router/pull/13257 ) )
319+ - ` @react-router/dev ` - Fix typegen for virtual modules when ` moduleDetection ` is set to ` force ` ([ #13267 ] ( https://github.com/remix-run/react-router/pull/13267 ) )
320+ - ` @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 ) )
321+
322+ ### Unstable Changes
323+
324+ ⚠️ _ [ Unstable features] ( https://reactrouter.com/community/api-development-strategy#unstable-flags ) are not recommended for production use_
325+
326+ - ` 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 ) )
327+ - ` 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 ) )
328+ - ⚠️ We do not recommend adoption of this API currently as we are likely going to change it prior to the stable release of middleware
329+ - ⚠️ This may be a breaking change if your app is currently returning ` unstable_middleware ` from ` route.lazy `
330+ - The ` route.unstable_middleware ` property is no longer supported in the return value from ` route.lazy `
331+ - If you want to lazily load middleware, you must use ` route.unstable_lazyMiddleware `
332+ - ` @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 ) )
333+ - ` @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 ) )
334+
335+ ** 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 )
336+
308337## v7.4.0
309338
310339Date: 2025-03-19
0 commit comments