█

Released October 2025 · 3 versions in 2024–2025
scroll
// feature-matrix.tsx

Version × Capability

Every React feature across v17, v18, and v19. Teal = supported, yellow = partial, dark = absent.

Supported
Partial / Deprecated
Absent / Removed
Feature
v17.x2020
v18.x2022
v19.x2024–25
Architecture
Server ComponentsStable in 19.0
—
~
Concurrent Rendering
—
Suspense SSR
—
Suspense (all phases)Full in 19.1
—
~
Performance
Automatic Batching
—
Hooks
useTransition
—
useDeferredValue
—
useIdPrefix updated in 19.1
—
useFormStatusNew in 19.0
—
—
useActionStateNew in 19.0
—
—
useOptimisticNew in 19.0
—
—
API
use() APIRead promises in render
—
—
Actions (async)
—
—
ref as propNo forwardRef needed
—
—
forwardRefDeprecated in 19
~
Document Metadata<title>, <meta> in tree
—
—
Resource Preloadingpreinit, preload APIs
—
—
DevTools
Owner Stack DebugNew in 19.1
—
—
Legacy
PropTypes checksRemoved in 19.0
~
—
Legacy ContextRemoved in 19.0
~
—
String RefsRemoved in 19.0
~
—
defaultProps (fn)Use ES6 defaults
~
—
// breaking-changes.diff

Breaking Changes & New APIs

Inline migration diffs for every removal, deprecation, and new hook in React 19.x.

v19.0⚠ breaking

PropTypes removed from React package

Deprecated since v15.5 (2017). PropTypes checks are fully removed. Using them will be silently ignored.

migration.diff
// BEFORE: React 18
−import PropTypes from 'prop-types';
−MyComponent.propTypes = {
− name: PropTypes.string.isRequired,
−};
// AFTER: React 19 — use TypeScript
+interface MyComponentProps {
+ name: string;
+}
+function MyComponent({ name }: MyComponentProps) {}
codemodnpx types-react-codemod@latest preset-19 ./src
v19.0+ new

ref is now a prop — forwardRef deprecated

Function components can now access ref as a regular prop. forwardRef is deprecated and will be removed in a future version.

migration.diff
// BEFORE: React 18
−import { forwardRef } from 'react';
−const Input = forwardRef<HTMLInputElement, Props>(
− (props, ref) => <input ref={ref} {...props} />,
−);
// AFTER: React 19
+function Input({ ref, ...props }: Props & { ref?: Ref<HTMLInputElement> }) {
+ return <input ref={ref} {...props} />;
+}
v19.0⚠ breaking

Legacy Context API removed

contextTypes and getChildContext (deprecated in v16.6, 2018) are fully removed. Migrate to createContext.

migration.diff
// BEFORE: Legacy Context (React 17/18)
−class Parent extends Component {
− getChildContext() { return { theme: "dark" }; }
− static childContextTypes = { theme: PropTypes.string };
−}
// AFTER: Modern Context (React 19)
+const ThemeContext = createContext("light");
+function Parent({ children }) {
+ return <ThemeContext value="dark">{children}</ThemeContext>;
+}
v19.0+ new

useActionState — async form actions

New hook that manages state from async form Actions. Replaces the useFormState pattern from react-dom.

migration.diff
// React 19: useActionState
+import { useActionState } from 'react';
+async function submitAction(prevState, formData) {
+ const name = formData.get('name');
+ await api.save({ name });
+ return { success: true, name };
+}
+const [state, action, isPending] = useActionState(submitAction, null);
v19.1+ new

captureOwnerStack — debug component relationships

Development-only API that returns the Owner Stack — which component directly caused a render, not just the component hierarchy.

migration.diff
// React 19.1: captureOwnerStack (dev only)
+import { captureOwnerStack } from 'react';
+function ErrorBoundary({ error }) {
+ const ownerStack = captureOwnerStack();
+ console.error("Owner:", ownerStack);
+ return <ErrorUI error={error} />;
+}
// git log --oneline --tags

Release History

Every significant React release since v18. Sorted newest first.

LATEST
v19.2.0minor
Oct 2025

Component lifecycle & rendering optimizations

  • ›Enhanced component lifecycle management
  • ›Optimized rendering performance
  • ›Streamlined async patterns
+4 APIs
v19.1.3patch
Dec 2025

Stability patches and bug fixes

  • ›Bug fixes for Owner Stack edge cases
  • ›Hydration stability improvements
