React 19.3 Makes ViewTransition and Fragment Refs Stable, Adds use(browser()) and Trusted Types Support
React 19.3, released September 9, stabilizes the ViewTransition component and Fragment Refs and adds a browser() API for opting components out of server rendering.
Overview
The React team published React 19.3 on September 9, 2026, announcing in its release post that the version is “now available on npm.” The release is dated September 9, 2026 on the GitHub release page. Its headline change is that two APIs first shown as experimental, the <ViewTransition> component and Fragment Refs, are now stable, according to the React Blog.
What Shipped
View Transitions
The React Blog says the <ViewTransition> component lets developers animate elements as they enter, exit, move, or resize using the browser’s View Transition API. React picks among four animation kinds, enter, exit, update and share, based on how the tree changed, and by default it animates with a cross-fade. A companion addTransitionType function lets code attach the cause of an update, such as moving a carousel forward or backward, so different animations can be chosen for the same resulting state.
The component’s reference page says only updates wrapped in startTransition, a <Suspense> reveal, or useDeferredValue activate a ViewTransition. The React Blog notes that updates not marked as Transitions do not trigger animations, and that <ViewTransition> currently works only in the DOM, with React Native and other platform support still being worked on. The reference page also advises checking the prefers-reduced-motion media query to respect user preferences.
Fragment Refs
Per the React Blog, a ref can now be passed directly to a <Fragment>, yielding a FragmentInstance that operates on the fragment’s DOM children as a group without changing the DOM structure. The post lists methods for managing events (addEventListener, removeEventListener, dispatchEvent), moving focus (focus, focusLast, blur), connecting an IntersectionObserver or ResizeObserver (observeUsing, unobserveUsing), and measuring or scrolling (getClientRects, getRootNode, compareDocumentPosition, scrollIntoView).
browser() and Server Rendering
The React Blog says a component can call use(browser()) to opt out of server-side rendering. On the server this triggers Suspense, so the nearest boundary’s fallback appears in the HTML, while on the client it does not suspend. The GitHub release notes describe browser() as a new react-dom API that errors during server rendering and resolves in the browser, and also list an onBrowserBailout option for react-dom/server APIs to observe browser-deferred subtrees.
Trusted Types and Server Components
According to the React Blog, React 19.3 integrates with the browser Trusted Types API, a security feature intended to help prevent DOM-based XSS attacks. Previously React coerced values to strings before passing them to DOM APIs, which turned Trusted Types objects back into plain strings the browser would reject; React now passes them through without coercion. The same post says Server Components can now import and render Context directly from a 'use client' module without a wrapper Provider component.
Other Changes
The React Blog changelog says React now renders Transitions independently instead of entangling them into a single render, so a slow Transition no longer holds up unrelated ones. It also double-invokes Effects in Strict Mode during hydration to match client-rendered roots, and fixes a <ViewTransition> crash in Mobile Safari. The GitHub release notes add a development-only warning for incorrect conditional use of use().
What We Don’t Know
The sources reviewed do not report adoption figures, benchmarks, or the timeline for React Native support of <ViewTransition>. They also do not say which downstream frameworks plan to adopt the new APIs, or when.