UPGRADEPATH / DEVELOPER GUIDES

React 18 to 19: A Practical Upgrade Checklist

Plan your React 19 upgrade with a practical checklist covering dependency compatibility, deprecated APIs, TypeScript, testing, and production rollout.

By Volkan Filazi · 2 min read · Updated 2026-09-23

Upgrading React is more than changing two package versions. A successful migration keeps the application’s existing behaviour intact while making its dependencies and tooling ready for the new release.

This checklist covers the React 18 → 19 transition. If a framework manages your React dependencies, follow its supported upgrade path alongside these steps.

1. Establish a working baseline

Before changing dependencies, record which checks currently pass:

  • Production build
  • Type checking
  • Automated tests
  • Login and account flows
  • Forms and validation
  • Navigation and direct page loads

Keep the upgrade on a separate branch. Existing failures should be distinguishable from migration regressions.

2. Use React 18.3 as a preparation step

React recommends moving to 18.3 before React 19. It adds warnings that help identify APIs and patterns needing attention.

Exercise the application in development and investigate those warnings before moving forward.

3. Check the surrounding ecosystem

Review compatibility for your framework, router, component library, form tools, and test utilities.

Record each dependency as supported, requiring an update, or unresolved. Do not treat a successful installation as proof that every integration works.

4. Update React and review breaking changes

Keep react and react-dom on matching versions supported by your stack. React 19 requires the modern JSX transform.

Review older code for removed APIs such as ReactDOM.render, string refs, and legacy context. Function-component defaultProps should move to JavaScript default parameters.

If you use TypeScript, update the React type packages and review the resulting errors. Automated codemods can help, but their changes still need review.

5. Test behaviour, not just compilation

Run the production build locally and walk through complete user journeys.

Submit a form with invalid input. Sign out and sign back in. Open a nested route directly. Check keyboard focus in dialogs.

For server-rendered applications, inspect hydration warnings. Verify that error reporting still captures failures after the upgrade.

6. Release with a rollback plan

Keep the previous deployable application artifact available. After deployment, monitor errors and confirm that critical journeys still work.

Treat adoption of new React features as a separate decision. Completing the compatibility upgrade first makes regressions easier to isolate.