@@ -13,15 +13,19 @@ We manage release notes in this file instead of the paginated Github Releases Pa
13
13
<summary >Table of Contents</summary >
14
14
15
15
- [ 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 )
18
18
- [ Patch Changes] ( #patch-changes )
19
19
- [ 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 )
20
24
- [ Changes by Package] ( #changes-by-package )
21
25
- [ v7.3.0] ( #v730 )
22
26
- [ 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 )
25
29
- [ Client-side ` context ` (unstable)] ( #client-side-context-unstable )
26
30
- [ Middleware (unstable)] ( #middleware-unstable )
27
31
- [ Middleware ` context ` parameter] ( #middleware-context-parameter )
@@ -33,28 +37,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
33
37
- [ Prerendering with a SPA Fallback] ( #prerendering-with-a-spa-fallback )
34
38
- [ Allow a root ` loader ` in SPA Mode] ( #allow-a-root-loader-in-spa-mode )
35
39
- [ 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 )
38
42
- [ Split Route Modules (unstable)] ( #split-route-modules-unstable )
39
43
- [ Changes by Package] ( #changes-by-package-2 )
40
44
- [ v7.1.5] ( #v715 )
41
- - [ Patch Changes] ( #patch-changes-3 )
42
- - [ v7.1.4] ( #v714 )
43
45
- [ Patch Changes] ( #patch-changes-4 )
44
- - [ v7.1.3 ] ( #v713 )
46
+ - [ v7.1.4 ] ( #v714 )
45
47
- [ Patch Changes] ( #patch-changes-5 )
46
- - [ v7.1.2 ] ( #v712 )
48
+ - [ v7.1.3 ] ( #v713 )
47
49
- [ Patch Changes] ( #patch-changes-6 )
48
- - [ v7.1.1 ] ( #v711 )
50
+ - [ v7.1.2 ] ( #v712 )
49
51
- [ Patch Changes] ( #patch-changes-7 )
52
+ - [ v7.1.1] ( #v711 )
53
+ - [ Patch Changes] ( #patch-changes-8 )
50
54
- [ v7.1.0] ( #v710 )
51
55
- [ Minor Changes] ( #minor-changes-3 )
52
- - [ Patch Changes] ( #patch-changes-8 )
56
+ - [ Patch Changes] ( #patch-changes-9 )
53
57
- [ Changes by Package] ( #changes-by-package-3 )
54
58
- [ v7.0.2] ( #v702 )
55
- - [ Patch Changes] ( #patch-changes-9 )
56
- - [ v7.0.1] ( #v701 )
57
59
- [ Patch Changes] ( #patch-changes-10 )
60
+ - [ v7.0.1] ( #v701 )
61
+ - [ Patch Changes] ( #patch-changes-11 )
58
62
- [ v7.0.0] ( #v700 )
59
63
- [ Breaking Changes] ( #breaking-changes )
60
64
- [ Package Restructuring] ( #package-restructuring )
@@ -71,199 +75,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
71
75
- [ Major Changes (` react-router ` )] ( #major-changes-react-router )
72
76
- [ Major Changes (` @react-router/* ` )] ( #major-changes-react-router-1 )
73
77
- [ Minor Changes] ( #minor-changes-4 )
74
- - [ Patch Changes] ( #patch-changes-11 )
78
+ - [ Patch Changes] ( #patch-changes-12 )
75
79
- [ Changes by Package] ( #changes-by-package-4 )
76
80
- [ React Router v6 Releases] ( #react-router-v6-releases )
77
81
- [ v6.30.0] ( #v6300 )
78
82
- [ Minor Changes] ( #minor-changes-5 )
79
- - [ Patch Changes] ( #patch-changes-12 )
83
+ - [ Patch Changes] ( #patch-changes-13 )
80
84
- [ v6.29.0] ( #v6290 )
81
85
- [ Minor Changes] ( #minor-changes-6 )
82
- - [ Patch Changes] ( #patch-changes-13 )
83
- - [ v6.28.2] ( #v6282 )
84
86
- [ Patch Changes] ( #patch-changes-14 )
85
- - [ v6.28.1 ] ( #v6281 )
87
+ - [ v6.28.2 ] ( #v6282 )
86
88
- [ Patch Changes] ( #patch-changes-15 )
89
+ - [ v6.28.1] ( #v6281 )
90
+ - [ Patch Changes] ( #patch-changes-16 )
87
91
- [ v6.28.0] ( #v6280 )
88
92
- [ What's Changed] ( #whats-changed-1 )
89
93
- [ Minor Changes] ( #minor-changes-7 )
90
- - [ Patch Changes] ( #patch-changes-16 )
94
+ - [ Patch Changes] ( #patch-changes-17 )
91
95
- [ v6.27.0] ( #v6270 )
92
96
- [ What's Changed] ( #whats-changed-2 )
93
97
- [ Stabilized APIs] ( #stabilized-apis )
94
98
- [ Minor Changes] ( #minor-changes-8 )
95
- - [ Patch Changes] ( #patch-changes-17 )
96
- - [ v6.26.2] ( #v6262 )
97
99
- [ Patch Changes] ( #patch-changes-18 )
98
- - [ v6.26.1 ] ( #v6261 )
100
+ - [ v6.26.2 ] ( #v6262 )
99
101
- [ Patch Changes] ( #patch-changes-19 )
102
+ - [ v6.26.1] ( #v6261 )
103
+ - [ Patch Changes] ( #patch-changes-20 )
100
104
- [ v6.26.0] ( #v6260 )
101
105
- [ Minor Changes] ( #minor-changes-9 )
102
- - [ Patch Changes] ( #patch-changes-20 )
103
- - [ v6.25.1] ( #v6251 )
104
106
- [ Patch Changes] ( #patch-changes-21 )
107
+ - [ v6.25.1] ( #v6251 )
108
+ - [ Patch Changes] ( #patch-changes-22 )
105
109
- [ v6.25.0] ( #v6250 )
106
110
- [ What's Changed] ( #whats-changed-3 )
107
111
- [ Stabilized ` v7_skipActionErrorRevalidation ` ] ( #stabilized-v7_skipactionerrorrevalidation )
108
112
- [ Minor Changes] ( #minor-changes-10 )
109
- - [ Patch Changes] ( #patch-changes-22 )
110
- - [ v6.24.1] ( #v6241 )
111
113
- [ Patch Changes] ( #patch-changes-23 )
114
+ - [ v6.24.1] ( #v6241 )
115
+ - [ Patch Changes] ( #patch-changes-24 )
112
116
- [ v6.24.0] ( #v6240 )
113
117
- [ What's Changed] ( #whats-changed-4 )
114
118
- [ Lazy Route Discovery (a.k.a. "Fog of War")] ( #lazy-route-discovery-aka-fog-of-war )
115
119
- [ Minor Changes] ( #minor-changes-11 )
116
- - [ Patch Changes] ( #patch-changes-24 )
117
- - [ v6.23.1] ( #v6231 )
118
120
- [ Patch Changes] ( #patch-changes-25 )
121
+ - [ v6.23.1] ( #v6231 )
122
+ - [ Patch Changes] ( #patch-changes-26 )
119
123
- [ v6.23.0] ( #v6230 )
120
124
- [ What's Changed] ( #whats-changed-5 )
121
125
- [ Data Strategy (unstable)] ( #data-strategy-unstable )
122
126
- [ Skip Action Error Revalidation (unstable)] ( #skip-action-error-revalidation-unstable )
123
127
- [ Minor Changes] ( #minor-changes-12 )
124
128
- [ v6.22.3] ( #v6223 )
125
- - [ Patch Changes] ( #patch-changes-26 )
126
- - [ v6.22.2] ( #v6222 )
127
129
- [ Patch Changes] ( #patch-changes-27 )
128
- - [ v6.22.1 ] ( #v6221 )
130
+ - [ v6.22.2 ] ( #v6222 )
129
131
- [ Patch Changes] ( #patch-changes-28 )
132
+ - [ v6.22.1] ( #v6221 )
133
+ - [ Patch Changes] ( #patch-changes-29 )
130
134
- [ v6.22.0] ( #v6220 )
131
135
- [ What's Changed] ( #whats-changed-6 )
132
136
- [ Core Web Vitals Technology Report Flag] ( #core-web-vitals-technology-report-flag )
133
137
- [ Minor Changes] ( #minor-changes-13 )
134
- - [ Patch Changes] ( #patch-changes-29 )
135
- - [ v6.21.3] ( #v6213 )
136
138
- [ Patch Changes] ( #patch-changes-30 )
137
- - [ v6.21.2 ] ( #v6212 )
139
+ - [ v6.21.3 ] ( #v6213 )
138
140
- [ Patch Changes] ( #patch-changes-31 )
139
- - [ v6.21.1 ] ( #v6211 )
141
+ - [ v6.21.2 ] ( #v6212 )
140
142
- [ Patch Changes] ( #patch-changes-32 )
143
+ - [ v6.21.1] ( #v6211 )
144
+ - [ Patch Changes] ( #patch-changes-33 )
141
145
- [ v6.21.0] ( #v6210 )
142
146
- [ What's Changed] ( #whats-changed-7 )
143
147
- [ ` future.v7_relativeSplatPath ` ] ( #futurev7_relativesplatpath )
144
148
- [ Partial Hydration] ( #partial-hydration )
145
149
- [ Minor Changes] ( #minor-changes-14 )
146
- - [ Patch Changes] ( #patch-changes-33 )
147
- - [ v6.20.1] ( #v6201 )
148
150
- [ Patch Changes] ( #patch-changes-34 )
151
+ - [ v6.20.1] ( #v6201 )
152
+ - [ Patch Changes] ( #patch-changes-35 )
149
153
- [ v6.20.0] ( #v6200 )
150
154
- [ Minor Changes] ( #minor-changes-15 )
151
- - [ Patch Changes] ( #patch-changes-35 )
155
+ - [ Patch Changes] ( #patch-changes-36 )
152
156
- [ v6.19.0] ( #v6190 )
153
157
- [ What's Changed] ( #whats-changed-8 )
154
158
- [ ` unstable_flushSync ` API] ( #unstable_flushsync-api )
155
159
- [ Minor Changes] ( #minor-changes-16 )
156
- - [ Patch Changes] ( #patch-changes-36 )
160
+ - [ Patch Changes] ( #patch-changes-37 )
157
161
- [ v6.18.0] ( #v6180 )
158
162
- [ What's Changed] ( #whats-changed-9 )
159
163
- [ New Fetcher APIs] ( #new-fetcher-apis )
160
164
- [ Persistence Future Flag (` future.v7_fetcherPersist ` )] ( #persistence-future-flag-futurev7_fetcherpersist )
161
165
- [ Minor Changes] ( #minor-changes-17 )
162
- - [ Patch Changes] ( #patch-changes-37 )
166
+ - [ Patch Changes] ( #patch-changes-38 )
163
167
- [ v6.17.0] ( #v6170 )
164
168
- [ What's Changed] ( #whats-changed-10 )
165
169
- [ View Transitions 🚀] ( #view-transitions- )
166
170
- [ Minor Changes] ( #minor-changes-18 )
167
- - [ Patch Changes] ( #patch-changes-38 )
171
+ - [ Patch Changes] ( #patch-changes-39 )
168
172
- [ v6.16.0] ( #v6160 )
169
173
- [ Minor Changes] ( #minor-changes-19 )
170
- - [ Patch Changes] ( #patch-changes-39 )
174
+ - [ Patch Changes] ( #patch-changes-40 )
171
175
- [ v6.15.0] ( #v6150 )
172
176
- [ Minor Changes] ( #minor-changes-20 )
173
- - [ Patch Changes] ( #patch-changes-40 )
174
- - [ v6.14.2] ( #v6142 )
175
177
- [ Patch Changes] ( #patch-changes-41 )
176
- - [ v6.14.1 ] ( #v6141 )
178
+ - [ v6.14.2 ] ( #v6142 )
177
179
- [ Patch Changes] ( #patch-changes-42 )
180
+ - [ v6.14.1] ( #v6141 )
181
+ - [ Patch Changes] ( #patch-changes-43 )
178
182
- [ v6.14.0] ( #v6140 )
179
183
- [ What's Changed] ( #whats-changed-11 )
180
184
- [ JSON/Text Submissions] ( #jsontext-submissions )
181
185
- [ Minor Changes] ( #minor-changes-21 )
182
- - [ Patch Changes] ( #patch-changes-43 )
186
+ - [ Patch Changes] ( #patch-changes-44 )
183
187
- [ v6.13.0] ( #v6130 )
184
188
- [ What's Changed] ( #whats-changed-12 )
185
189
- [ ` future.v7_startTransition ` ] ( #futurev7_starttransition )
186
190
- [ Minor Changes] ( #minor-changes-22 )
187
- - [ Patch Changes] ( #patch-changes-44 )
188
- - [ v6.12.1] ( #v6121 )
189
191
- [ Patch Changes] ( #patch-changes-45 )
192
+ - [ v6.12.1] ( #v6121 )
193
+ - [ Patch Changes] ( #patch-changes-46 )
190
194
- [ v6.12.0] ( #v6120 )
191
195
- [ What's Changed] ( #whats-changed-13 )
192
196
- [ ` React.startTransition ` support] ( #reactstarttransition-support )
193
197
- [ Minor Changes] ( #minor-changes-23 )
194
- - [ Patch Changes] ( #patch-changes-46 )
195
- - [ v6.11.2] ( #v6112 )
196
198
- [ Patch Changes] ( #patch-changes-47 )
197
- - [ v6.11.1 ] ( #v6111 )
199
+ - [ v6.11.2 ] ( #v6112 )
198
200
- [ Patch Changes] ( #patch-changes-48 )
201
+ - [ v6.11.1] ( #v6111 )
202
+ - [ Patch Changes] ( #patch-changes-49 )
199
203
- [ v6.11.0] ( #v6110 )
200
204
- [ Minor Changes] ( #minor-changes-24 )
201
- - [ Patch Changes] ( #patch-changes-49 )
205
+ - [ Patch Changes] ( #patch-changes-50 )
202
206
- [ v6.10.0] ( #v6100 )
203
207
- [ What's Changed] ( #whats-changed-14 )
204
208
- [ Minor Changes] ( #minor-changes-25 )
205
209
- [ ` future.v7_normalizeFormMethod ` ] ( #futurev7_normalizeformmethod )
206
- - [ Patch Changes] ( #patch-changes-50 )
210
+ - [ Patch Changes] ( #patch-changes-51 )
207
211
- [ v6.9.0] ( #v690 )
208
212
- [ What's Changed] ( #whats-changed-15 )
209
213
- [ ` Component ` /` ErrorBoundary ` route properties] ( #componenterrorboundary-route-properties )
210
214
- [ Introducing Lazy Route Modules] ( #introducing-lazy-route-modules )
211
215
- [ Minor Changes] ( #minor-changes-26 )
212
- - [ Patch Changes] ( #patch-changes-51 )
213
- - [ v6.8.2] ( #v682 )
214
216
- [ Patch Changes] ( #patch-changes-52 )
215
- - [ v6.8.1 ] ( #v681 )
217
+ - [ v6.8.2 ] ( #v682 )
216
218
- [ Patch Changes] ( #patch-changes-53 )
219
+ - [ v6.8.1] ( #v681 )
220
+ - [ Patch Changes] ( #patch-changes-54 )
217
221
- [ v6.8.0] ( #v680 )
218
222
- [ Minor Changes] ( #minor-changes-27 )
219
- - [ Patch Changes] ( #patch-changes-54 )
223
+ - [ Patch Changes] ( #patch-changes-55 )
220
224
- [ v6.7.0] ( #v670 )
221
225
- [ Minor Changes] ( #minor-changes-28 )
222
- - [ Patch Changes] ( #patch-changes-55 )
223
- - [ v6.6.2] ( #v662 )
224
226
- [ Patch Changes] ( #patch-changes-56 )
225
- - [ v6.6.1 ] ( #v661 )
227
+ - [ v6.6.2 ] ( #v662 )
226
228
- [ Patch Changes] ( #patch-changes-57 )
229
+ - [ v6.6.1] ( #v661 )
230
+ - [ Patch Changes] ( #patch-changes-58 )
227
231
- [ v6.6.0] ( #v660 )
228
232
- [ What's Changed] ( #whats-changed-16 )
229
233
- [ Minor Changes] ( #minor-changes-29 )
230
- - [ Patch Changes] ( #patch-changes-58 )
234
+ - [ Patch Changes] ( #patch-changes-59 )
231
235
- [ v6.5.0] ( #v650 )
232
236
- [ What's Changed] ( #whats-changed-17 )
233
237
- [ Minor Changes] ( #minor-changes-30 )
234
- - [ Patch Changes] ( #patch-changes-59 )
235
- - [ v6.4.5] ( #v645 )
236
238
- [ Patch Changes] ( #patch-changes-60 )
237
- - [ v6.4.4 ] ( #v644 )
239
+ - [ v6.4.5 ] ( #v645 )
238
240
- [ Patch Changes] ( #patch-changes-61 )
239
- - [ v6.4.3 ] ( #v643 )
241
+ - [ v6.4.4 ] ( #v644 )
240
242
- [ Patch Changes] ( #patch-changes-62 )
241
- - [ v6.4.2 ] ( #v642 )
243
+ - [ v6.4.3 ] ( #v643 )
242
244
- [ Patch Changes] ( #patch-changes-63 )
243
- - [ v6.4.1 ] ( #v641 )
245
+ - [ v6.4.2 ] ( #v642 )
244
246
- [ Patch Changes] ( #patch-changes-64 )
247
+ - [ v6.4.1] ( #v641 )
248
+ - [ Patch Changes] ( #patch-changes-65 )
245
249
- [ v6.4.0] ( #v640 )
246
250
- [ What's Changed] ( #whats-changed-18 )
247
251
- [ Remix Data APIs] ( #remix-data-apis )
248
- - [ Patch Changes] ( #patch-changes-65 )
252
+ - [ Patch Changes] ( #patch-changes-66 )
249
253
- [ v6.3.0] ( #v630 )
250
254
- [ Minor Changes] ( #minor-changes-31 )
251
255
- [ v6.2.2] ( #v622 )
252
- - [ Patch Changes] ( #patch-changes-66 )
253
- - [ v6.2.1] ( #v621 )
254
256
- [ Patch Changes] ( #patch-changes-67 )
257
+ - [ v6.2.1] ( #v621 )
258
+ - [ Patch Changes] ( #patch-changes-68 )
255
259
- [ v6.2.0] ( #v620 )
256
260
- [ Minor Changes] ( #minor-changes-32 )
257
- - [ Patch Changes] ( #patch-changes-68 )
258
- - [ v6.1.1] ( #v611 )
259
261
- [ Patch Changes] ( #patch-changes-69 )
262
+ - [ v6.1.1] ( #v611 )
263
+ - [ Patch Changes] ( #patch-changes-70 )
260
264
- [ v6.1.0] ( #v610 )
261
265
- [ Minor Changes] ( #minor-changes-33 )
262
- - [ Patch Changes] ( #patch-changes-70 )
263
- - [ v6.0.2] ( #v602 )
264
266
- [ Patch Changes] ( #patch-changes-71 )
265
- - [ v6.0.1 ] ( #v601 )
267
+ - [ v6.0.2 ] ( #v602 )
266
268
- [ Patch Changes] ( #patch-changes-72 )
269
+ - [ v6.0.1] ( #v601 )
270
+ - [ Patch Changes] ( #patch-changes-73 )
267
271
- [ v6.0.0] ( #v600 )
268
272
269
273
</details >
@@ -305,6 +309,36 @@ Date: YYYY-MM-DD
305
309
**Full Changelog**: [`v7.X.Y...v7.X.Y`](https://github.com/remix-run/react-router/compare/[email protected] @7.X.Y)
306
310
-->
307
311
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
+
308
342
## v7.4.0
309
343
310
344
Date: 2025-03-19
0 commit comments