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.