Skip to content
PluginStats

react-legacy-compat weekly downloads statistics

By infinitybuddha29 · npm · Webpack plugins

Restore ReactDOM.findDOMNode under React 19 for legacy dependencies (react-transition-group, react-quill, react-draggable, ...) without patching node_modules. Works with Next.js (Turbopack + webpack), Vite and webpack 5.

View on npm Fresh · Oct 17, 2026

react-legacy-compat has 9 recorded weekly downloads on npm.

It ranks #1943 of 2,251 tracked npm listings by weekly downloads.

Over the past 7 days it changed by -94.8%.

PluginStats has 543 daily observations since Apr 23, 2025; the latest is from Oct 17, 2026.

Weekly downloads
9
Official API · Oct 17, 2026
7-day growth
-94.8%
-163 weekly downloads
30-day growth
—
Insufficient history
90-day growth
—
Insufficient history
Rank
#1943
Among tracked npm listings

About react-legacy-compat

react-legacy-compat

Upgraded to React 19 (or to Next.js 15/16, which ships React 19) and now react-transition-group, react-quill, react-draggable, or some other legacy dependency crashes with one of:

react-legacy-compat restores findDOMNode for those dependencies — without editing anything inside node_modules, and without forking or patching the broken package. One line in your Next.js, Vite or webpack config and it's fixed.

Requirements

| | |

| React / react-dom | >=19.0.0 | | Framework / bundler | Next.js >=15.3.0 (Turbopack or webpack), Vite >=5.0.0, or webpack >=5.0.0 (webpack 4 not supported) | | Node | >=18.0.0 |

Install

Quick start

Pick your framework or bundler:

Next.js

Works with Turbopack (the default in Next 16, and next dev --turbopack in Next 15) and with webpack (next --webpack), in both the App Router and the Pages Router. Your own webpack() function and turbopack options are kept. A config function ((phase) => config) works too.

Vite

webpack

That's it — no other configuration, no code changes in your app or in the broken dependency. Every findDOMNode call site (`import { findDOMNode } from "react-dom", ReactDOM.findDOMNode(...)`, or a plain require("react-dom")) now gets back the correct DOM node, in dev and in a production build.

FAQ

Do I need to change anything in the broken package? No. That's the whole point — nothing inside node_modules is touched or patched.

**Will this break react-dom/client, react-dom/server, or any other react-dom export?** No. Only the plain react-dom specifier is affected, and only findDOMNode is added — createPortal, flushSync, createRoot, etc. all keep working exactly as before. Verified explicitly; see What's verified.

Does it work with Next.js App Router / Turbopack? Yes. Next.js uses its own built-in copy of react-dom for the App Router and your installed one for the Pages Router; withReactLegacyCompat patches whichever one Next picks, so you never end up with two copies of React DOM. Verified under Turbopack and webpack, dev and production build, on Next 16.4, 15.5 and 15.3. Use withReactLegacyCompat here, not the webpack plugin.

Do I need both the Vite and webpack plugins installed? No — use whichever one matches your bundler. Both ship in the same package; vite and webpack are optional peer dependencies, so you only need the one you actually use installed.

Can I remove this once my dependencies drop findDOMNode? Yes — it's a shim, not a permanent architectural change. Delete the plugin from your config and uninstall the package once nothing in your dependency tree calls findDOMNode anymore.

Does this work with React 18? It doesn't need to — React 18 already has findDOMNode. The plugin is verified to not regress an app still on React 18 if you have one in a monorepo, but there's no reason to add it there.

Something's still broken after adding the plugin. This plugin only restores findDOMNode. If your dependency also relies on other APIs React 19 removed (string refs, legacy context, unstable_renderSubtreeIntoContainer), or is broken under React 19 for an unrelated reason, this won't fix that — see Known limitations.

What's verified

npm run verify (see EVALS.md) exercises, in both dev and production-build mode:

• A direct named import (import { findDOMNode } from 'react-dom') • The namespace/default-import call style (ReactDOM.findDOMNode(...)) • A plain CommonJS dependency (require('react-dom')) • Three real, unmodified npm packages: react-transition-group ( without nodeRef), react-quill (a widely-used, now-unmaintained editor component capped at React 18 in its own peerDependencies), and react-draggable — including the not mounted on DragStart! crash reported in react-draggable#670, which only reproduces on a real drag interaction, not merely on mount • • Calling findDOMNode on an already-unmounted component (throws, as the original did — it does not return a stale or wrong node) • Every other react-dom export (createPortal, flushSync, react-dom/client's createRoot, ...) behaving identically with the plugin enabled • That the plugin doesn't regress an app still on React 18 (differential check)

