Architecture
#React 19#View Transitions#Trusted Types#Server Components

React 19.3: View Transitions and Fragment Refs Are Stable

React 19.3 shipped on 9 September 2026. View Transitions and Fragment Refs are stable, Trusted Types are supported, and Server Components can render Context directly.

4 min read
Share

What Shipped

React 19.3 landed on 9 September 2026. Two APIs that had been experimental since the previous year are now stable, and there are three smaller changes that matter more than the release notes suggest. This is what I actually changed in an application after reading the post, and what I deliberately left alone.


View Transitions Are Now a Component

The headline is that <ViewTransition> is stable. You wrap part of your UI in it, and when that subtree enters, exits, moves, or changes style as part of a transition, React animates it using the browser's View Transition API.

React picks the animation from how the tree changed: enter when the component is added, exit when it is removed, update when its children change, and share when a named transition is removed in one place and added in another. That last one is the interesting case, because it covers the list-to-detail pattern that previously needed a lot of hand-written measurement.

The constraint to internalise is this: updates that are not marked as transitions do not animate. State updates inside startTransition, a Suspense reveal, or an update from useDeferredValue will animate. An urgent state update will not, because urgent updates are meant to be reflected immediately.

That constraint is a feature. It stops you from writing animation that fights typing, and it means the first question for any candidate transition is not "what does it look like" but "is this update actually deferrable".


Fragment Refs

Fragment Refs are stable, which mostly means the awkward pattern of wrapping a group of elements in a container purely to get a handle on them can go away. If you have ever added a div that exists only to be measured or scrolled to, this is the release where that wrapper becomes unnecessary.


The Changes That Will Catch You Later

Three smaller items from the release are worth planning around.

  • Trusted Types support. React DOM now supports Trusted Types, which matters if you are enforcing a strict Content Security Policy. It is the difference between a CSP that is real and a CSP that is aspirational.
  • Context in Server Components. A <Context> can now be rendered directly inside a Server Component. That removes a class of provider plumbing that used to leak client code into the server tree.
  • browser(). A new React DOM export. Read the API reference rather than guessing from the name; the release notes list it under new React DOM features.

How I Adopted It

I did not add View Transitions everywhere. I added them at three boundaries where the interface previously felt abrupt: the Suspense boundary around route content, the list-to-detail transition on the blog index, and the open/close of a modal that used to pop.

Each one took the same shape. Confirm the update is inside a transition. Wrap the subtree. Give related elements the same name if they should share. Test with reduced motion enabled, because an animation library that ignores the prefers-reduced-motion setting is a bug, not a flourish.


Is It Worth Upgrading For

If you are on 19.x already, yes: the upgrade is small and the View Transition API is the first animation primitive in React that does not require you to own the mechanics of every transition.

If you are on 18, this is not on its own a reason to move. The reason to move is the Server Components work, and that is a bigger decision than a point release. Start there, and let the stable animation API arrive as a bonus rather than the motivation.

React 19View TransitionsTrusted TypesServer Components