React 19 is stable, team directs devs towards frameworks – especially Next.js

React 19 is stable, team directs devs towards frameworks – especially Next.js

React 19 has been released, declared stable by the team a few days ago – and with additional features since the release candidate in April.

The big feature in React 19 is that server components are now in the main “Latest” channel and not the pre-release “Canary” channel. Server components are rendered ahead of time – either once at build time, or on each request via a web server.

Are React Server Components really ready for general use? The docs are carefully worded, stating that “while React Server Components in React 19 are stable and will not break between major versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.”

This distinction between general and framework use is particularly important for React, since developers are encouraged to use a framework. “It’s not hard to get an initial setup working, but there are a lot of subtleties involved in making an app that loads quickly even as it grows over time,” the docs explain.

Which framework? The docs specifically mention Next.js, Remix, Gatsby and Expo, but list only one for “bleeding-edge React” – namely Next.js, where “the team has agreed to collaborate with us.” Apparently server components still sit in the bleeding-edge category, and for data fetching with suspense – the React feature that stops a component from rendering while some asynchronous process completes – “the Next.js App Router is the most complete implementation,” we are told. Evidently the controversial special relationship between React and Vercel-sponsored Next.js still exists.

More new features

Two new APIs for pre-rendering improve on the existing renderToString function by waiting for all data to load before returning a static HTML stream. The functions are called prerender and prerenderToNodeStream. Although they are designed for streaming environments they do not stream content as it loads – this was already possible with renderToPipeableStream and renderToReadableStream. In both cases the docs note that the functions are normally called by frameworks and that “most of your components don’t need to import or use them.”

There are also improvements to suspense. Pre-warming in React 19 means that the temporary fallback content is rendered immediately, whereas before it would wait for other sibling components to render first.

Other new features in React 19 include Actions, the term for functions that use async transitions, and integration of stylesheets with React rendering, to address the complexity of managing stylesheets with the library.

React is widely used, though most often in the context of a framework – but there is pushback from the community regarding its distance from vanilla JavaScript, and the existence of many poorly performing React applications. “I hate writing code in it, I hate that it wants to control all your DOM, I hate how they’ve-invented HTML with JSX components and how the code now looks like PHP, as JS wasn’t annoying enough by itself,” lamented one dev. Others remark though that React solves problems. “React (and similar frameworks) make the code much more maintainable. You basically define your state and how that state should look like. You don’t manually change your UI, it just re-renders when your state changes. Compare it with the nightmare of JQuery,” observed another.