The webpack plugin is verified against a representative subset of the same cases (a direct named import, a CommonJS require('react-dom') dependency, and react-transition-group) in both webpack development and production mode — see EVALS.md (linked above) for why it's a subset rather than the full list.

The Next.js wrapper is verified (fixture n01-next, Next 16.4) with a named import, a ReactDOM.findDOMNode(...) call and react-transition-group, each on both an App Router and a Pages Router page, under Turbopack and under webpack, in next dev and in next build + next start.

Known limitations

• Relies on an unsupported React internal (instance._reactInternals). It is read-only and feature-detected — if a future React version changes its shape, the polyfill throws a clear error identifying itself rather than silently returning a wrong node — but this is not a guarantee. • Next.js, Vite and webpack 5 only. No other bundler integration exists (no Rollup-standalone, esbuild-standalone, Parcel, Rspack, ...), and webpack 4 specifically is not supported. Next.js below 15.3 isn't supported (its turbopack config key didn't exist yet). • Only fixes findDOMNode. Other APIs React 19 removed (string refs, legacy context, unstable_renderSubtreeIntoContainer, ...) are out of scope and are not patched by this plugin. • Not a fix for React 19 incompatibilities in general. A dependency that's broken under React 19 for reasons other than findDOMNode will still be broken.

How it works…

Description from the npm listing.

  • react
  • react19
  • react-19
  • findDOMNode
  • finddomnode
  • find-dom-node
  • nextjs
  • next
  • turbopack
  • vite
  • vite-plugin
  • webpack
  • webpack-plugin
  • compatibility
  • migration
  • react-transition-group
  • react-quill
  • react-draggable

Where react-legacy-compat sits in the listing

Each band is one page of 20. Weekly downloads on a log scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

All npm2,248 listings · 113 pages · page 98, #4 (overall #1944)
All npm: every listing in weekly downloads order
PNG SVG
Webpack plugins247 listings · 13 pages · page 11, #4 (overall #204)
Webpack plugins: every listing in weekly downloads order
PNG SVG

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

react-legacy-compat weekly downloads on npm, last 90 days: 9 weekly downloads as of Oct 17, 2026.react-legacy-compatWeekly downloads on npm · Last 90 days9downloads / week050100150200250300350Jul 19Aug 3Aug 18Sep 2Sep 17Oct 2Oct 17downloads / weekobservedarchived (Internet Archive)no observationsJul 20, 2026 – Oct 17, 2026 · 90 observations · Updated Oc…pluginstats.com
react-legacy-compat weekly downloads on npm, last 90 days: 9 weekly downloads as of Oct 17, 2026.
PNG SVG

7/30/90-day growth

react-legacy-compat weekly downloads growth on npm: -94.8% over 7 days, 30-day growth unavailable, 90-day growth unavailable.react-legacy-compatWeekly downloads growth on npm9downloads / week now7-day growth-163 weekly downloads-94.8%30-day growth+9 weekly downloadsInsufficient history90-day growth+9 weekly downloadsInsufficient historyGrowth vs. nearest observation to each baseline date · Updated Oct 17, 2026pluginstats.com
react-legacy-compat weekly downloads growth on npm: -94.8% over 7 days, 30-day growth unavailable, 90-day growth unavailable.
PNG SVG

Ranking history

react-legacy-compat npm ranking history: currently #1943 (by weekly downloads).react-legacy-compatnpm ranking · by weekly downloads · Last 90 days#1943current rank#600#800#1000#1200#1400#1600#1800#2000Jul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18rankOct 17, 2026 – Oct 18, 2026 · 2 observations · Updated Oct 17, 2026pluginstats.com
react-legacy-compat npm ranking history: currently #1943 (by weekly downloads).
PNG SVG

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Recent observations

Full history (543)
Recent weekly downloads observations for react-legacy-compat
Date (UTC)Weekly downloadsChange vs. previous
9-5
14-4
18-18
36-143
1790
179+7
1720
172+4
168+2
166+17
149+141
8-1
9-3
12—

Similar npm Webpack plugins plugins

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/react-legacy-compat. First seen Oct 16, 2026; last successful collection Oct 18, 2026. See the methodology.