@@ -13,15 +13,19 @@ 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 )
17+ - [ Security Notice ] ( #security-notice )
1818 - [ Patch Changes] ( #patch-changes )
1919 - [ Unstable Changes] ( #unstable-changes )
20+ - [ v7.4.0] ( #v740 )
21+ - [ Minor Changes] ( #minor-changes )
22+ - [ Patch Changes] ( #patch-changes-1 )
23+ - [ Unstable Changes] ( #unstable-changes-1 )
2024 - [ Changes by Package] ( #changes-by-package )
2125 - [ v7.3.0] ( #v730 )
2226 - [ Minor Changes] ( #minor-changes-1 )
23- - [ Patch Changes] ( #patch-changes-1 )
24- - [ Unstable Changes] ( #unstable-changes-1 )
27+ - [ Patch Changes] ( #patch-changes-2 )
28+ - [ Unstable Changes] ( #unstable-changes-2 )
2529 - [ Client-side ` context ` (unstable)] ( #client-side-context-unstable )
2630 - [ Middleware (unstable)] ( #middleware-unstable )
2731 - [ Middleware ` context ` parameter] ( #middleware-context-parameter )
@@ -33,28 +37,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
3337 - [ Prerendering with a SPA Fallback] ( #prerendering-with-a-spa-fallback )
3438 - [ Allow a root ` loader ` in SPA Mode] ( #allow-a-root-loader-in-spa-mode )
3539 - [ Minor Changes] ( #minor-changes-2 )
36- - [ Patch Changes] ( #patch-changes-2 )
37- - [ Unstable Changes] ( #unstable-changes-2 )
40+ - [ Patch Changes] ( #patch-changes-3 )
41+ - [ Unstable Changes] ( #unstable-changes-3 )
3842 - [ Split Route Modules (unstable)] ( #split-route-modules-unstable )
3943 - [ Changes by Package] ( #changes-by-package-2 )
4044 - [ v7.1.5] ( #v715 )
41- - [ Patch Changes] ( #patch-changes-3 )
42- - [ v7.1.4] ( #v714 )
4345 - [ Patch Changes] ( #patch-changes-4 )
44- - [ v7.1.3 ] ( #v713 )
46+ - [ v7.1.4 ] ( #v714 )
4547 - [ Patch Changes] ( #patch-changes-5 )
46- - [ v7.1.2 ] ( #v712 )
48+ - [ v7.1.3 ] ( #v713 )
4749 - [ Patch Changes] ( #patch-changes-6 )
48- - [ v7.1.1 ] ( #v711 )
50+ - [ v7.1.2 ] ( #v712 )
4951 - [ Patch Changes] ( #patch-changes-7 )
52+ - [ v7.1.1] ( #v711 )
53+ - [ Patch Changes] ( #patch-changes-8 )
5054 - [ v7.1.0] ( #v710 )
5155 - [ Minor Changes] ( #minor-changes-3 )
52- - [ Patch Changes] ( #patch-changes-8 )
56+ - [ Patch Changes] ( #patch-changes-9 )
5357 - [ Changes by Package] ( #changes-by-package-3 )
5458 - [ v7.0.2] ( #v702 )
55- - [ Patch Changes] ( #patch-changes-9 )
56- - [ v7.0.1] ( #v701 )
5759 - [ Patch Changes] ( #patch-changes-10 )
60+ - [ v7.0.1] ( #v701 )
61+ - [ Patch Changes] ( #patch-changes-11 )
5862 - [ v7.0.0] ( #v700 )
5963 - [ Breaking Changes] ( #breaking-changes )
6064 - [ Package Restructuring] ( #package-restructuring )
@@ -71,199 +75,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
7175 - [ Major Changes (` react-router ` )] ( #major-changes-react-router )
7276 - [ Major Changes (` @react-router/* ` )] ( #major-changes-react-router-1 )
7377 - [ Minor Changes] ( #minor-changes-4 )
74- - [ Patch Changes] ( #patch-changes-11 )
78+ - [ Patch Changes] ( #patch-changes-12 )
7579 - [ Changes by Package] ( #changes-by-package-4 )
7680- [ React Router v6 Releases] ( #react-router-v6-releases )
7781 - [ v6.30.0] ( #v6300 )
7882 - [ Minor Changes] ( #minor-changes-5 )
79- - [ Patch Changes] ( #patch-changes-12 )
83+ - [ Patch Changes] ( #patch-changes-13 )
8084 - [ v6.29.0] ( #v6290 )
8185 - [ Minor Changes] ( #minor-changes-6 )
82- - [ Patch Changes] ( #patch-changes-13 )
83- - [ v6.28.2] ( #v6282 )
8486 - [ Patch Changes] ( #patch-changes-14 )
85- - [ v6.28.1 ] ( #v6281 )
87+ - [ v6.28.2 ] ( #v6282 )
8688 - [ Patch Changes] ( #patch-changes-15 )
89+ - [ v6.28.1] ( #v6281 )
90+ - [ Patch Changes] ( #patch-changes-16 )
8791 - [ v6.28.0] ( #v6280 )
8892 - [ What's Changed] ( #whats-changed-1 )
8993 - [ Minor Changes] ( #minor-changes-7 )
90- - [ Patch Changes] ( #patch-changes-16 )
94+ - [ Patch Changes] ( #patch-changes-17 )
9195 - [ v6.27.0] ( #v6270 )
9296 - [ What's Changed] ( #whats-changed-2 )
9397 - [ Stabilized APIs] ( #stabilized-apis )
9498 - [ Minor Changes] ( #minor-changes-8 )
95- - [ Patch Changes] ( #patch-changes-17 )
96- - [ v6.26.2] ( #v6262 )
9799 - [ Patch Changes] ( #patch-changes-18 )
98- - [ v6.26.1 ] ( #v6261 )
100+ - [ v6.26.2 ] ( #v6262 )
99101 - [ Patch Changes] ( #patch-changes-19 )
102+ - [ v6.26.1] ( #v6261 )
103+ - [ Patch Changes] ( #patch-changes-20 )
100104 - [ v6.26.0] ( #v6260 )
101105 - [ Minor Changes] ( #minor-changes-9 )
102- - [ Patch Changes] ( #patch-changes-20 )
103- - [ v6.25.1] ( #v6251 )
104106 - [ Patch Changes] ( #patch-changes-21 )
107+ - [ v6.25.1] ( #v6251 )
108+ - [ Patch Changes] ( #patch-changes-22 )
105109 - [ v6.25.0] ( #v6250 )
106110 - [ What's Changed] ( #whats-changed-3 )
107111 - [ Stabilized ` v7_skipActionErrorRevalidation ` ] ( #stabilized-v7_skipactionerrorrevalidation )
108112 - [ Minor Changes] ( #minor-changes-10 )
109- - [ Patch Changes] ( #patch-changes-22 )
110- - [ v6.24.1] ( #v6241 )
111113 - [ Patch Changes] ( #patch-changes-23 )
114+ - [ v6.24.1] ( #v6241 )
115+ - [ Patch Changes] ( #patch-changes-24 )
112116 - [ v6.24.0] ( #v6240 )
113117 - [ What's Changed] ( #whats-changed-4 )
114118 - [ Lazy Route Discovery (a.k.a. "Fog of War")] ( #lazy-route-discovery-aka-fog-of-war )
115119 - [ Minor Changes] ( #minor-changes-11 )
116- - [ Patch Changes] ( #patch-changes-24 )
117- - [ v6.23.1] ( #v6231 )
118120 - [ Patch Changes] ( #patch-changes-25 )
121+ - [ v6.23.1] ( #v6231 )
122+ - [ Patch Changes] ( #patch-changes-26 )
119123 - [ v6.23.0] ( #v6230 )
120124 - [ What's Changed] ( #whats-changed-5 )
121125 - [ Data Strategy (unstable)] ( #data-strategy-unstable )
122126 - [ Skip Action Error Revalidation (unstable)] ( #skip-action-error-revalidation-unstable )
123127 - [ Minor Changes] ( #minor-changes-12 )
124128 - [ v6.22.3] ( #v6223 )
125- - [ Patch Changes] ( #patch-changes-26 )
126- - [ v6.22.2] ( #v6222 )
127129 - [ Patch Changes] ( #patch-changes-27 )
128- - [ v6.22.1 ] ( #v6221 )
130+ - [ v6.22.2 ] ( #v6222 )
129131 - [ Patch Changes] ( #patch-changes-28 )
132+ - [ v6.22.1] ( #v6221 )
133+ - [ Patch Changes] ( #patch-changes-29 )
130134 - [ v6.22.0] ( #v6220 )
131135 - [ What's Changed] ( #whats-changed-6 )
132136 - [ Core Web Vitals Technology Report Flag] ( #core-web-vitals-technology-report-flag )
133137 - [ Minor Changes] ( #minor-changes-13 )
134- - [ Patch Changes] ( #patch-changes-29 )
135- - [ v6.21.3] ( #v6213 )
136138 - [ Patch Changes] ( #patch-changes-30 )
137- - [ v6.21.2 ] ( #v6212 )
139+ - [ v6.21.3 ] ( #v6213 )
138140 - [ Patch Changes] ( #patch-changes-31 )
139- - [ v6.21.1 ] ( #v6211 )
141+ - [ v6.21.2 ] ( #v6212 )
140142 - [ Patch Changes] ( #patch-changes-32 )
143+ - [ v6.21.1] ( #v6211 )
144+ - [ Patch Changes] ( #patch-changes-33 )
141145 - [ v6.21.0] ( #v6210 )
142146 - [ What's Changed] ( #whats-changed-7 )
143147 - [ ` future.v7_relativeSplatPath ` ] ( #futurev7_relativesplatpath )
144148 - [ Partial Hydration] ( #partial-hydration )
145149 - [ Minor Changes] ( #minor-changes-14 )
146- - [ Patch Changes] ( #patch-changes-33 )
147- - [ v6.20.1] ( #v6201 )
148150 - [ Patch Changes] ( #patch-changes-34 )
151+ - [ v6.20.1] ( #v6201 )
152+ - [ Patch Changes] ( #patch-changes-35 )
149153 - [ v6.20.0] ( #v6200 )
150154 - [ Minor Changes] ( #minor-changes-15 )
151- - [ Patch Changes] ( #patch-changes-35 )
155+ - [ Patch Changes] ( #patch-changes-36 )
152156 - [ v6.19.0] ( #v6190 )
153157 - [ What's Changed] ( #whats-changed-8 )
154158 - [ ` unstable_flushSync ` API] ( #unstable_flushsync-api )
155159 - [ Minor Changes] ( #minor-changes-16 )
156- - [ Patch Changes] ( #patch-changes-36 )
160+ - [ Patch Changes] ( #patch-changes-37 )
157161 - [ v6.18.0] ( #v6180 )
158162 - [ What's Changed] ( #whats-changed-9 )
159163 - [ New Fetcher APIs] ( #new-fetcher-apis )
160164 - [ Persistence Future Flag (` future.v7_fetcherPersist ` )] ( #persistence-future-flag-futurev7_fetcherpersist )
161165 - [ Minor Changes] ( #minor-changes-17 )
162- - [ Patch Changes] ( #patch-changes-37 )
166+ - [ Patch Changes] ( #patch-changes-38 )
163167 - [ v6.17.0] ( #v6170 )
164168 - [ What's Changed] ( #whats-changed-10 )
165169 - [ View Transitions 🚀] ( #view-transitions- )
166170 - [ Minor Changes] ( #minor-changes-18 )
167- - [ Patch Changes] ( #patch-changes-38 )
171+ - [ Patch Changes] ( #patch-changes-39 )
168172 - [ v6.16.0] ( #v6160 )
169173 - [ Minor Changes] ( #minor-changes-19 )
170- - [ Patch Changes] ( #patch-changes-39 )
174+ - [ Patch Changes] ( #patch-changes-40 )
171175 - [ v6.15.0] ( #v6150 )
172176 - [ Minor Changes] ( #minor-changes-20 )
173- - [ Patch Changes] ( #patch-changes-40 )
174- - [ v6.14.2] ( #v6142 )
175177 - [ Patch Changes] ( #patch-changes-41 )
176- - [ v6.14.1 ] ( #v6141 )
178+ - [ v6.14.2 ] ( #v6142 )
177179 - [ Patch Changes] ( #patch-changes-42 )
180+ - [ v6.14.1] ( #v6141 )
181+ - [ Patch Changes] ( #patch-changes-43 )
178182 - [ v6.14.0] ( #v6140 )
179183 - [ What's Changed] ( #whats-changed-11 )
180184 - [ JSON/Text Submissions] ( #jsontext-submissions )
181185 - [ Minor Changes] ( #minor-changes-21 )
182- - [ Patch Changes] ( #patch-changes-43 )
186+ - [ Patch Changes] ( #patch-changes-44 )
183187 - [ v6.13.0] ( #v6130 )
184188 - [ What's Changed] ( #whats-changed-12 )
185189 - [ ` future.v7_startTransition ` ] ( #futurev7_starttransition )
186190 - [ Minor Changes] ( #minor-changes-22 )
187- - [ Patch Changes] ( #patch-changes-44 )
188- - [ v6.12.1] ( #v6121 )
189191 - [ Patch Changes] ( #patch-changes-45 )
192+ - [ v6.12.1] ( #v6121 )
193+ - [ Patch Changes] ( #patch-changes-46 )
190194 - [ v6.12.0] ( #v6120 )
191195 - [ What's Changed] ( #whats-changed-13 )
192196 - [ ` React.startTransition ` support] ( #reactstarttransition-support )
193197 - [ Minor Changes] ( #minor-changes-23 )
194- - [ Patch Changes] ( #patch-changes-46 )
195- - [ v6.11.2] ( #v6112 )
196198 - [ Patch Changes] ( #patch-changes-47 )
197- - [ v6.11.1 ] ( #v6111 )
199+ - [ v6.11.2 ] ( #v6112 )
198200 - [ Patch Changes] ( #patch-changes-48 )
201+ - [ v6.11.1] ( #v6111 )
202+ - [ Patch Changes] ( #patch-changes-49 )
199203 - [ v6.11.0] ( #v6110 )
200204 - [ Minor Changes] ( #minor-changes-24 )
201- - [ Patch Changes] ( #patch-changes-49 )
205+ - [ Patch Changes] ( #patch-changes-50 )
202206 - [ v6.10.0] ( #v6100 )
203207 - [ What's Changed] ( #whats-changed-14 )
204208 - [ Minor Changes] ( #minor-changes-25 )
205209 - [ ` future.v7_normalizeFormMethod ` ] ( #futurev7_normalizeformmethod )
206- - [ Patch Changes] ( #patch-changes-50 )
210+ - [ Patch Changes] ( #patch-changes-51 )
207211 - [ v6.9.0] ( #v690 )
208212 - [ What's Changed] ( #whats-changed-15 )
209213 - [ ` Component ` /` ErrorBoundary ` route properties] ( #componenterrorboundary-route-properties )
210214 - [ Introducing Lazy Route Modules] ( #introducing-lazy-route-modules )
211215 - [ Minor Changes] ( #minor-changes-26 )
212- - [ Patch Changes] ( #patch-changes-51 )
213- - [ v6.8.2] ( #v682 )
214216 - [ Patch Changes] ( #patch-changes-52 )
215- - [ v6.8.1 ] ( #v681 )
217+ - [ v6.8.2 ] ( #v682 )
216218 - [ Patch Changes] ( #patch-changes-53 )
219+ - [ v6.8.1] ( #v681 )
220+ - [ Patch Changes] ( #patch-changes-54 )
217221 - [ v6.8.0] ( #v680 )
218222 - [ Minor Changes] ( #minor-changes-27 )
219- - [ Patch Changes] ( #patch-changes-54 )
223+ - [ Patch Changes] ( #patch-changes-55 )
220224 - [ v6.7.0] ( #v670 )
221225 - [ Minor Changes] ( #minor-changes-28 )
222- - [ Patch Changes] ( #patch-changes-55 )
223- - [ v6.6.2] ( #v662 )
224226 - [ Patch Changes] ( #patch-changes-56 )
225- - [ v6.6.1 ] ( #v661 )
227+ - [ v6.6.2 ] ( #v662 )
226228 - [ Patch Changes] ( #patch-changes-57 )
229+ - [ v6.6.1] ( #v661 )
230+ - [ Patch Changes] ( #patch-changes-58 )
227231 - [ v6.6.0] ( #v660 )
228232 - [ What's Changed] ( #whats-changed-16 )
229233 - [ Minor Changes] ( #minor-changes-29 )
230- - [ Patch Changes] ( #patch-changes-58 )
234+ - [ Patch Changes] ( #patch-changes-59 )
231235 - [ v6.5.0] ( #v650 )
232236 - [ What's Changed] ( #whats-changed-17 )
233237 - [ Minor Changes] ( #minor-changes-30 )
234- - [ Patch Changes] ( #patch-changes-59 )
235- - [ v6.4.5] ( #v645 )
236238 - [ Patch Changes] ( #patch-changes-60 )
237- - [ v6.4.4 ] ( #v644 )
239+ - [ v6.4.5 ] ( #v645 )
238240 - [ Patch Changes] ( #patch-changes-61 )
239- - [ v6.4.3 ] ( #v643 )
241+ - [ v6.4.4 ] ( #v644 )
240242 - [ Patch Changes] ( #patch-changes-62 )
241- - [ v6.4.2 ] ( #v642 )
243+ - [ v6.4.3 ] ( #v643 )
242244 - [ Patch Changes] ( #patch-changes-63 )
243- - [ v6.4.1 ] ( #v641 )
245+ - [ v6.4.2 ] ( #v642 )
244246 - [ Patch Changes] ( #patch-changes-64 )
247+ - [ v6.4.1] ( #v641 )
248+ - [ Patch Changes] ( #patch-changes-65 )
245249 - [ v6.4.0] ( #v640 )
246250 - [ What's Changed] ( #whats-changed-18 )
247251 - [ Remix Data APIs] ( #remix-data-apis )
248- - [ Patch Changes] ( #patch-changes-65 )
252+ - [ Patch Changes] ( #patch-changes-66 )
249253 - [ v6.3.0] ( #v630 )
250254 - [ Minor Changes] ( #minor-changes-31 )
251255 - [ v6.2.2] ( #v622 )
252- - [ Patch Changes] ( #patch-changes-66 )
253- - [ v6.2.1] ( #v621 )
254256 - [ Patch Changes] ( #patch-changes-67 )
257+ - [ v6.2.1] ( #v621 )
258+ - [ Patch Changes] ( #patch-changes-68 )
255259 - [ v6.2.0] ( #v620 )
256260 - [ Minor Changes] ( #minor-changes-32 )
257- - [ Patch Changes] ( #patch-changes-68 )
258- - [ v6.1.1] ( #v611 )
259261 - [ Patch Changes] ( #patch-changes-69 )
262+ - [ v6.1.1] ( #v611 )
263+ - [ Patch Changes] ( #patch-changes-70 )
260264 - [ v6.1.0] ( #v610 )
261265 - [ Minor Changes] ( #minor-changes-33 )
262- - [ Patch Changes] ( #patch-changes-70 )
263- - [ v6.0.2] ( #v602 )
264266 - [ Patch Changes] ( #patch-changes-71 )
265- - [ v6.0.1 ] ( #v601 )
267+ - [ v6.0.2 ] ( #v602 )
266268 - [ Patch Changes] ( #patch-changes-72 )
269+ - [ v6.0.1] ( #v601 )
270+ - [ Patch Changes] ( #patch-changes-73 )
267271 - [ v6.0.0] ( #v600 )
268272
269273</details >
@@ -305,6 +309,36 @@ Date: YYYY-MM-DD
305309**Full Changelog**: [`v7.X.Y...v7.X.Y`](https://github.com/remix-run/react-router/compare/[email protected] @7.X.Y) 306310-->
307311
312+ ## v7.4.1
313+
314+ Date: 2025-03-28
315+
316+ ### Security Notice
317+
318+ 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.
319+
320+ ### Patch Changes
321+
322+ - ` react-router ` - Dedupe calls to ` route.lazy ` functions ([ #13260 ] ( https://github.com/remix-run/react-router/pull/13260 ) )
323+ - ` @react-router/dev ` - Fix path in prerender error messages ([ #13257 ] ( https://github.com/remix-run/react-router/pull/13257 ) )
324+ - ` @react-router/dev ` - Fix typegen for virtual modules when ` moduleDetection ` is set to ` force ` ([ #13267 ] ( https://github.com/remix-run/react-router/pull/13267 ) )
325+ - ` @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 ) )
326+
327+ ### Unstable Changes
328+
329+ ⚠️ _ [ Unstable features] ( https://reactrouter.com/community/api-development-strategy#unstable-flags ) are not recommended for production use_
330+
331+ - ` 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 ) )
332+ - ` 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 ) )
333+ - ⚠️ We do not recommend adoption of this API currently as we are likely going to change it prior to the stable release of middleware
334+ - ⚠️ This may be a breaking change if your app is currently returning ` unstable_middleware ` from ` route.lazy `
335+ - The ` route.unstable_middleware ` property is no longer supported in the return value from ` route.lazy `
336+ - If you want to lazily load middleware, you must use ` route.unstable_lazyMiddleware `
337+ - ` @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 ) )
338+ - ` @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 ) )
339+
340+ ** Full Changelog
** :
[ ` v7.4.0...v7.4.1 ` ] ( https://github.com/remix-run/react-router/compare/[email protected] @7.4.1 ) 341+
308342## v7.4.0
309343
310344Date: 2025-03-19
0 commit comments