@@ -13,29 +13,33 @@ 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.5.1](#v751)
16
+ - [v7.5.2](#v752)
17
+ - [Security Notice](#security-notice)
17
18
- [Patch Changes](#patch-changes)
18
19
- [Unstable Changes](#unstable-changes)
20
+ - [v7.5.1](#v751)
21
+ - [Patch Changes](#patch-changes-1)
22
+ - [Unstable Changes](#unstable-changes-1)
19
23
- [v7.5.0](#v750)
20
24
- [What's Changed](#whats-changed)
21
25
- [`route.lazy` Object API](#routelazy-object-api)
22
26
- [Minor Changes](#minor-changes)
23
- - [Patch Changes](#patch-changes-1)
24
- - [Unstable Changes](#unstable-changes-1)
25
- - [Changes by Package](#changes-by-package)
26
- - [v7.4.1](#v741)
27
- - [Security Notice](#security-notice)
28
27
- [Patch Changes](#patch-changes-2)
29
28
- [Unstable Changes](#unstable-changes-2)
30
- - [v7.4.0](#v740)
31
- - [Minor Changes](#minor-changes-1)
29
+ - [Changes by Package](#changes-by-package)
30
+ - [v7.4.1](#v741)
31
+ - [Security Notice](#security-notice-1)
32
32
- [Patch Changes](#patch-changes-3)
33
33
- [Unstable Changes](#unstable-changes-3)
34
+ - [v7.4.0](#v740)
35
+ - [Minor Changes](#minor-changes-1)
36
+ - [Patch Changes](#patch-changes-4)
37
+ - [Unstable Changes](#unstable-changes-4)
34
38
- [Changes by Package](#changes-by-package-1)
35
39
- [v7.3.0](#v730)
36
40
- [Minor Changes](#minor-changes-2)
37
- - [Patch Changes](#patch-changes-4 )
38
- - [Unstable Changes](#unstable-changes-4 )
41
+ - [Patch Changes](#patch-changes-5 )
42
+ - [Unstable Changes](#unstable-changes-5 )
39
43
- [Client-side `context` (unstable)](#client-side-context-unstable)
40
44
- [Middleware (unstable)](#middleware-unstable)
41
45
- [Middleware `context` parameter](#middleware-context-parameter)
@@ -47,28 +51,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
47
51
- [Prerendering with a SPA Fallback](#prerendering-with-a-spa-fallback)
48
52
- [Allow a root `loader` in SPA Mode](#allow-a-root-loader-in-spa-mode)
49
53
- [Minor Changes](#minor-changes-3)
50
- - [Patch Changes](#patch-changes-5 )
51
- - [Unstable Changes](#unstable-changes-5 )
54
+ - [Patch Changes](#patch-changes-6 )
55
+ - [Unstable Changes](#unstable-changes-6 )
52
56
- [Split Route Modules (unstable)](#split-route-modules-unstable)
53
57
- [Changes by Package](#changes-by-package-3)
54
58
- [v7.1.5](#v715)
55
- - [Patch Changes](#patch-changes-6)
56
- - [v7.1.4](#v714)
57
59
- [Patch Changes](#patch-changes-7)
58
- - [v7.1.3 ](#v713 )
60
+ - [v7.1.4 ](#v714 )
59
61
- [Patch Changes](#patch-changes-8)
60
- - [v7.1.2 ](#v712 )
62
+ - [v7.1.3 ](#v713 )
61
63
- [Patch Changes](#patch-changes-9)
62
- - [v7.1.1 ](#v711 )
64
+ - [v7.1.2 ](#v712 )
63
65
- [Patch Changes](#patch-changes-10)
66
+ - [v7.1.1](#v711)
67
+ - [Patch Changes](#patch-changes-11)
64
68
- [v7.1.0](#v710)
65
69
- [Minor Changes](#minor-changes-4)
66
- - [Patch Changes](#patch-changes-11 )
70
+ - [Patch Changes](#patch-changes-12 )
67
71
- [Changes by Package](#changes-by-package-4)
68
72
- [v7.0.2](#v702)
69
- - [Patch Changes](#patch-changes-12)
70
- - [v7.0.1](#v701)
71
73
- [Patch Changes](#patch-changes-13)
74
+ - [v7.0.1](#v701)
75
+ - [Patch Changes](#patch-changes-14)
72
76
- [v7.0.0](#v700)
73
77
- [Breaking Changes](#breaking-changes)
74
78
- [Package Restructuring](#package-restructuring)
@@ -85,199 +89,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
85
89
- [Major Changes (`react-router`)](#major-changes-react-router)
86
90
- [Major Changes (`@react-router/*`)](#major-changes-react-router-1)
87
91
- [Minor Changes](#minor-changes-5)
88
- - [Patch Changes](#patch-changes-14 )
92
+ - [Patch Changes](#patch-changes-15 )
89
93
- [Changes by Package](#changes-by-package-5)
90
94
- [React Router v6 Releases](#react-router-v6-releases)
91
95
- [v6.30.0](#v6300)
92
96
- [Minor Changes](#minor-changes-6)
93
- - [Patch Changes](#patch-changes-15 )
97
+ - [Patch Changes](#patch-changes-16 )
94
98
- [v6.29.0](#v6290)
95
99
- [Minor Changes](#minor-changes-7)
96
- - [Patch Changes](#patch-changes-16)
97
- - [v6.28.2](#v6282)
98
100
- [Patch Changes](#patch-changes-17)
99
- - [v6.28.1 ](#v6281 )
101
+ - [v6.28.2 ](#v6282 )
100
102
- [Patch Changes](#patch-changes-18)
103
+ - [v6.28.1](#v6281)
104
+ - [Patch Changes](#patch-changes-19)
101
105
- [v6.28.0](#v6280)
102
106
- [What's Changed](#whats-changed-2)
103
107
- [Minor Changes](#minor-changes-8)
104
- - [Patch Changes](#patch-changes-19 )
108
+ - [Patch Changes](#patch-changes-20 )
105
109
- [v6.27.0](#v6270)
106
110
- [What's Changed](#whats-changed-3)
107
111
- [Stabilized APIs](#stabilized-apis)
108
112
- [Minor Changes](#minor-changes-9)
109
- - [Patch Changes](#patch-changes-20)
110
- - [v6.26.2](#v6262)
111
113
- [Patch Changes](#patch-changes-21)
112
- - [v6.26.1 ](#v6261 )
114
+ - [v6.26.2 ](#v6262 )
113
115
- [Patch Changes](#patch-changes-22)
116
+ - [v6.26.1](#v6261)
117
+ - [Patch Changes](#patch-changes-23)
114
118
- [v6.26.0](#v6260)
115
119
- [Minor Changes](#minor-changes-10)
116
- - [Patch Changes](#patch-changes-23)
117
- - [v6.25.1](#v6251)
118
120
- [Patch Changes](#patch-changes-24)
121
+ - [v6.25.1](#v6251)
122
+ - [Patch Changes](#patch-changes-25)
119
123
- [v6.25.0](#v6250)
120
124
- [What's Changed](#whats-changed-4)
121
125
- [Stabilized `v7_skipActionErrorRevalidation`](#stabilized-v7_skipactionerrorrevalidation)
122
126
- [Minor Changes](#minor-changes-11)
123
- - [Patch Changes](#patch-changes-25)
124
- - [v6.24.1](#v6241)
125
127
- [Patch Changes](#patch-changes-26)
128
+ - [v6.24.1](#v6241)
129
+ - [Patch Changes](#patch-changes-27)
126
130
- [v6.24.0](#v6240)
127
131
- [What's Changed](#whats-changed-5)
128
132
- [Lazy Route Discovery (a.k.a. "Fog of War")](#lazy-route-discovery-aka-fog-of-war)
129
133
- [Minor Changes](#minor-changes-12)
130
- - [Patch Changes](#patch-changes-27)
131
- - [v6.23.1](#v6231)
132
134
- [Patch Changes](#patch-changes-28)
135
+ - [v6.23.1](#v6231)
136
+ - [Patch Changes](#patch-changes-29)
133
137
- [v6.23.0](#v6230)
134
138
- [What's Changed](#whats-changed-6)
135
139
- [Data Strategy (unstable)](#data-strategy-unstable)
136
140
- [Skip Action Error Revalidation (unstable)](#skip-action-error-revalidation-unstable)
137
141
- [Minor Changes](#minor-changes-13)
138
142
- [v6.22.3](#v6223)
139
- - [Patch Changes](#patch-changes-29)
140
- - [v6.22.2](#v6222)
141
143
- [Patch Changes](#patch-changes-30)
142
- - [v6.22.1 ](#v6221 )
144
+ - [v6.22.2 ](#v6222 )
143
145
- [Patch Changes](#patch-changes-31)
146
+ - [v6.22.1](#v6221)
147
+ - [Patch Changes](#patch-changes-32)
144
148
- [v6.22.0](#v6220)
145
149
- [What's Changed](#whats-changed-7)
146
150
- [Core Web Vitals Technology Report Flag](#core-web-vitals-technology-report-flag)
147
151
- [Minor Changes](#minor-changes-14)
148
- - [Patch Changes](#patch-changes-32)
149
- - [v6.21.3](#v6213)
150
152
- [Patch Changes](#patch-changes-33)
151
- - [v6.21.2 ](#v6212 )
153
+ - [v6.21.3 ](#v6213 )
152
154
- [Patch Changes](#patch-changes-34)
153
- - [v6.21.1 ](#v6211 )
155
+ - [v6.21.2 ](#v6212 )
154
156
- [Patch Changes](#patch-changes-35)
157
+ - [v6.21.1](#v6211)
158
+ - [Patch Changes](#patch-changes-36)
155
159
- [v6.21.0](#v6210)
156
160
- [What's Changed](#whats-changed-8)
157
161
- [`future.v7_relativeSplatPath`](#futurev7_relativesplatpath)
158
162
- [Partial Hydration](#partial-hydration)
159
163
- [Minor Changes](#minor-changes-15)
160
- - [Patch Changes](#patch-changes-36)
161
- - [v6.20.1](#v6201)
162
164
- [Patch Changes](#patch-changes-37)
165
+ - [v6.20.1](#v6201)
166
+ - [Patch Changes](#patch-changes-38)
163
167
- [v6.20.0](#v6200)
164
168
- [Minor Changes](#minor-changes-16)
165
- - [Patch Changes](#patch-changes-38 )
169
+ - [Patch Changes](#patch-changes-39 )
166
170
- [v6.19.0](#v6190)
167
171
- [What's Changed](#whats-changed-9)
168
172
- [`unstable_flushSync` API](#unstable_flushsync-api)
169
173
- [Minor Changes](#minor-changes-17)
170
- - [Patch Changes](#patch-changes-39 )
174
+ - [Patch Changes](#patch-changes-40 )
171
175
- [v6.18.0](#v6180)
172
176
- [What's Changed](#whats-changed-10)
173
177
- [New Fetcher APIs](#new-fetcher-apis)
174
178
- [Persistence Future Flag (`future.v7_fetcherPersist`)](#persistence-future-flag-futurev7_fetcherpersist)
175
179
- [Minor Changes](#minor-changes-18)
176
- - [Patch Changes](#patch-changes-40 )
180
+ - [Patch Changes](#patch-changes-41 )
177
181
- [v6.17.0](#v6170)
178
182
- [What's Changed](#whats-changed-11)
179
183
- [View Transitions 🚀](#view-transitions-)
180
184
- [Minor Changes](#minor-changes-19)
181
- - [Patch Changes](#patch-changes-41 )
185
+ - [Patch Changes](#patch-changes-42 )
182
186
- [v6.16.0](#v6160)
183
187
- [Minor Changes](#minor-changes-20)
184
- - [Patch Changes](#patch-changes-42 )
188
+ - [Patch Changes](#patch-changes-43 )
185
189
- [v6.15.0](#v6150)
186
190
- [Minor Changes](#minor-changes-21)
187
- - [Patch Changes](#patch-changes-43)
188
- - [v6.14.2](#v6142)
189
191
- [Patch Changes](#patch-changes-44)
190
- - [v6.14.1 ](#v6141 )
192
+ - [v6.14.2 ](#v6142 )
191
193
- [Patch Changes](#patch-changes-45)
194
+ - [v6.14.1](#v6141)
195
+ - [Patch Changes](#patch-changes-46)
192
196
- [v6.14.0](#v6140)
193
197
- [What's Changed](#whats-changed-12)
194
198
- [JSON/Text Submissions](#jsontext-submissions)
195
199
- [Minor Changes](#minor-changes-22)
196
- - [Patch Changes](#patch-changes-46 )
200
+ - [Patch Changes](#patch-changes-47 )
197
201
- [v6.13.0](#v6130)
198
202
- [What's Changed](#whats-changed-13)
199
203
- [`future.v7_startTransition`](#futurev7_starttransition)
200
204
- [Minor Changes](#minor-changes-23)
201
- - [Patch Changes](#patch-changes-47)
202
- - [v6.12.1](#v6121)
203
205
- [Patch Changes](#patch-changes-48)
206
+ - [v6.12.1](#v6121)
207
+ - [Patch Changes](#patch-changes-49)
204
208
- [v6.12.0](#v6120)
205
209
- [What's Changed](#whats-changed-14)
206
210
- [`React.startTransition` support](#reactstarttransition-support)
207
211
- [Minor Changes](#minor-changes-24)
208
- - [Patch Changes](#patch-changes-49)
209
- - [v6.11.2](#v6112)
210
212
- [Patch Changes](#patch-changes-50)
211
- - [v6.11.1 ](#v6111 )
213
+ - [v6.11.2 ](#v6112 )
212
214
- [Patch Changes](#patch-changes-51)
215
+ - [v6.11.1](#v6111)
216
+ - [Patch Changes](#patch-changes-52)
213
217
- [v6.11.0](#v6110)
214
218
- [Minor Changes](#minor-changes-25)
215
- - [Patch Changes](#patch-changes-52 )
219
+ - [Patch Changes](#patch-changes-53 )
216
220
- [v6.10.0](#v6100)
217
221
- [What's Changed](#whats-changed-15)
218
222
- [Minor Changes](#minor-changes-26)
219
223
- [`future.v7_normalizeFormMethod`](#futurev7_normalizeformmethod)
220
- - [Patch Changes](#patch-changes-53 )
224
+ - [Patch Changes](#patch-changes-54 )
221
225
- [v6.9.0](#v690)
222
226
- [What's Changed](#whats-changed-16)
223
227
- [`Component`/`ErrorBoundary` route properties](#componenterrorboundary-route-properties)
224
228
- [Introducing Lazy Route Modules](#introducing-lazy-route-modules)
225
229
- [Minor Changes](#minor-changes-27)
226
- - [Patch Changes](#patch-changes-54)
227
- - [v6.8.2](#v682)
228
230
- [Patch Changes](#patch-changes-55)
229
- - [v6.8.1 ](#v681 )
231
+ - [v6.8.2 ](#v682 )
230
232
- [Patch Changes](#patch-changes-56)
233
+ - [v6.8.1](#v681)
234
+ - [Patch Changes](#patch-changes-57)
231
235
- [v6.8.0](#v680)
232
236
- [Minor Changes](#minor-changes-28)
233
- - [Patch Changes](#patch-changes-57 )
237
+ - [Patch Changes](#patch-changes-58 )
234
238
- [v6.7.0](#v670)
235
239
- [Minor Changes](#minor-changes-29)
236
- - [Patch Changes](#patch-changes-58)
237
- - [v6.6.2](#v662)
238
240
- [Patch Changes](#patch-changes-59)
239
- - [v6.6.1 ](#v661 )
241
+ - [v6.6.2 ](#v662 )
240
242
- [Patch Changes](#patch-changes-60)
243
+ - [v6.6.1](#v661)
244
+ - [Patch Changes](#patch-changes-61)
241
245
- [v6.6.0](#v660)
242
246
- [What's Changed](#whats-changed-17)
243
247
- [Minor Changes](#minor-changes-30)
244
- - [Patch Changes](#patch-changes-61 )
248
+ - [Patch Changes](#patch-changes-62 )
245
249
- [v6.5.0](#v650)
246
250
- [What's Changed](#whats-changed-18)
247
251
- [Minor Changes](#minor-changes-31)
248
- - [Patch Changes](#patch-changes-62)
249
- - [v6.4.5](#v645)
250
252
- [Patch Changes](#patch-changes-63)
251
- - [v6.4.4 ](#v644 )
253
+ - [v6.4.5 ](#v645 )
252
254
- [Patch Changes](#patch-changes-64)
253
- - [v6.4.3 ](#v643 )
255
+ - [v6.4.4 ](#v644 )
254
256
- [Patch Changes](#patch-changes-65)
255
- - [v6.4.2 ](#v642 )
257
+ - [v6.4.3 ](#v643 )
256
258
- [Patch Changes](#patch-changes-66)
257
- - [v6.4.1 ](#v641 )
259
+ - [v6.4.2 ](#v642 )
258
260
- [Patch Changes](#patch-changes-67)
261
+ - [v6.4.1](#v641)
262
+ - [Patch Changes](#patch-changes-68)
259
263
- [v6.4.0](#v640)
260
264
- [What's Changed](#whats-changed-19)
261
265
- [Remix Data APIs](#remix-data-apis)
262
- - [Patch Changes](#patch-changes-68 )
266
+ - [Patch Changes](#patch-changes-69 )
263
267
- [v6.3.0](#v630)
264
268
- [Minor Changes](#minor-changes-32)
265
269
- [v6.2.2](#v622)
266
- - [Patch Changes](#patch-changes-69)
267
- - [v6.2.1](#v621)
268
270
- [Patch Changes](#patch-changes-70)
271
+ - [v6.2.1](#v621)
272
+ - [Patch Changes](#patch-changes-71)
269
273
- [v6.2.0](#v620)
270
274
- [Minor Changes](#minor-changes-33)
271
- - [Patch Changes](#patch-changes-71)
272
- - [v6.1.1](#v611)
273
275
- [Patch Changes](#patch-changes-72)
276
+ - [v6.1.1](#v611)
277
+ - [Patch Changes](#patch-changes-73)
274
278
- [v6.1.0](#v610)
275
279
- [Minor Changes](#minor-changes-34)
276
- - [Patch Changes](#patch-changes-73)
277
- - [v6.0.2](#v602)
278
280
- [Patch Changes](#patch-changes-74)
279
- - [v6.0.1 ](#v601 )
281
+ - [v6.0.2 ](#v602 )
280
282
- [Patch Changes](#patch-changes-75)
283
+ - [v6.0.1](#v601)
284
+ - [Patch Changes](#patch-changes-76)
281
285
- [v6.0.0](#v600)
282
286
283
287
</details>
@@ -319,6 +323,32 @@ Date: YYYY-MM-DD
319
323
**Full Changelog**: [`v7.X.Y...v7.X.Y`](https://github.com/remix-run/react-router/compare/
[email protected] @7.X.Y)
320
324
-->
321
325
326
+ ## v7.5.2
327
+
328
+ Date: 2025-04-24
329
+
330
+ ### Security Notice
331
+
332
+ Fixed 2 security vulnerabilities that could result in cache-poisoning attacks by sending specific headers intended for build-time usage for SPA Mode and Pre-rendering ([GHSA-f46r-rw29-r322](https://github.com/remix-run/react-router/security/advisories/GHSA-f46r-rw29-r322), [GHSA-cpj6-fhp6-mr6j](https://github.com/remix-run/react-router/security/advisories/GHSA-cpj6-fhp6-mr6j)).
333
+
334
+ ### Patch Changes
335
+
336
+ - `react-router` - Adjust approach for Pre-rendering/SPA Mode via headers ([#13453](https://github.com/remix-run/react-router/pull/13453))
337
+ - `react-router` - Update Single Fetch to also handle the 204 redirects used in `?_data` requests in Remix v2 ([#13364](https://github.com/remix-run/react-router/pull/13364))
338
+ - This allows applications to trigger a redirect on `.data` requests from outside the scope of React Router (i.e., an `express`/`hono` middleware) the same way they did in Remix v2 before Single Fetch was implemented
339
+ - This is a bit of an escape hatch - the recommended way to handle this is redirecting from a root route middleware
340
+ - To use this functionality, you may return from a `.data` request wih a response as follows:
341
+ - Set a 204 status code
342
+ - Set an `X-Remix-Redirect: <new-location>` header
343
+ - Optionally, set `X-Remix-Replace: true` or `X-Remix-Reload-Document: true` headers to replicate `replace()`/`redirectDocument()` functionality
344
+ - ⚠️ Please note that these responses rely on implementation details that are subject to change without a SemVer major release, and it is recommended you set up integration tests for your application to confirm this functionality is working correctly with each future React Router upgrade
345
+
346
+ ### Unstable Changes
347
+
348
+ ⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
349
+
350
+ **Full Changelog**: [`v7.5.1...v7.5.2`](https://github.com/remix-run/react-router/compare/
[email protected] @7.5.2)
351
+
322
352
## v7.5.1
323
353
324
354
Date: 2025-04-17
@@ -427,7 +457,7 @@ Date: 2025-03-28
427
457
428
458
### Security Notice
429
459
430
- 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.
460
+ 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 ([GHSA-4q56-crqp-v477/CVE-2025-31137](https://github.com/remix-run/react-router/security/advisories/GHSA-4q56-crqp-v477)) .
431
461
432
462
### Patch Changes
433
463
0 commit comments