npm react 19.3.0
19.3.0 (September 9, 2026)

4 hours ago

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

New React DOM Features

  • 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)
    • Added an onBrowserBailout option to the react-dom/server APIs to observe when a subtree defers to the browser (@gnoff #37193)

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)
  • Performance Track Fixes
    • Prevent crash when accessing $$typeof in 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)
  • Activity Fixes
    • Fix useSyncExternalStore missing 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)
  • 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 useDeferredValue getting stuck (@gaearon #36134)
  • Update useActionState error 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 .default export of a React.lazy as the canonical value (@sebmarkbage #34906)
  • Limit owner stacks to 10 frames (@eps1lon #34864)
  • Ensure useEffectEvent reads latest values in forwardRef and memo() components (@eps1lon #34831)

React DOM

React Server

React Server Components

Don't miss a new react release

NewReleases is sending notifications on new releases.