React 19.3 adds browser() for client-only rendering
The new API gives React a standard way to skip server rendering for components that need the browser, while also reporting when that happens.
React 19.3 adds a new react-dom browser() API that gives client-only rendering an official name and a cleaner way to skip server-side rendering for components that depend on browser state. The release shipped on npm on September 9 and sits alongside stable View Transitions and Fragment Refs. In practice, a component can call use(browser()) inside a Client Component wrapped in Suspense, which makes it suspend on the server and render normally in the browser after hydration. The change also includes an onBrowserBailout callback and a reason argument so teams can track where SSR was bypassed, and it is already available in Canary even though the reference still labels browser() as Canary only. The capability had previously been handled with framework-specific escapes such as Next.js dynamic(..., { ssr: false }) and Astro client:only, but browser() brings the pattern into core React for any SSR stack.
Why it matters
For teams building SSR apps, client-only rendering no longer has to rely on framework-specific escape hatches. React now provides a built-in pattern that works in a Client Component with Suspense, and it adds hooks for tracking when server rendering is bypassed. That makes the boundary between server and browser rendering clearer across React stacks, even though the feature is still marked Canary.
Keep or strike?
Does this story matter, or is it hype? Mark it before you see what everyone else did.
Sources
- InfoQ