React is a JavaScript library for building user interfaces.
9 Sept 2026 · Newest first
Last checked
Checking sources…
Showing 1 of 1 releases. Full release notes.
Signals highlight changes worth reviewing. They cannot determine whether your application is affected.
Use minus (
-) instead of en dash for removed props in Performance Tracks (@eps1lon #35649)
Transitions now render independently instead of being entangled into a single render, so a slow transition no longer holds up unrelated ones (@acdlite #37290)
Below is a list of all new features, APIs, and bug fixes.
Read the React 19.3 release post for more information.
<ViewTransition />: Adds <ViewTransition /> and addTransitionType APIs 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 /> 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, , , , , , , , , , , , , , , )browser(): a new react-dom API 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)
onBrowserBailout option to the react-dom/server APIs to observe when a subtree defers to the browser (@gnoff #37193)use() conditionally (@hoxyq, @eps1lon: #37104, #37203, #37491)lazy() (@sophiebits #36965)memo() comparison function take effect (@sophiebits #36964)$$typeof in Performance Tracks (@eps1lon #35679)-) instead of en dash for removed props in Performance Tracks (@eps1lon #35649)source onto the synthetic toggle event (@lazerg #37389)<select> parser (@josepharhar #34804)defaultValue for type="number" inputs to match other input types (@sophiebits #36980)innerHTML when it hasn't changed (@sophiebits #36949)nonce option in ReactDOM.preloadModule() (@UditDewan #36851)fetchPriority for module resources (@TheAlexLichter #36835)credentialless iframe attribute (@vmx906 #36322)credentialless as a recognized boolean attribute for iframes (@vmx906 #36148)finishedTask from calling completeAll multiple times (@gnoff #36287)maskType SVG prop (@sleitor #35921)onFullscreenChange and onFullscreenError events (@chirokas #34621)submitter in submit events (@eps1lon #35590)nonce to rendered import maps (@mattcosta7 #37339)onBrowserBailout option to observe subtrees that defer to the browser (@gnoff #37193)react-dom/server hanging on Deno (@fraidev #35235)nonce attributes (@MaxwellCohen #37030)onAllReady after the shell errored (@eps1lon #36903)modulepreload tracking (@fallintoplace #36564)nextSegmentId after the prelude flush (@gaojude #36779)referrerPolicy in image preload headers (@ulises-jeremias #36803)RangeError from exponential debug info growth (@unstubbable #37481)pending_weak to the Flight thenable protocol (@acdlite #37154).then with Object.defineProperty (@eps1lon #37109)Promise statics in debug info (@gaearon #36969)toJSON (Node Buffer) (@unstubbable #36873)JSON.stringify for faster serialization (@mhart #36795)useSyncExternalStore<Activity> trees (@ronnakamoto #34983)<Offscreen> component in error messages (@rickhanlonii #35763)use() (@hoxyq, @eps1lon: #37104, #37203, #37491)useDeferredValue getting stuck (@gaearon #36134)useActionState error message to say "action state" instead of "form state" (@rickhanlonii #35790)getNearestMountedFiber (@sebmarkbage #35578).default export of a React.lazy as the canonical value (@sebmarkbage #34906)useEffectEvent reads latest values in forwardRef and memo() components (@eps1lon #34831)onReset when automatically resetting forms (@eps1lon #35176)FormData submitter parameter (@jenseng #29028)resize events until the next frame (@eps1lon #35117)use() of a rejected Flight chunk (@lubieowoce #36544)use() to the owner stack and debug task (@eps1lon #35226)useId tracking on replay (@gnoff #35518)createSuspenseBoundary path (@sebmarkbage #35087)react-dom/server (@RiskyMH #34193)FormData entries in decodeReplyFromBusboy (@unstubbable #36468)AggregateError.errors (@eps1lon #36156)Blob deserialization is not a Blob (@eps1lon #36055)Error.cause (@eps1lon #35810)transferReferencedDebugInfo during debug info resolution (@unstubbable #35795)unstable_allowPartialStream option to Flight Client (@unstubbable #35731)encodeReply for JSX with temporary references (@unstubbable #35730)renderToPipeableStream (@feedthejim #35724)visitAsyncNode with deep async chains (@unstubbable #35612)request.timeOrigin via options.startTime (@lubieowoce #35598)eval is disabled in the dev environment (@eps1lon #35661)unsafe-eval (@eps1lon #35650)react-markup types for server references (@eps1lon #35634)toString on Server Functions (@sebmarkbage #35345)react-server-dom-webpack/*.unbundled to private react-server-dom-unbundled (@eps1lon #35290)then functions in Flight replies (@sebmarkbage #35289)hasReadable flag in Node.js clients' debug channel (@unstubbable #35039)startTime as an option (@sebmarkbage #34912)ArrayBuffer error when streaming typed arrays (@unstubbable #34849)displayName of Promise instances on the server (@sebmarkbage #34825)as attribute for stylesheets (@unstubbable #34760)toJSON in debug path and omit wide arrays (@sebmarkbage #34759)<Activity> (@eps1lon #34697)