GitHub Releases
Effortlessly track new versions of open source projects
19.3.0 (September 9, 2026)
Below is a list of all new features, APIs, and bug fixes.
Read the React 19.3 release post for more information.
New React Features
<ViewTransition />: Adds<ViewTransition />andaddTransitionTypeAPIs to power View Transition animations in React (@sebmarkbage, @jackpope, @gaearon: #31975, #31987, #31996, #31999, #32001, #32002, #32028, #32029, #32031, #32034, #32038, #32041, #32050, #32090, #32105, #32254, #32379, #32422, #32462, #32540, #32545, #32585, #32599, #32611, #32612, #32617, #32651, #32653, #32656, #32664, #32699, #32723, #32734, #32751, #32752, #32760, #32761, #32764, #32772, #32790, #32819, #32820, #32822, #32833, #32849, #33094, #33191, #33200, #33206, #33293, #33330, #33331, #33332, #33357, #33362, #33433, #33576, #34374, #34450, #34481, #34500, #34502, #34510, #34511, #34539, #35567, #35564, #35485, #35380, #35063, #35060, #34676, #36917, #35337, #35520)- Fragment Refs: Add Refs to
<Fragment />to support composable platform behavior (@jackpope, @sebmarkbage, @eps1lon, @Dhakshin2007, @chirokas, @teamleaderleo, @fallintoplace: #32465, #32613, #32619, #32654, #32660, #32682, #32722, #32813, #32814, #33056, #33058, #33093, #34069, #34103, #34544, #34545, #37062, #37061, #37060, #36047, #36010, #35642, #35641, #35637, #35630, #34935, #37457, #37408, #37326, #37251, #37171, #37169, #37168, #37167, #37166, #37165, #37164, #37163, #37162, #37161, #37160, #37125, #37063)
New React DOM Features
browser(): a newreact-domAPI that returns a usable which errors during server rendering and resolves in the browser.use(browser())inside a<Suspense>boundary marks a subtree as browser-only without reporting a recoverable error (@gnoff: #37143, #37241)- Added an
onBrowserBailoutoption to thereact-dom/serverAPIs to observe when a subtree defers to the browser (@gnoff #37193)
- Added an
Notable changes
- Enable Trusted Types API integration (@rickhanlonii #35816)
- Transitions now render independently instead of being entangled into a single render, so a slow transition no longer holds up unrelated ones (@acdlite #37290)
- Added a DEV-only warning when a component appears to have been unblocked by calling
use()conditionally (@hoxyq, @eps1lon: #37104, #37203, #37491)
All Changes
React
- Fast Refresh Fixes
- Fix Fast Refresh to find and remount edits to components wrapped behind
lazy()(@sophiebits #36965) - Fix Fast Refresh so edits to a
memo()comparison function take effect (@sophiebits #36964) - Fix Fast Refresh crash when an edit changes the kind of a component's type (@sophiebits #36963)
- Unify hot reload type resolution for Fast Refresh (@sophiebits #36962)
- Fix Fast Refresh to remount correctly when an edit changes the component kind (@sophiebits #36950)
- Double invoke effects in StrictMode after Fast Refresh (@eps1lon #35962)
- Fix Fast Refresh to find and remount edits to components wrapped behind
- Performance Track Fixes
- Prevent crash when accessing
$$typeofin Performance Tracks (@eps1lon #35679) - Handle non-string function names in Performance Tracks (@eps1lon #35659)
- Use minus (
-) instead of en dash for removed props in Performance Tracks (@eps1lon #35649) - Handle arrays with bigints in deep objects in Performance Tracks (@eps1lon #35648)
- Don't enumerate typed array props in Performance Tracks in DEV (@UditDewan #36913)
- Bail out of diffing wide objects and arrays in Performance Tracks (@eps1lon #34742)
- Clear potentially large performance measures in DEV (@hoxyq #34803)
- Fix missing else branch for renders with no props change in Performance Tracks (@hoxyq #34837)
- Prevent crash when accessing
- Activity Fixes
- Fix
useSyncExternalStoremissing store mutations that happened while an Activity tree was hidden (@sophiebits #36947) - Hide portal contents when an Activity is hidden (@acdlite #35091)
- Prevent metadata hoisting in hidden
<Activity>trees (@ronnakamoto #34983) - Prevent errors thrown inside a hidden Activity from escaping to the visible UI (@acdlite #35074)
- Don't unhide a node if a direct parent Offscreen is still hidden (@sebmarkbage #34821)
- Don't show internal
<Offscreen>component in error messages (@rickhanlonii #35763)
- Fix
- Warn in DEV when a component appears to have been unblocked by a conditional
use()(@hoxyq, @eps1lon: #37104, #37203, #37491) - Render transitions independently instead of entangling them into a single render (@acdlite #37290)
- Fix hang when updating a dehydrated boundary inside a hidden tree (@gaearon #37135)
- Don't reacquire Host Singletons during dev effect validation (@gnoff #37113)
- Only remove properties from Host Singletons on release (@gnoff #37112)
- Don't invoke effects on moved children in StrictMode (@sophiebits #36948)
- Throw a clearer error when a rejected Promise is incorrectly instrumented (@eps1lon #36328)
- Fix context propagation into Suspense fallbacks (@acdlite #36160)
- Fix context propagation through suspended Suspense boundaries (@acdlite #35839)
- Fix
useDeferredValuegetting stuck (@gaearon #36134) - Update
useActionStateerror message to say "action state" instead of "form state" (@rickhanlonii #35790) - Don't warn when rendering data block scripts (@eps1lon #35953)
- Treat fibers with alternates as mounted in
getNearestMountedFiber(@sebmarkbage #35578) - Always instrument the lazy initializer thenable (@gnoff #35521)
- Annotate cascading updates for DevTools performance tracks in DEV (@huntie #34961)
- Resolve the
.defaultexport of aReact.lazyas the canonical value (@sebmarkbage #34906) - Limit owner stacks to 10 frames (@eps1lon #34864)
- Ensure
useEffectEventreads latest values inforwardRefandmemo()components (@eps1lon #34831)
React DOM
- Copy
sourceonto the synthetictoggleevent (@lazerg #37389) - Update HTML parser rules for the new
<select>parser (@josepharhar #34804) - Update
defaultValuefortype="number"inputs to match other input types (@sophiebits #36980) - Avoid setting
innerHTMLwhen it hasn't changed (@sophiebits #36949) - Forward the
nonceoption inReactDOM.preloadModule()(@UditDewan #36851) - Support
fetchPriorityfor module resources (@TheAlexLichter #36835) - Track stylesheet preloads when explicitly preloaded to avoid unnecessary suspension (@gnoff #36386)
- Suggest correct casing for the misspelled
credentiallessiframe attribute (@vmx906 #36322) - Add
credentiallessas a recognized boolean attribute for iframes (@vmx906 #36148) - Prevent reentrant
finishedTaskfrom callingcompleteAllmultiple times (@gnoff #36287) - Update the CSS shorthand property list (@kidonng #35636)
- Support the
maskTypeSVG prop (@sleitor #35921) - Add support for
onFullscreenChangeandonFullscreenErrorevents (@chirokas #34621) - Include
submitterinsubmitevents (@eps1lon #35590) - Fire
onResetwhen automatically resetting forms (@eps1lon #35176) - Use the
FormDatasubmitterparameter (@jenseng #29028) - Fix form status reset when component state is updated (@eps1lon #34075)
- Batch updates from
resizeevents until the next frame (@eps1lon #35117)
React Server
- Add
nonceto rendered import maps (@mattcosta7 #37339) - Add an
onBrowserBailoutoption to observe subtrees that defer to the browser (@gnoff #37193) - Stop the caller's signal from retaining a finished render (@unstubbable #37315)
- Construct the render lifetime controller only when it is needed (@unstubbable #37357)
- Fix
react-dom/serverhanging on Deno (@fraidev #35235) - Extend stack overflow recovery to retries in SSR (@jackpope #36977)
- Fix false-positive hydration mismatch on
nonceattributes (@MaxwellCohen #37030) - Guard shell-error callbacks instead of nulling them out on the request (@eps1lon #36916)
- Stop firing
onAllReadyafter the shell errored (@eps1lon #36903) - Treat an incomplete tree as an error during error recovery (@acdlite #36911)
- Fix non-script
modulepreloadtracking (@fallintoplace #36564) - Finalize postponed
nextSegmentIdafter the prelude flush (@gaojude #36779) - Preserve
referrerPolicyin image preload headers (@ulises-jeremias #36803) - Allow pending work to specialize abort reasons (@gnoff #36586)
- Abort tasks that suspend after aborting during render (@gnoff #36585)
- Finish abort in a scheduled task (@gnoff #36580)
- Fix aborts during resumed rendering (@gnoff #36584)
- Track abort state on the request (@gnoff #36583)
- Model external work scheduling explicitly in the fb bundle (@gnoff #36576)
- Continue reporting aborted task errors after a fatal abort (@gnoff #36575)
- Disallow abort reentrancy (@gnoff #36574)
- Stop transpiling computed property names (@eps1lon #36542)
- Fix crash when capturing the callsite of a stalled
use()of a rejected Flight chunk (@lubieowoce #36544) - Double invoke effects in Strict Mode during hydration (@eps1lon #35961)
- Add additional task reentrancy protections in Fizz (@gnoff #36291)
- Don't outline Suspense boundaries with suspensey CSS during shell flush (@gnoff #35824)
- Push a stalled
use()to the owner stack and debug task (@eps1lon #35226) - Fix
useIdtracking on replay (@gnoff #35518) - Correctly handle replaying when hydrating (@gnoff #35494)
- Simplify the
createSuspenseBoundarypath (@sebmarkbage #35087) - Unify preamble-only fields to save a field on Suspense boundaries (@sebmarkbage #35068)
- Unify prerender-only fields to save a field on Suspense boundaries (@sebmarkbage #35067)
- Push halted awaits to the owner stack for late-arriving I/O info (@unstubbable #35019)
- Include all Node.js APIs in the Bun entrypoint for
react-dom/server(@RiskyMH #34193) - Detach a Suspense boundary after flushing its segment (@gnoff #34694)
React Server Components
- Keep an element pending while a referenced row is resolving (@unstubbable #37542)
- Fix
RangeErrorfrom exponential debug info growth (@unstubbable #37481) - Abort the cache signal when debug objects are retained (@unstubbable #37342)
- Transfer key validation of lazy nodes when they are unwrapped (@unstubbable #37258)
- Add
pending_weakto the Flight thenable protocol (@acdlite #37154) - Outline and dedupe repeated strings (@gaearon #37147)
- Port Reply Server traversal guards to the Flight Client (@eps1lon #37144)
- Define Flight chunk
.thenwithObject.defineProperty(@eps1lon #37109) - Support Turbopack's experimental array format for chunks (@sampoder #37095)
- Limit fake JSX call site stacks to 10 frames (@timneutkens #37086)
- Improve performance when decoding Flight replies (@gnoff #37090)
- Recognize Node 22+ V8 frames for
Promisestatics in debug info (@gaearon #36969) - Tailor the warning for binary data serialized through
toJSON(NodeBuffer) (@unstubbable #36873) - Resolve models before
JSON.stringifyfor faster serialization (@mhart #36795) - Prune debug info when chunks error (@gnoff #36782)
- Avoid main-thread stalls from large debug strings (@unstubbable #36570)
- Fix stranded row content under Node stream backpressure (@unstubbable #36516)
- Fix dropped
FormDataentries indecodeReplyFromBusboy(@unstubbable #36468) - Harden types and improve performance of Flight replies (@eps1lon #36425)
- Add more cycle protections to Flight replies (@eps1lon #36236)
- Transport
AggregateError.errors(@eps1lon #36156) - Bail out early when a backing entry for
Blobdeserialization is not aBlob(@eps1lon #36055) - Clear chunk reason after successful module initialization (@unstubbable #36024)
- Add support for transporting
Error.cause(@eps1lon #35810) - Walk parsed JSON instead of using a reviver for faster RSC payload parsing (@timneutkens #35776)
- Skip
transferReferencedDebugInfoduring debug info resolution (@unstubbable #35795) - Add
unstable_allowPartialStreamoption to Flight Client (@unstubbable #35731) - Fix
encodeReplyfor JSX with temporary references (@unstubbable #35730) - Fix debug channel flag in Node.js
renderToPipeableStream(@feedthejim #35724) - Fix stack overflow in
visitAsyncNodewith deep async chains (@unstubbable #35612) - Allow Server Components to render context providers from client modules (@rickhanlonii #35675)
- Allow overriding
request.timeOriginviaoptions.startTime(@lubieowoce #35598) - Warn once if
evalis disabled in the dev environment (@eps1lon #35661) - Restore original function name in dev server callstacks served with
unsafe-eval(@eps1lon #35650) - Fix
react-markuptypes for server references (@eps1lon #35634) - Add more DoS mitigations to Flight replies and harden Flight (@unstubbable #35632)
- Allow cyclic references to be serialized when unwrapping lazy elements (@unstubbable #35471)
- Improve cyclic thenable detection in Flight reply server (@cvan20191 #35369)
- Add extra loop protection to Flight reply server (@sebmarkbage #35351)
- Patch Promise cycles and
toStringon Server Functions (@sebmarkbage #35345) - Move
react-server-dom-webpack/*.unbundledto privatereact-server-dom-unbundled(@eps1lon #35290) - Never parse
thenfunctions in Flight replies (@sebmarkbage #35289) - Patch Flight reply server with fixes from Flight Client (@sebmarkbage #35277)
- Complete the list of Node.js internal Promise awaits (@eps1lon #35161)
- Reduce risk of maximum call stack exceeded when emitting async sequences (@eps1lon #35159)
- Fix pending chunks count for streams and async iterables in DEV (@unstubbable #35143)
- Fix broken byte stream parsing caused by buffer detachment (@unstubbable #35127)
- Fix
hasReadableflag in Node.js clients' debug channel (@unstubbable #35039) - Fix debug info filtering to include later resolved I/O (@unstubbable #35036)
- Cache the value when visiting the same I/O or Promise along different paths (@sebmarkbage #35005)
- Clone subsequent I/O nodes when resolved more than once (@sebmarkbage #35003)
- Fix hang after resolving cyclic references (@unstubbable #34988)
- Allow passing DEV-only
startTimeas an option (@sebmarkbage #34912) - Ignore bound-anonymous-fn resources as they're not considered I/O (@sebmarkbage #34911)
- Fix detached
ArrayBuffererror when streaming typed arrays (@unstubbable #34849) - Exclude RSC stream if the stream resolves in a task (@sebmarkbage #34838)
- Forward the current environment when forwarding I/O entries (@sebmarkbage #34836)
- Look for moved debug info when logging component performance track (@sebmarkbage #34839)
- Respect
displayNameof Promise instances on the server (@sebmarkbage #34825) - Avoid unnecessary indirection when serializing debug info (@unstubbable #34797)
- Fix preload
asattribute for stylesheets (@unstubbable #34760) - Don't serialize
toJSONin debug path and omit wide arrays (@sebmarkbage #34759) - Add support for
<Activity>(@eps1lon #34697)
19.2.8 (July 21st, 2026)
React Server Components
- Performance improvements when decoding (#37087 by @eps1lon)
19.1.9 (July 21st, 2026)
React Server Components
- Performance improvements when decoding (#37088 by @eps1lon)
19.0.8 (July 21st, 2026)
React Server Components
- Performance improvements when decoding (#37089 by @eps1lon)
19.2.7 (June 1st, 2026)
React Server Components
- Fixed missing
FormDataentries in Server Actions which regressed in 19.2.6 (#36566 by @unstubbable)
19.1.8 (June 1st, 2026)
React Server Components
- Fixed missing
FormDataentries in Server Actions which regressed in 19.1.7 (#36567 by @unstubbable)
19.0.7 (June 1st, 2026)
React Server Components
- Fixed missing
FormDataentries in Server Actions which regressed in 19.0.6 (#36568 by @unstubbable)
19.2.6 (May 6th, 2026)
React Server Components
- Type hardening and performance improvements (#36425 by @eps1lon and @unstubbable)
19.1.7 (May 6th, 2026)
React Server Components
- Type hardening and performance improvements (#36425 by @eps1lon and @unstubbable)
19.0.6 (May 6th, 2026)
React Server Components
- Type hardening and performance improvements (#36425 by @eps1lon and @unstubbable)
[email protected] (April 16, 2026)
This release adds ESLint v10 support, improves performance by skipping compilation for non-React files, and includes compiler lint improvements including better set-state-in-effect detection, improved ref validation, and more helpful error reporting.
- Add ESLint v10 support. (@azat-io in #35720)
- Skip compilation for non-React files to improve performance. (@josephsavona in #35589)
- Fix exhaustive deps bug with Flow type casting. (@jorge-cab in #35691)
- Fix
useEffectEventchecks in component syntax. (@jbrown215 in #35041) - Improved
set-state-in-effectvalidation with fewer false negatives. (@jorge-cab in #35134, @josephsavona in #35147, @jackpope in #35214, @chesnokov-tony in #35419, @jsleitor in #36107) - Improved ref validation for non-mutating functions and event handler props. (@josephsavona in #35893, @kolvian in #35062)
- Compiler now reports all errors instead of stopping at the first. (@josephsavona in #35873–#35884)
- Improved source locations and error display in compiler diagnostics. (@nathanmarks in #35348, @josephsavona in #34963)
19.2.5 (April 8th, 2026)
React Server Components
- Add more cycle protections (#36236 by @eps1lon and @unstubbable)
19.1.6 (April 8th, 2026)
React Server Components
- Add more cycle protections (#36236 by @eps1lon and @unstubbable)
19.0.5 (April 8th, 2026)
React Server Components
- Add more cycle protections (#36236 by @eps1lon and @unstubbable)
19.2.4 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
19.1.5 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
19.0.4 (January 26th, 2026)
React Server Components
- Add more DoS mitigations to Server Actions, and harden Server Components (#35632 by @gnoff, @lubieowoce, @sebmarkbage, @unstubbable)
19.1.4 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
19.0.3 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
19.2.3 (December 11th, 2025)
React Server Components
- Add extra loop protection to React Server Functions (@sebmarkbage #35351)
19.2.2 (December 11th, 2025)
React Server Components
- Move
react-server-dom-webpack/*.unbundledto privatereact-server-dom-unbundled(@eps1lon https://github.com/facebook/react/pull/35290) - Patch Promise cycles and toString on Server Functions (@sebmarkbage, @unstubbable #35289, #35345)
19.2.1 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
19.1.2 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
19.0.1 (December 3rd, 2025)
React Server Components
- Bring React Server Component fixes to Server Actions (@sebmarkbage #35277)
19.2.0 (Oct 1, 2025)
Below is a list of all new features, APIs, and bug fixes.
Read the React 19.2 release post for more information.
New React Features
<Activity>: A new API to hide and restore the UI and internal state of its children.useEffectEventis a React Hook that lets you extract non-reactive logic into an Effect Event.cacheSignal(for RSCs) lets your know when thecache()lifetime is over.- React Performance tracks appear on the Performance panel’s timeline in your browser developer tools
New React DOM Features
- Added resume APIs for partial pre-rendering with Web Streams:
resume: to resume a prerender to a stream.resumeAndPrerender: to resume a prerender to HTML.
- Added resume APIs for partial pre-rendering with Node Streams:
resumeToPipeableStream: to resume a prerender to a stream.resumeAndPrerenderToNodeStream: to resume a prerender to HTML.
- Updated
prerenderAPIs to return apostponedstate that can be passed to theresumeAPIs.
Notable changes
- React DOM now batches suspense boundary reveals, matching the behavior of client side rendering. This change is especially noticeable when animating the reveal of Suspense boundaries e.g. with the upcoming
<ViewTransition>Component. React will batch as much reveals as possible before the first paint while trying to hit popular first-contentful paint metrics. - Add Node Web Streams (
prerender,renderToReadableStream) to server-side-rendering APIs for Node.js - Use underscore instead of
:IDs generated by useId
All Changes
React
<Activity />was developed over many years, starting beforeClassComponent.setState(@acdlite @sebmarkbage and many others)- Stringify context as "SomeContext" instead of "SomeContext.Provider" (@kassens #33507)
- Include stack of cause of React instrumentation errors with
%oplaceholder (@eps1lon #34198) - Fix infinite
useDeferredValueloop in popstate event (@acdlite #32821) - Fix a bug when an initial value was passed to
useDeferredValue(@acdlite #34376) - Fix a crash when submitting forms with Client Actions (@sebmarkbage #33055)
- Hide/unhide the content of dehydrated suspense boundaries if they resuspend (@sebmarkbage #32900)
- Avoid stack overflow on wide trees during Hot Reload (@sophiebits #34145)
- Improve Owner and Component stacks in various places (@sebmarkbage, @eps1lon: #33629, #33724, #32735, #33723)
- Add
cacheSignal(@sebmarkbage #33557)
React DOM
- Block on Suspensey Fonts during reveal of server-side-rendered content (@sebmarkbage #33342)
- Use underscore instead of
:for IDs generated byuseId(@sebmarkbage, @eps1lon: #32001, https://github.com/facebook/react/pull/33342#33099, #33422) - Stop warning when ARIA 1.3 attributes are used (@Abdul-Omira #34264)
- Allow
nonceto be used on hoistable styles (@Andarist #32461) - Warn for using a React owned node as a Container if it also has text content (@sebmarkbage #32774)
- s/HTML/text for for error messages if text hydration mismatches (@rickhanlonii #32763)
- Fix a bug with
React.useinsideReact.lazy-ed Component (@hi-ogawa #33941) - Enable the
progressiveChunkSizeoption for server-side-rendering APIs (@sebmarkbage #33027) - Fix a bug with deeply nested Suspense inside Suspense fallback when server-side-rendering (@gnoff #33467)
- Avoid hanging when suspending after aborting while rendering (@gnoff #34192)
- Add Node Web Streams to server-side-rendering APIs for Node.js (@sebmarkbage #33475)
React Server Components
- Preload
<img>and<link>using hints before they're rendered (@sebmarkbage #34604) - Log error if production elements are rendered during development (@eps1lon #34189)
- Fix a bug when returning a Temporary reference (e.g. a Client Reference) from Server Functions (@sebmarkbage #34084, @denk0403 #33761)
- Pass line/column to
filterStackFrame(@eps1lon #33707) - Support Async Modules in Turbopack Server References (@lubieowoce #34531)
- Add support for .mjs file extension in Webpack (@jennyscript #33028)
- Fix a wrong missing key warning (@unstubbable #34350)
- Make console log resolve in predictable order (@sebmarkbage #33665)
React Reconciler
- createContainer and createHydrationContainer had their parameter order adjusted after
on*handlers to account for upcoming experimental APIs
[email protected]
Note: Version 6.0.0 was mistakenly released and immediately deprecated and untagged on npm. This is the first official 6.x major release and includes breaking changes.
- Breaking: Require Node.js 18 or newer. (@michaelfaith in #32458)
- Breaking: Flat config is now the default
recommendedpreset. Legacy config moved torecommended-legacy. (@michaelfaith in #32457) - New Violations: Disallow calling
usewithin try/catch blocks. (@poteto in #34040) - New Violations: Disallow calling
useEffectEventfunctions in arbitrary closures. (@jbrown215 in #33544) - Handle
React.useEffectin addition touseEffectin rules-of-hooks. (@Ayc0 in #34076) - Added
react-hookssettings config option that to acceptadditionalEffectHooksthat are used across exhaustive-deps and rules-of-hooks rules. (@jbrown215) in #34497
19.1.1 (July 28, 2025)
React
- Fixed Owner Stacks to work with ES2015 function.name semantics (#33680 by @hoxyq)
19.1.0 (March 28, 2025)
Owner Stack
An Owner Stack is a string representing the components that are directly responsible for rendering a particular component. You can log Owner Stacks when debugging or use Owner Stacks to enhance error overlays or other development tools. Owner Stacks are only available in development builds. Component Stacks in production are unchanged.
- An Owner Stack is a development-only stack trace that helps identify which components are responsible for rendering a particular component. An Owner Stack is distinct from a Component Stacks, which shows the hierarchy of components leading to an error.
- The captureOwnerStack API is only available in development mode and returns a Owner Stack, if available. The API can be used to enhance error overlays or log component relationships when debugging. #29923, #32353, #30306, #32538, #32529, #32538
React
- Enhanced support for Suspense boundaries to be used anywhere, including the client, server, and during hydration. #32069, #32163, #32224, #32252
- Reduced unnecessary client rendering through improved hydration scheduling #31751
- Increased priority of client rendered Suspense boundaries #31776
- Fixed frozen fallback states by rendering unfinished Suspense boundaries on the client. #31620
- Reduced garbage collection pressure by improving Suspense boundary retries. #31667
- Fixed erroneous “Waiting for Paint” log when the passive effect phase was not delayed #31526
- Fixed a regression causing key warnings for flattened positional children in development mode. #32117
- Updated
useIdto use valid CSS selectors, changing format from:r123:to«r123». #32001 - Added a dev-only warning for null/undefined created in useEffect, useInsertionEffect, and useLayoutEffect. #32355
- Fixed a bug where dev-only methods were exported in production builds. React.act is no longer available in production builds. #32200
- Improved consistency across prod and dev to improve compatibility with Google Closure Complier and bindings #31808
- Improve passive effect scheduling for consistent task yielding. #31785
- Fixed asserts in React Native when passChildrenWhenCloningPersistedNodes is enabled for OffscreenComponent rendering. #32528
- Fixed component name resolution for Portal #32640
- Added support for beforetoggle and toggle events on the dialog element. #32479 #32479
React DOM
- Fixed double warning when the
hrefattribute is an empty string #31783 - Fixed an edge case where
getHoistableRoot()didn’t work properly when the container was a Document #32321 - Removed support for using HTML comments (e.g.
<!-- -->) as a DOM container. #32250 - Added support for
<script>and<template>tags to be nested within<select>tags. #31837 - Fixed responsive images to be preloaded as HTML instead of headers #32445
use-sync-external-store
- Added
exportsfield topackage.jsonforuse-sync-external-storeto support various entrypoints. #25231
React Server Components
- Added
unstable_prerender, a new experimental API for prerendering React Server Components on the server #31724 - Fixed an issue where streams would hang when receiving new chunks after a global error #31840, #31851
- Fixed an issue where pending chunks were counted twice. #31833
- Added support for streaming in edge environments #31852
- Added support for sending custom error names from a server so that they are available in the client for console replaying. #32116
- Updated the server component wire format to remove IDs for hints and console.log because they have no return value #31671
- Exposed
registerServerReferencein client builds to handle server references in different environments. #32534 - Added react-server-dom-parcel package which integrates Server Components with the Parcel bundler #31725, #32132, #31799, #32294, #31741