@@ -13,29 +13,32 @@ 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.5.1 ](#v751 )
16+ - [v7.5.2 ](#v752 )
1717 - [Patch Changes](#patch-changes)
1818 - [Unstable Changes](#unstable-changes)
19+ - [v7.5.1](#v751)
20+ - [Patch Changes](#patch-changes-1)
21+ - [Unstable Changes](#unstable-changes-1)
1922 - [v7.5.0](#v750)
2023 - [What's Changed](#whats-changed)
2124 - [`route.lazy` Object API](#routelazy-object-api)
2225 - [Minor Changes](#minor-changes)
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 - [Changes by Package](#changes-by-package)
2629 - [v7.4.1](#v741)
2730 - [Security Notice](#security-notice)
28- - [Patch Changes](#patch-changes-2)
29- - [Unstable Changes](#unstable-changes-2)
30- - [v7.4.0](#v740)
31- - [Minor Changes](#minor-changes-1)
3231 - [Patch Changes](#patch-changes-3)
3332 - [Unstable Changes](#unstable-changes-3)
33+ - [v7.4.0](#v740)
34+ - [Minor Changes](#minor-changes-1)
35+ - [Patch Changes](#patch-changes-4)
36+ - [Unstable Changes](#unstable-changes-4)
3437 - [Changes by Package](#changes-by-package-1)
3538 - [v7.3.0](#v730)
3639 - [Minor Changes](#minor-changes-2)
37- - [Patch Changes](#patch-changes-4 )
38- - [Unstable Changes](#unstable-changes-4 )
40+ - [Patch Changes](#patch-changes-5 )
41+ - [Unstable Changes](#unstable-changes-5 )
3942 - [Client-side `context` (unstable)](#client-side-context-unstable)
4043 - [Middleware (unstable)](#middleware-unstable)
4144 - [Middleware `context` parameter](#middleware-context-parameter)
@@ -47,28 +50,28 @@ We manage release notes in this file instead of the paginated Github Releases Pa
4750 - [Prerendering with a SPA Fallback](#prerendering-with-a-spa-fallback)
4851 - [Allow a root `loader` in SPA Mode](#allow-a-root-loader-in-spa-mode)
4952 - [Minor Changes](#minor-changes-3)
50- - [Patch Changes](#patch-changes-5 )
51- - [Unstable Changes](#unstable-changes-5 )
53+ - [Patch Changes](#patch-changes-6 )
54+ - [Unstable Changes](#unstable-changes-6 )
5255 - [Split Route Modules (unstable)](#split-route-modules-unstable)
5356 - [Changes by Package](#changes-by-package-3)
5457 - [v7.1.5](#v715)
55- - [Patch Changes](#patch-changes-6)
56- - [v7.1.4](#v714)
5758 - [Patch Changes](#patch-changes-7)
58- - [v7.1.3 ](#v713 )
59+ - [v7.1.4 ](#v714 )
5960 - [Patch Changes](#patch-changes-8)
60- - [v7.1.2 ](#v712 )
61+ - [v7.1.3 ](#v713 )
6162 - [Patch Changes](#patch-changes-9)
62- - [v7.1.1 ](#v711 )
63+ - [v7.1.2 ](#v712 )
6364 - [Patch Changes](#patch-changes-10)
65+ - [v7.1.1](#v711)
66+ - [Patch Changes](#patch-changes-11)
6467 - [v7.1.0](#v710)
6568 - [Minor Changes](#minor-changes-4)
66- - [Patch Changes](#patch-changes-11 )
69+ - [Patch Changes](#patch-changes-12 )
6770 - [Changes by Package](#changes-by-package-4)
6871 - [v7.0.2](#v702)
69- - [Patch Changes](#patch-changes-12)
70- - [v7.0.1](#v701)
7172 - [Patch Changes](#patch-changes-13)
73+ - [v7.0.1](#v701)
74+ - [Patch Changes](#patch-changes-14)
7275 - [v7.0.0](#v700)
7376 - [Breaking Changes](#breaking-changes)
7477 - [Package Restructuring](#package-restructuring)
@@ -85,199 +88,199 @@ We manage release notes in this file instead of the paginated Github Releases Pa
8588 - [Major Changes (`react-router`)](#major-changes-react-router)
8689 - [Major Changes (`@react-router/*`)](#major-changes-react-router-1)
8790 - [Minor Changes](#minor-changes-5)
88- - [Patch Changes](#patch-changes-14 )
91+ - [Patch Changes](#patch-changes-15 )
8992 - [Changes by Package](#changes-by-package-5)
9093- [React Router v6 Releases](#react-router-v6-releases)
9194 - [v6.30.0](#v6300)
9295 - [Minor Changes](#minor-changes-6)
93- - [Patch Changes](#patch-changes-15 )
96+ - [Patch Changes](#patch-changes-16 )
9497 - [v6.29.0](#v6290)
9598 - [Minor Changes](#minor-changes-7)
96- - [Patch Changes](#patch-changes-16)
97- - [v6.28.2](#v6282)
9899 - [Patch Changes](#patch-changes-17)
99- - [v6.28.1 ](#v6281 )
100+ - [v6.28.2 ](#v6282 )
100101 - [Patch Changes](#patch-changes-18)
102+ - [v6.28.1](#v6281)
103+ - [Patch Changes](#patch-changes-19)
101104 - [v6.28.0](#v6280)
102105 - [What's Changed](#whats-changed-2)
103106 - [Minor Changes](#minor-changes-8)
104- - [Patch Changes](#patch-changes-19 )
107+ - [Patch Changes](#patch-changes-20 )
105108 - [v6.27.0](#v6270)
106109 - [What's Changed](#whats-changed-3)
107110 - [Stabilized APIs](#stabilized-apis)
108111 - [Minor Changes](#minor-changes-9)
109- - [Patch Changes](#patch-changes-20)
110- - [v6.26.2](#v6262)
111112 - [Patch Changes](#patch-changes-21)
112- - [v6.26.1 ](#v6261 )
113+ - [v6.26.2 ](#v6262 )
113114 - [Patch Changes](#patch-changes-22)
115+ - [v6.26.1](#v6261)
116+ - [Patch Changes](#patch-changes-23)
114117 - [v6.26.0](#v6260)
115118 - [Minor Changes](#minor-changes-10)
116- - [Patch Changes](#patch-changes-23)
117- - [v6.25.1](#v6251)
118119 - [Patch Changes](#patch-changes-24)
120+ - [v6.25.1](#v6251)
121+ - [Patch Changes](#patch-changes-25)
119122 - [v6.25.0](#v6250)
120123 - [What's Changed](#whats-changed-4)
121124 - [Stabilized `v7_skipActionErrorRevalidation`](#stabilized-v7_skipactionerrorrevalidation)
122125 - [Minor Changes](#minor-changes-11)
123- - [Patch Changes](#patch-changes-25)
124- - [v6.24.1](#v6241)
125126 - [Patch Changes](#patch-changes-26)
127+ - [v6.24.1](#v6241)
128+ - [Patch Changes](#patch-changes-27)
126129 - [v6.24.0](#v6240)
127130 - [What's Changed](#whats-changed-5)
128131 - [Lazy Route Discovery (a.k.a. "Fog of War")](#lazy-route-discovery-aka-fog-of-war)
129132 - [Minor Changes](#minor-changes-12)
130- - [Patch Changes](#patch-changes-27)
131- - [v6.23.1](#v6231)
132133 - [Patch Changes](#patch-changes-28)
134+ - [v6.23.1](#v6231)
135+ - [Patch Changes](#patch-changes-29)
133136 - [v6.23.0](#v6230)
134137 - [What's Changed](#whats-changed-6)
135138 - [Data Strategy (unstable)](#data-strategy-unstable)
136139 - [Skip Action Error Revalidation (unstable)](#skip-action-error-revalidation-unstable)
137140 - [Minor Changes](#minor-changes-13)
138141 - [v6.22.3](#v6223)
139- - [Patch Changes](#patch-changes-29)
140- - [v6.22.2](#v6222)
141142 - [Patch Changes](#patch-changes-30)
142- - [v6.22.1 ](#v6221 )
143+ - [v6.22.2 ](#v6222 )
143144 - [Patch Changes](#patch-changes-31)
145+ - [v6.22.1](#v6221)
146+ - [Patch Changes](#patch-changes-32)
144147 - [v6.22.0](#v6220)
145148 - [What's Changed](#whats-changed-7)
146149 - [Core Web Vitals Technology Report Flag](#core-web-vitals-technology-report-flag)
147150 - [Minor Changes](#minor-changes-14)
148- - [Patch Changes](#patch-changes-32)
149- - [v6.21.3](#v6213)
150151 - [Patch Changes](#patch-changes-33)
151- - [v6.21.2 ](#v6212 )
152+ - [v6.21.3 ](#v6213 )
152153 - [Patch Changes](#patch-changes-34)
153- - [v6.21.1 ](#v6211 )
154+ - [v6.21.2 ](#v6212 )
154155 - [Patch Changes](#patch-changes-35)
156+ - [v6.21.1](#v6211)
157+ - [Patch Changes](#patch-changes-36)
155158 - [v6.21.0](#v6210)
156159 - [What's Changed](#whats-changed-8)
157160 - [`future.v7_relativeSplatPath`](#futurev7_relativesplatpath)
158161 - [Partial Hydration](#partial-hydration)
159162 - [Minor Changes](#minor-changes-15)
160- - [Patch Changes](#patch-changes-36)
161- - [v6.20.1](#v6201)
162163 - [Patch Changes](#patch-changes-37)
164+ - [v6.20.1](#v6201)
165+ - [Patch Changes](#patch-changes-38)
163166 - [v6.20.0](#v6200)
164167 - [Minor Changes](#minor-changes-16)
165- - [Patch Changes](#patch-changes-38 )
168+ - [Patch Changes](#patch-changes-39 )
166169 - [v6.19.0](#v6190)
167170 - [What's Changed](#whats-changed-9)
168171 - [`unstable_flushSync` API](#unstable_flushsync-api)
169172 - [Minor Changes](#minor-changes-17)
170- - [Patch Changes](#patch-changes-39 )
173+ - [Patch Changes](#patch-changes-40 )
171174 - [v6.18.0](#v6180)
172175 - [What's Changed](#whats-changed-10)
173176 - [New Fetcher APIs](#new-fetcher-apis)
174177 - [Persistence Future Flag (`future.v7_fetcherPersist`)](#persistence-future-flag-futurev7_fetcherpersist)
175178 - [Minor Changes](#minor-changes-18)
176- - [Patch Changes](#patch-changes-40 )
179+ - [Patch Changes](#patch-changes-41 )
177180 - [v6.17.0](#v6170)
178181 - [What's Changed](#whats-changed-11)
179182 - [View Transitions 🚀](#view-transitions-)
180183 - [Minor Changes](#minor-changes-19)
181- - [Patch Changes](#patch-changes-41 )
184+ - [Patch Changes](#patch-changes-42 )
182185 - [v6.16.0](#v6160)
183186 - [Minor Changes](#minor-changes-20)
184- - [Patch Changes](#patch-changes-42 )
187+ - [Patch Changes](#patch-changes-43 )
185188 - [v6.15.0](#v6150)
186189 - [Minor Changes](#minor-changes-21)
187- - [Patch Changes](#patch-changes-43)
188- - [v6.14.2](#v6142)
189190 - [Patch Changes](#patch-changes-44)
190- - [v6.14.1 ](#v6141 )
191+ - [v6.14.2 ](#v6142 )
191192 - [Patch Changes](#patch-changes-45)
193+ - [v6.14.1](#v6141)
194+ - [Patch Changes](#patch-changes-46)
192195 - [v6.14.0](#v6140)
193196 - [What's Changed](#whats-changed-12)
194197 - [JSON/Text Submissions](#jsontext-submissions)
195198 - [Minor Changes](#minor-changes-22)
196- - [Patch Changes](#patch-changes-46 )
199+ - [Patch Changes](#patch-changes-47 )
197200 - [v6.13.0](#v6130)
198201 - [What's Changed](#whats-changed-13)
199202 - [`future.v7_startTransition`](#futurev7_starttransition)
200203 - [Minor Changes](#minor-changes-23)
201- - [Patch Changes](#patch-changes-47)
202- - [v6.12.1](#v6121)
203204 - [Patch Changes](#patch-changes-48)
205+ - [v6.12.1](#v6121)
206+ - [Patch Changes](#patch-changes-49)
204207 - [v6.12.0](#v6120)
205208 - [What's Changed](#whats-changed-14)
206209 - [`React.startTransition` support](#reactstarttransition-support)
207210 - [Minor Changes](#minor-changes-24)
208- - [Patch Changes](#patch-changes-49)
209- - [v6.11.2](#v6112)
210211 - [Patch Changes](#patch-changes-50)
211- - [v6.11.1 ](#v6111 )
212+ - [v6.11.2 ](#v6112 )
212213 - [Patch Changes](#patch-changes-51)
214+ - [v6.11.1](#v6111)
215+ - [Patch Changes](#patch-changes-52)
213216 - [v6.11.0](#v6110)
214217 - [Minor Changes](#minor-changes-25)
215- - [Patch Changes](#patch-changes-52 )
218+ - [Patch Changes](#patch-changes-53 )
216219 - [v6.10.0](#v6100)
217220 - [What's Changed](#whats-changed-15)
218221 - [Minor Changes](#minor-changes-26)
219222 - [`future.v7_normalizeFormMethod`](#futurev7_normalizeformmethod)
220- - [Patch Changes](#patch-changes-53 )
223+ - [Patch Changes](#patch-changes-54 )
221224 - [v6.9.0](#v690)
222225 - [What's Changed](#whats-changed-16)
223226 - [`Component`/`ErrorBoundary` route properties](#componenterrorboundary-route-properties)
224227 - [Introducing Lazy Route Modules](#introducing-lazy-route-modules)
225228 - [Minor Changes](#minor-changes-27)
226- - [Patch Changes](#patch-changes-54)
227- - [v6.8.2](#v682)
228229 - [Patch Changes](#patch-changes-55)
229- - [v6.8.1 ](#v681 )
230+ - [v6.8.2 ](#v682 )
230231 - [Patch Changes](#patch-changes-56)
232+ - [v6.8.1](#v681)
233+ - [Patch Changes](#patch-changes-57)
231234 - [v6.8.0](#v680)
232235 - [Minor Changes](#minor-changes-28)
233- - [Patch Changes](#patch-changes-57 )
236+ - [Patch Changes](#patch-changes-58 )
234237 - [v6.7.0](#v670)
235238 - [Minor Changes](#minor-changes-29)
236- - [Patch Changes](#patch-changes-58)
237- - [v6.6.2](#v662)
238239 - [Patch Changes](#patch-changes-59)
239- - [v6.6.1 ](#v661 )
240+ - [v6.6.2 ](#v662 )
240241 - [Patch Changes](#patch-changes-60)
242+ - [v6.6.1](#v661)
243+ - [Patch Changes](#patch-changes-61)
241244 - [v6.6.0](#v660)
242245 - [What's Changed](#whats-changed-17)
243246 - [Minor Changes](#minor-changes-30)
244- - [Patch Changes](#patch-changes-61 )
247+ - [Patch Changes](#patch-changes-62 )
245248 - [v6.5.0](#v650)
246249 - [What's Changed](#whats-changed-18)
247250 - [Minor Changes](#minor-changes-31)
248- - [Patch Changes](#patch-changes-62)
249- - [v6.4.5](#v645)
250251 - [Patch Changes](#patch-changes-63)
251- - [v6.4.4 ](#v644 )
252+ - [v6.4.5 ](#v645 )
252253 - [Patch Changes](#patch-changes-64)
253- - [v6.4.3 ](#v643 )
254+ - [v6.4.4 ](#v644 )
254255 - [Patch Changes](#patch-changes-65)
255- - [v6.4.2 ](#v642 )
256+ - [v6.4.3 ](#v643 )
256257 - [Patch Changes](#patch-changes-66)
257- - [v6.4.1 ](#v641 )
258+ - [v6.4.2 ](#v642 )
258259 - [Patch Changes](#patch-changes-67)
260+ - [v6.4.1](#v641)
261+ - [Patch Changes](#patch-changes-68)
259262 - [v6.4.0](#v640)
260263 - [What's Changed](#whats-changed-19)
261264 - [Remix Data APIs](#remix-data-apis)
262- - [Patch Changes](#patch-changes-68 )
265+ - [Patch Changes](#patch-changes-69 )
263266 - [v6.3.0](#v630)
264267 - [Minor Changes](#minor-changes-32)
265268 - [v6.2.2](#v622)
266- - [Patch Changes](#patch-changes-69)
267- - [v6.2.1](#v621)
268269 - [Patch Changes](#patch-changes-70)
270+ - [v6.2.1](#v621)
271+ - [Patch Changes](#patch-changes-71)
269272 - [v6.2.0](#v620)
270273 - [Minor Changes](#minor-changes-33)
271- - [Patch Changes](#patch-changes-71)
272- - [v6.1.1](#v611)
273274 - [Patch Changes](#patch-changes-72)
275+ - [v6.1.1](#v611)
276+ - [Patch Changes](#patch-changes-73)
274277 - [v6.1.0](#v610)
275278 - [Minor Changes](#minor-changes-34)
276- - [Patch Changes](#patch-changes-73)
277- - [v6.0.2](#v602)
278279 - [Patch Changes](#patch-changes-74)
279- - [v6.0.1 ](#v601 )
280+ - [v6.0.2 ](#v602 )
280281 - [Patch Changes](#patch-changes-75)
282+ - [v6.0.1](#v601)
283+ - [Patch Changes](#patch-changes-76)
281284 - [v6.0.0](#v600)
282285
283286</details>
@@ -319,6 +322,28 @@ Date: YYYY-MM-DD
319322**Full Changelog**: [`v7.X.Y...v7.X.Y`](https://github.com/remix-run/react-router/compare/
[email protected] @7.X.Y)
320323-->
321324
325+ ## v7.5.2
326+
327+ Date: 2025-04-24
328+
329+ ### Patch Changes
330+
331+ - `react-router` - Adjust approach for Pre-rendering/SPA Mode via headers ([#13453](https://github.com/remix-run/react-router/pull/13453))
332+ - `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))
333+ - 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
334+ - This is a bit of an escape hatch - the recommended way to handle this is redirecting from a root route middleware
335+ - To use this functionality, you may return from a `.data` request wih a response as follows:
336+ - Set a 204 status code
337+ - Set an `X-Remix-Redirect: <new-location>` header
338+ - Optionally, set `X-Remix-Replace: true` or `X-Remix-Reload-Document: true` headers to replicate `replace()`/`redirectDocument()` functionality
339+ - ⚠️ 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
340+
341+ ### Unstable Changes
342+
343+ ⚠️ _[Unstable features](https://reactrouter.com/community/api-development-strategy#unstable-flags) are not recommended for production use_
344+
345+ **Full Changelog**: [`v7.5.1...v7.5.2`](https://github.com/remix-run/react-router/compare/
[email protected] @7.5.2)
346+
322347## v7.5.1
323348
324349Date: 2025-04-17
0 commit comments