v19.1.0minor
Mar 2025

Owner Stack debugging + full Suspense coverage

  • ›captureOwnerStack() API — identify component ownership in errors
  • ›Suspense across all phases: client, server, hydration
  • ›useId prefix updated from :r: to «r» for View Transitions
+3 APIs
v19.0.0major
Dec 2024

Server Components stable · Actions · New hooks

  • ›Server Components officially stable
  • ›useActionState, useOptimistic, useFormStatus hooks
  • ›use() API — read promises in render
  • ›ref as prop — no forwardRef needed
  • ›Document metadata in component tree
  • ›Resource preloading APIs
5 breaking+12 APIs
v18.3.0minor
Apr 2024

React 19 migration bridge — deprecation warnings

  • ›Deprecation warnings for all React 19 breaking changes
  • ›Identical to 18.2 in behavior
  • ›Recommended stepping stone before upgrading to 19
v18.0.0major
Mar 2022

Concurrent React · Automatic batching · Streaming SSR

  • ›createRoot() — concurrent rendering opt-in
  • ›Automatic batching for all event types
  • ›useTransition, useDeferredValue, useId hooks
  • ›Streaming SSR with Suspense
  • ›ReactDOM.render() deprecated
2 breaking+8 APIs
// library-compat.json

Ecosystem Compatibility

Does your stack compile? Framework, testing, state, and animation library support across React versions.

Framework
libv17v18v19
Next.js15.x

App Router requires v19

✓ Full
✓ Full
✓ Full
Remix2.x

Full RSC support in v2

✓ Full
✓ Full
✓ Full
Build
libv17v18v19
Vite + React5.x

Use @vitejs/plugin-react

✓ Full
✓ Full
✓ Full
Testing
libv17v18v19
Vitest2.x
✓ Full
✓ Full
✓ Full
React Testing Library16.x

Preferred over react-test-renderer

✓ Full
✓ Full
✓ Full
react-test-renderer

Deprecated — migrate to RTL

✓ Full
~ Partial
✗ Broken
DX
libv17v18v19
Storybook8.x

v8.x+ required for React 19

✓ Full
✓ Full
✓ Full
Data
libv17v18v19
TanStack Query5.x
✓ Full
✓ Full
✓ Full
Routing
libv17v18v19
TanStack Router1.x
~ Partial
✓ Full
✓ Full
State
libv17v18v19
Zustand5.x
✓ Full
✓ Full
✓ Full
Jotai2.x
✓ Full
✓ Full
✓ Full
Redux Toolkit2.x
✓ Full
✓ Full
✓ Full
Animation
libv17v18v19
Framer Motion11.x

v11+ for React 19

✓ Full
✓ Full
✓ Full
Forms
libv17v18v19
React Hook Form7.x

useFormStatus integration WIP

✓ Full
✓ Full
~ Partial
Validation
libv17v18v19
Zod3.x
✓ Full
✓ Full
✓ Full
// diff-tool.interactive

Diff Your Version

Select your current and target React version to generate a personalized migration summary.

5breaking
11new apis
2deprecated
+ newServer Components stable — available in frameworks
+ newuseActionState hook (replaces react-dom useFormState)
+ newuseOptimistic hook for optimistic UI updates
+ newuseFormStatus hook — reads parent form action state
+ newuse() API — read promises and context in render
+ newref as prop — no forwardRef needed for function components
+ newActions: startTransition accepts async functions
+ newDocument metadata: <title>, <meta>, <link> in component tree
+ newResource preloading APIs: preinit, preload, prefetchDNS, preconnect
+ newcaptureOwnerStack API (v19.1) — debug component ownership
+ newEnhanced Suspense across all phases: client, server, hydration (v19.1)
⚠ breakingPropTypes checks removed — migrate to TypeScript
⚠ breakingLegacy Context (contextTypes/getChildContext) removed
⚠ breakingString refs removed
⚠ breakingdefaultProps for function components removed — use ES6 defaults
⚠ breakingNew JSX transform mandatory
~ deprecatedforwardRef deprecated — use ref as prop
~ deprecatedelement.ref deprecated — use element.props.ref
ℹ infoFirst upgrade to 18.3 to surface deprecation warnings
ℹ infoRun: npx types-react-codemod@latest preset-19 ./src

Subscribe to Releases

Get notified when React ships. No noise — one email per release.