17 released 20 October 2020, latest 17.0.2.
React does not declare an end-of-life date for 17. Its support window lapsed on 29 March 2022.
What changed
React 17 was designed primarily as a compatibility bridge for incremental upgrades rather than as a feature-heavy release. Its most important internal change moved React’s delegated event listeners from the document to each React root, allowing different React versions to coexist more safely on a page during a staged migration. It also removed SyntheticEvent pooling, so event objects remain usable after an event handler returns without calling persist(). The release adopted the new JSX transform when the build toolchain supports it, allowing JSX files to avoid importing React solely for JSX compilation. These changes can affect code that depends on document-level event propagation, event object reuse, or custom integrations around React’s event system.
What staying costs
No end-of-life has been declared for React 17. However, its active-support cutoff is a practical support boundary: teams remaining on this line should not expect routine upstream maintenance, compatibility work, or fixes to be delivered for newly discovered issues. The main operational risk is not that existing React 17 applications immediately stop working, but that dependency upgrades, browser changes, build-tool changes, and third-party component packages increasingly target newer React APIs and peer-dependency ranges. React 17 also lacks the newer root API and rendering behavior introduced in later releases, so applications cannot adopt newer ecosystem capabilities without a migration. Continuing to rely on it can therefore turn an ordinary upgrade into a larger, time-constrained compatibility project later.
What to do
Choose a currently maintained React target and audit the application, packages, test utilities, and internal component libraries for React peer-dependency requirements before changing the runtime. Upgrade react and react-dom together, and use a separate branch or rollout environment to test the upgrade. For a move to React 18 or later, replace legacy ReactDOM.render usage with the appropriate root API, then test rendering, hydration, error handling, effects, and asynchronous updates because newer roots change batching and development-time Strict Mode behavior. Update testing libraries and use the current act patterns where required. Exercise integrations that rely on native DOM events, event delegation, portals, embedded widgets, or multiple React roots, since React 17’s event-system changes and later root changes can expose assumptions in those integrations. Remove obsolete workarounds retained for pooled SyntheticEvent objects, validate the production build and server-rendering path if applicable, and upgrade third-party libraries that declare incompatible React peer dependencies before completing the rollout.
We can tell you what moving off React 17 involves.
What it takes to move off React 17 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.
