This page covers the newest changes on top of React 19 — released through late 2025 and into 2026.
React Compiler v1.0 (stable since October 2025)
The React Compiler is a build-time tool that automatically memoizes your components and values — it analyzes your code and inserts the equivalent of useMemo, useCallback, and React.memo for you, following the Rules of React. This means most components no longer need manual memoization at all.
npm install babel-plugin-react-compiler
// babel.config.js / vite.config.js plugin setup
module.exports = {
plugins: [
['babel-plugin-react-compiler', {}],
],
};
// Before the compiler, you'd write:
const sorted = useMemo(() => students.sort((a, b) => b.cgpa - a.cgpa), [students]);
const handleClick = useCallback(() => onSelect(id), [id, onSelect]);
// With React Compiler enabled, you can just write plain code —
// the compiler inserts the memoization automatically at build time:
const sorted = students.sort((a, b) => b.cgpa - a.cgpa);
const handleClick = () => onSelect(id);
The compiler ships with an ESLint plugin (eslint-plugin-react-hooks v5+) that flags code violating the Rules of React so the compiler can safely optimize it. It can be adopted incrementally, file by file or component by component.
React 19.2 (released October 2025)
<Activity>— a new component that lets you hide part of the UI (and keep its state) instead of unmounting it, useful for tab switching, pre-rendering hidden panels, or keeping a background view "warm."
import { Activity } from 'react';
function App({ activeTab }) {
return (
<>
<Activity mode={activeTab === 'chat' ? 'visible' : 'hidden'}>
<ChatPanel />
</Activity>
<Activity mode={activeTab === 'files' ? 'visible' : 'hidden'}>
<FilesPanel />
</Activity>
</>
);
}
useEffectEvent— extracts non-reactive logic out of an Effect so it doesn't need to be in the dependency array, fixing a long-standing pain point withuseEffectdependencies.
import { useEffectEvent, useEffect } from 'react';
function ChatRoom({ roomId, theme }) {
const onConnected = useEffectEvent(() => {
showNotification('Connected!', theme); // always reads the latest theme
});
useEffect(() => {
const connection = createConnection(roomId);
connection.on('connected', onConnected);
connection.connect();
return () => connection.disconnect();
}, [roomId]); // theme is NOT needed here anymore
}
cacheSignal— for React Server Components, lets server code know when acache()lifetime has ended, so in-flight work tied to that cache can be cancelled.- React Performance Tracks — React now emits custom tracks into the browser's own Performance panel (Chrome DevTools), making it easier to see renders, effects, and Suspense boundaries on the same timeline as native browser work.
Governance update: The React Foundation
In October 2025, the React team announced the React Foundation, and in February 2026 it was formally launched under the Linux Foundation — moving React's governance from being solely Meta-controlled to a neutral, multi-company foundation. This mirrors what happened with other major open-source projects (like Kubernetes and Node.js) as they matured.
Staying current
Because React ships incremental releases fairly often, always check the official changelog before upgrading a production app:
- react.dev/blog — official announcements
- github.com/facebook/react/blob/main/CHANGELOG.md — full version history