React 16

16 released 26 September 2017, latest 16.14.0.

React does not declare an end-of-life date for 16. Its support window lapsed on 20 October 2020.

What changed

React 16 replaced the earlier stack reconciler with Fiber, enabling interruptible rendering work and laying the foundation for later concurrent features. It added error boundaries, portals, fragments, improved server rendering, a revised context API, StrictMode, lazy loading with Suspense for code splitting, React.memo, and Hooks. The line also introduced warnings and migration paths for legacy class lifecycles and other older APIs. React has not declared an end-of-life status for React 16.

What staying costs

React 16 has passed its stated active-support boundary. That is a practical support boundary: teams should not expect ongoing fixes, compatibility work, or maintenance for issues confined to this line. The larger risk is ecosystem drift. Current versions of React-adjacent packages, testing tools, framework integrations, browser assumptions, and type definitions may require newer React APIs or no longer test against React 16. Remaining on 16 also preserves legacy patterns such as unsafe class lifecycles, older context usage, and code that is not prepared for modern root APIs or development checks. A later upgrade becomes more expensive when application code, dependencies, and build tooling all fall behind together.

What to do

First, move to the latest available React 16 patch level to reduce variation during assessment, then inventory React, React DOM, renderer packages, framework integrations, and peer-dependency requirements. Enable StrictMode in representative development paths and resolve warnings, especially unsafe lifecycle methods, legacy context, string refs, and deprecated React DOM access patterns. Add regression coverage around rendering, effects, error handling, server rendering if used, and third-party component behavior. Plan an upgrade through React 17 to remove compatibility warnings and validate dependency support, then adopt React 18 deliberately by migrating application entry points to the modern root API and testing behavior affected by automatic batching, StrictMode checks, and rendering timing. Keep the upgrade isolated from unrelated feature work and verify each major dependency against the target React version before deployment.

See what moving on from React 16 involves.

See the React technology page

Not sure yet? Get my plan

We can tell you what moving off React 16 involves.

What it takes to move off React 16 depends on what you built on it — the version you are on, how much depends on it, and how much of the work is mechanical. Leave your email with this version and we can tell you what that looks like for you.