Deprecated npm packages and their maintainer-named replacement
npm allows a maintainer to attach a 'deprecated' message to a specific published version, and that message often names the exact replacement package or built-in API to use instead -- 'left-pad' points at String.prototype.padStart(), 'istanbul' points at nyc, 'tslint' points at ESLint, 'babel-eslint' points at @babel/eslint-parser. This is first-party, machine-readable data sitting in the registry API itself, but nobody has assembled it into a browsable table: a developer running `npm install` sees the warning once in a terminal scroll and it is gone, and the alternative is a content-mill blog post ranking '10 request alternatives' without quoting what the maintainer actually said. This asset would have been too tedious to maintain by hand across thousands of packages -- watching a firehose of new deprecations and re-checking old ones for changes -- but is a mechanical registry read for one machine, refreshable on a schedule at zero marginal cost per package. Each record is one deprecated package, quoting its maintainer's own deprecated message verbatim and naming the specific replacement stated in it. Answers 'is request deprecated', 'what should I use instead of tslint', 'why is my npm install warning about gulp-util'.
The data
| Package | Latest published version | Maintainer's deprecation message | Named replacement |
|---|---|---|---|
| abab | 2.0.6 | Use your platform's native atob() and btoa() methods instead | atob() and btoa() |
| apollo-server | 3.13.0 | The `apollo-server` package is part of Apollo Server v2 and v3, which are now end-of-life (as of October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. | @apollo/server |
| are-we-there-yet | 4.0.2 | This package is no longer supported. | |
| babel | 6.23.0 | In 6.x, the babel package has been deprecated in favor of babel-cli. Check https://opencollective.com/babel to support the Babel maintainers | babel-cli |
| babel-eslint | 10.1.0 | babel-eslint is now @babel/eslint-parser. This package will no longer receive updates. | @babel/eslint-parser |
| @babel/plugin-proposal-class-properties | 7.18.6 | This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. | @babel/plugin-transform-class-properties |
| @babel/plugin-proposal-nullish-coalescing-operator | 7.18.6 | This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. | @babel/plugin-transform-nullish-coalescing-operator |
| @babel/plugin-proposal-object-rest-spread | 7.20.7 | This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. | @babel/plugin-transform-object-rest-spread |
| @babel/plugin-proposal-optional-chaining | 7.21.0 | This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. | @babel/plugin-transform-optional-chaining |
| @babel/polyfill | 7.12.1 | 🚨 This package has been deprecated in favor of separate inclusion of a polyfill and regenerator-runtime (when needed). See the @babel/polyfill docs (https://babeljs.io/docs/en/babel-polyfill) for more information. | |
| babel-preset-es2015 | 6.24.1 | 🙌 Thanks for using Babel: we recommend using babel-preset-env now: please read https://babeljs.io/env to update! | babel-preset-env |
| boom | 7.3.0 | This module has moved and is now available at @hapi/boom. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. | @hapi/boom |
| circular-json | 0.5.9 | CircularJSON is in maintenance only, flatted is its successor. | flatted |
| codecov | 3.8.3 | https://about.codecov.io/blog/codecov-uploader-deprecation-plan/ | |
| coffee-script | 1.12.7 | CoffeeScript on NPM has moved to \"coffeescript\" (no hyphen) | coffeescript |
| copy-concurrently | 1.0.5 | This package is no longer supported. | |
| cryptiles | 4.1.3 | This module has moved and is now available at @hapi/cryptiles. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. | @hapi/cryptiles |
| crypto | 1.0.1 | This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. | built-in Node module |
| csurf | 1.11.0 | This package is archived and no longer maintained. For support, visit https://github.com/expressjs/express/discussions | |
| domexception | 4.0.0 | Use your platform's native DOMException instead | DOMException |
| eslint-loader | 4.0.2 | This loader has been deprecated. Please use eslint-webpack-plugin | eslint-webpack-plugin |
| eslint-plugin-typescript | 0.14.0 | Deprecated: Use @typescript-eslint/eslint-plugin instead | @typescript-eslint/eslint-plugin |
| extract-text-webpack-plugin | 3.0.2 | Deprecated. Please use https://github.com/webpack-contrib/mini-css-extract-plugin | mini-css-extract-plugin |
| figgy-pudding | 3.5.2 | This module is no longer supported. | |
| fs-write-stream-atomic | 1.0.10 | This package is no longer supported. | |
| fstream | 1.0.12 | This package is no longer supported. | |
| gauge | 5.0.2 | This package is no longer supported. | |
| gulp-minify-css | 1.2.4 | Please use gulp-clean-css | gulp-clean-css |
| gulp-util | 3.0.8 | gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5 | |
| @hapi/joi | 17.1.1 | Switch to 'npm install joi' | joi |
| har-validator | 5.1.5 | this library is no longer supported | |
| hoek | 6.1.3 | This module has moved and is now available at @hapi/hoek. Please update your dependencies as this version is no longer maintained an may contain bugs and security issues. | @hapi/hoek |
| @humanwhocodes/config-array | 0.13.0 | Use @eslint/config-array instead | @eslint/config-array |
| @humanwhocodes/object-schema | 2.0.3 | Use @eslint/object-schema instead | @eslint/object-schema |
| inflight | 1.0.6 | This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. | lru-cache |
| istanbul | 0.4.5 | This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives. | nyc |
| jade | 1.11.0 | Jade has been renamed to pug, please install the latest version of pug instead of jade | pug |
| left-pad | 1.3.0 | use String.prototype.padStart() | String.prototype.padStart() |
| libnpmconfig | 1.2.1 | This module is not used anymore. npm config is parsed by npm itself and by @npmcli/config | @npmcli/config |
| lodash.get | 4.4.2 | This package is deprecated. Use the optional chaining (?.) operator instead. | optional chaining (?.) operator |
| lodash.isequal | 4.5.0 | This package is deprecated. Use require('node:util').isDeepStrictEqual instead. | require('node:util').isDeepStrictEqual |
| lodash.template | 4.18.1 | This package is deprecated. Use https://socket.dev/npm/package/eta instead. | eta |
| mkdirp-promise | 5.0.1 | This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. | mkdirp |
| move-concurrently | 1.0.1 | This package is no longer supported. | |
| node-pre-gyp | 0.17.0 | Please upgrade to @mapbox/node-pre-gyp: the non-scoped node-pre-gyp package is deprecated and only the @mapbox scoped package will recieve updates in the future | @mapbox/node-pre-gyp |
| node-sass | 9.0.0 | Node Sass is no longer supported. Please use `sass` or `sass-embedded` instead. | `sass` or `sass-embedded` |
| node-uuid | 1.4.8 | Use uuid module instead | uuid |
| nomnom | 1.8.1 | Package no longer supported. Contact [email protected] for more info. | |
| now | 21.0.1 | \"now\" is deprecated and will stop receiving updates on December 31, 2020. Please use \"vercel\" instead. | vercel |
| npm-registry-client | 8.6.0 | This package is no longer supported. | |
| @npmcli/move-file | 3.0.0 | This functionality has been moved to @npmcli/fs | @npmcli/fs |
| npmlog | 7.0.1 | This package is no longer supported. | |
| osenv | 0.1.5 | This package is no longer supported. | |
| phantomjs | 2.1.7 | Package renamed to phantomjs-prebuilt. Please update 'phantomjs' package references to 'phantomjs-prebuilt' | phantomjs-prebuilt |
| phantomjs-prebuilt | 2.1.16 | this package is now deprecated | |
| popper.js | 1.16.1 | You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1 | @popperjs/core |
| postcss-cssnext | 3.1.1 | 'postcss-cssnext' has been deprecated in favor of 'postcss-preset-env'. Read more at https://moox.io/blog/deprecating-cssnext/ | postcss-preset-env |
| protractor | 7.0.0 | We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular | |
| querystring | 0.2.1 | The querystring API is considered Legacy. new code should use the URLSearchParams API instead. | URLSearchParams |
| raven | 2.6.4 | Please upgrade to @sentry/node. See the migration guide https://bit.ly/3ybOlo7 | @sentry/node |
| raven-js | 3.27.2 | Please upgrade to @sentry/browser. See the migration guide https://bit.ly/3ybOlo7 | @sentry/browser |
| react-tools | 0.13.3 | react-tools is deprecated. For more information, visit https://fb.me/react-tools-deprecated | |
| read-package-json | 7.0.1 | This package is no longer supported. Please use @npmcli/package-json instead. | @npmcli/package-json |
| readdir-scoped-modules | 1.1.0 | This functionality has been moved to @npmcli/fs | @npmcli/fs |
| request | 2.88.2 | request has been deprecated, see https://github.com/request/request/issues/3142 | |
| request-promise | 4.2.6 | request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 | |
| request-promise-native | 1.0.9 | request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142 | |
| resolve-url | 0.2.1 | https://github.com/lydell/resolve-url#deprecated | |
| rollup-plugin-babel | 4.4.0 | This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel. | @rollup/plugin-babel |
| rollup-plugin-commonjs | 10.1.0 | This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs. | @rollup/plugin-commonjs |
| rollup-plugin-json | 4.0.0 | This module has been deprecated and is no longer maintained. Please use @rollup/plugin-json. | @rollup/plugin-json |
| rollup-plugin-node-resolve | 5.2.0 | This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve. | @rollup/plugin-node-resolve |
| rollup-plugin-replace | 2.2.0 | This module has moved and is now available at @rollup/plugin-replace. Please update your dependencies. This version is no longer maintained. | @rollup/plugin-replace |
| rollup-plugin-terser | 7.0.2 | This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser | @rollup/plugin-terser |
| sntp | 3.0.2 | This module moved to @hapi/sntp. Please make sure to switch over as this distribution is no longer supported and may contain bugs and critical security issues. | @hapi/sntp |
| source-map-resolve | 0.6.0 | See https://github.com/lydell/source-map-resolve#deprecated | |
| source-map-url | 0.4.1 | See https://github.com/lydell/source-map-url#deprecated | |
| sourcemap-codec | 1.4.8 | Please use @jridgewell/sourcemap-codec instead | @jridgewell/sourcemap-codec |
| stable | 0.1.8 | Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility | Array#sort() |
| tslint | 6.1.3 | TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information. | ESLint |
| tslint-react | 5.0.0 | tslint-react is deprecated along with TSLint | |
| @types/axios | 0.14.4 | This is a stub types definition. axios provides its own type definitions, so you do not need this installed. | axios |
| @types/chalk | 2.2.4 | This is a stub types definition. chalk provides its own type definitions, so you do not need this installed. | chalk |
| @types/commander | 2.12.5 | This is a stub types definition. commander provides its own type definitions, so you do not need this installed. | commander |
| @types/dotenv | 8.2.3 | This is a stub types definition. dotenv provides its own type definitions, so you do not need this installed. | dotenv |
| @types/mkdirp | 2.0.0 | This is a stub types definition. mkdirp provides its own type definitions, so you do not need this installed. | mkdirp |
| @types/moment | 2.13.0 | This is a stub types definition for Moment (https://github.com/moment/moment). Moment provides its own type definitions, so you don't need @types/moment installed! | Moment |
| @types/react-native | 0.73.0 | This is a stub types definition. react-native provides its own type definitions, so you do not need this installed. | react-native |
| @types/redux | 3.6.0 | This is a stub types definition for Redux (https://github.com/reactjs/redux). Redux provides its own type definitions, so you don't need @types/redux installed! | Redux |
| @types/uuid | 11.0.0 | This is a stub types definition. uuid provides its own type definitions, so you do not need this installed. | uuid |
| typescript-eslint-parser | 22.0.0 | Deprecated: Use @typescript-eslint/parser instead | @typescript-eslint/parser |
| typings | 2.1.1 | Typings is deprecated in favor of NPM @types -- see README for more information | @types |
| uglify-es | 3.3.9 | support for ECMAScript is superseded by `uglify-js` as of v3.13.0 | uglify-js |
| urix | 0.1.0 | Please see https://github.com/lydell/urix#deprecated | |
| vue-cli | 2.9.6 | This package has been deprecated in favour of @vue/cli | @vue/cli |
| w3c-hr-time | 1.0.2 | Use your platform's native performance.now() and performance.timeOrigin. | performance.now() and performance.timeOrigin |
Where this came from
Every record above links the page it was taken from and quotes the sentence that states it. These are the 96 sources this dataset was assembled from.
- registry.npmjs.orghttps://registry.npmjs.org/abab
- registry.npmjs.orghttps://registry.npmjs.org/apollo-server
- registry.npmjs.orghttps://registry.npmjs.org/are-we-there-yet
- registry.npmjs.orghttps://registry.npmjs.org/babel-eslint
- registry.npmjs.orghttps://registry.npmjs.org/@babel/plugin-proposal-class-properties
- registry.npmjs.orghttps://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator
- registry.npmjs.orghttps://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread
- registry.npmjs.orghttps://registry.npmjs.org/@babel/plugin-proposal-optional-chaining
- registry.npmjs.orghttps://registry.npmjs.org/@babel/polyfill
- registry.npmjs.orghttps://registry.npmjs.org/babel-preset-es2015
- registry.npmjs.orghttps://registry.npmjs.org/babel
- registry.npmjs.orghttps://registry.npmjs.org/boom
- registry.npmjs.orghttps://registry.npmjs.org/circular-json
- registry.npmjs.orghttps://registry.npmjs.org/codecov
- registry.npmjs.orghttps://registry.npmjs.org/coffee-script
- registry.npmjs.orghttps://registry.npmjs.org/copy-concurrently
- registry.npmjs.orghttps://registry.npmjs.org/cryptiles
- registry.npmjs.orghttps://registry.npmjs.org/crypto
- registry.npmjs.orghttps://registry.npmjs.org/csurf
- registry.npmjs.orghttps://registry.npmjs.org/domexception
- registry.npmjs.orghttps://registry.npmjs.org/eslint-loader
- registry.npmjs.orghttps://registry.npmjs.org/eslint-plugin-typescript
- registry.npmjs.orghttps://registry.npmjs.org/extract-text-webpack-plugin
- registry.npmjs.orghttps://registry.npmjs.org/figgy-pudding
- registry.npmjs.orghttps://registry.npmjs.org/fs-write-stream-atomic
- registry.npmjs.orghttps://registry.npmjs.org/fstream
- registry.npmjs.orghttps://registry.npmjs.org/gauge
- registry.npmjs.orghttps://registry.npmjs.org/gulp-minify-css
- registry.npmjs.orghttps://registry.npmjs.org/gulp-util
- registry.npmjs.orghttps://registry.npmjs.org/@hapi/joi
- registry.npmjs.orghttps://registry.npmjs.org/har-validator
- registry.npmjs.orghttps://registry.npmjs.org/hoek
- registry.npmjs.orghttps://registry.npmjs.org/@humanwhocodes/config-array
- registry.npmjs.orghttps://registry.npmjs.org/@humanwhocodes/object-schema
- registry.npmjs.orghttps://registry.npmjs.org/inflight
- registry.npmjs.orghttps://registry.npmjs.org/istanbul
- registry.npmjs.orghttps://registry.npmjs.org/jade
- registry.npmjs.orghttps://registry.npmjs.org/left-pad
- registry.npmjs.orghttps://registry.npmjs.org/libnpmconfig
- registry.npmjs.orghttps://registry.npmjs.org/lodash.get
- registry.npmjs.orghttps://registry.npmjs.org/lodash.isequal
- registry.npmjs.orghttps://registry.npmjs.org/lodash.template
- registry.npmjs.orghttps://registry.npmjs.org/mkdirp-promise
- registry.npmjs.orghttps://registry.npmjs.org/move-concurrently
- registry.npmjs.orghttps://registry.npmjs.org/node-pre-gyp
- registry.npmjs.orghttps://registry.npmjs.org/node-sass
- registry.npmjs.orghttps://registry.npmjs.org/node-uuid
- registry.npmjs.orghttps://registry.npmjs.org/nomnom
- registry.npmjs.orghttps://registry.npmjs.org/now
- registry.npmjs.orghttps://registry.npmjs.org/npm-registry-client
- registry.npmjs.orghttps://registry.npmjs.org/@npmcli/move-file
- registry.npmjs.orghttps://registry.npmjs.org/npmlog
- registry.npmjs.orghttps://registry.npmjs.org/osenv
- registry.npmjs.orghttps://registry.npmjs.org/phantomjs-prebuilt
- registry.npmjs.orghttps://registry.npmjs.org/phantomjs
- registry.npmjs.orghttps://registry.npmjs.org/popper.js
- registry.npmjs.orghttps://registry.npmjs.org/postcss-cssnext
- registry.npmjs.orghttps://registry.npmjs.org/protractor
- registry.npmjs.orghttps://registry.npmjs.org/querystring
- registry.npmjs.orghttps://registry.npmjs.org/raven-js
- registry.npmjs.orghttps://registry.npmjs.org/raven
- registry.npmjs.orghttps://registry.npmjs.org/react-tools
- registry.npmjs.orghttps://registry.npmjs.org/read-package-json
- registry.npmjs.orghttps://registry.npmjs.org/readdir-scoped-modules
- registry.npmjs.orghttps://registry.npmjs.org/request-promise-native
- registry.npmjs.orghttps://registry.npmjs.org/request-promise
- registry.npmjs.orghttps://registry.npmjs.org/request
- registry.npmjs.orghttps://registry.npmjs.org/resolve-url
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-babel
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-commonjs
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-json
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-node-resolve
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-replace
- registry.npmjs.orghttps://registry.npmjs.org/rollup-plugin-terser
- registry.npmjs.orghttps://registry.npmjs.org/sntp
- registry.npmjs.orghttps://registry.npmjs.org/source-map-resolve
- registry.npmjs.orghttps://registry.npmjs.org/source-map-url
- registry.npmjs.orghttps://registry.npmjs.org/sourcemap-codec
- registry.npmjs.orghttps://registry.npmjs.org/stable
- registry.npmjs.orghttps://registry.npmjs.org/tslint-react
- registry.npmjs.orghttps://registry.npmjs.org/tslint
- registry.npmjs.orghttps://registry.npmjs.org/@types/axios
- registry.npmjs.orghttps://registry.npmjs.org/@types/chalk
- registry.npmjs.orghttps://registry.npmjs.org/@types/commander
- registry.npmjs.orghttps://registry.npmjs.org/@types/dotenv
- registry.npmjs.orghttps://registry.npmjs.org/@types/mkdirp
- registry.npmjs.orghttps://registry.npmjs.org/@types/moment
- registry.npmjs.orghttps://registry.npmjs.org/@types/react-native
- registry.npmjs.orghttps://registry.npmjs.org/@types/redux
- registry.npmjs.orghttps://registry.npmjs.org/@types/uuid
- registry.npmjs.orghttps://registry.npmjs.org/typescript-eslint-parser
- registry.npmjs.orghttps://registry.npmjs.org/typings
- registry.npmjs.orghttps://registry.npmjs.org/uglify-es
- registry.npmjs.orghttps://registry.npmjs.org/urix
- registry.npmjs.orghttps://registry.npmjs.org/vue-cli
- registry.npmjs.orghttps://registry.npmjs.org/w3c-hr-time
Machine-readable
- data.jsonThe whole dataset — every record with its source URL and source quote.
- Open Knowledge Format bundleOne JSON object per line — every record's frontmatter and quoted span exactly as it is held here, in one fetch.
- data.csvThe same records as one flat table, for a spreadsheet or a dataframe. The last four columns are the source URL, the quoted sentence it was read from, the date we last checked it, and which columns are our reading rather than the page's words.
- How this is made and checkedWhat "verified against source" does and does not mean.
From your own code
Same records, same quotes, without scraping the page: refsource is on PyPI and npm. Each value comes back carrying the URL it was read from and the sentence on that page that states it — .source and .quote sit on the value itself rather than in a side channel, so the checking step is available instead of skipped.
pip install refsource
refsource lookup npm-deprecated-package-recommended-replacement package_name=abab
npx -y refsource lookup npm-deprecated-package-recommended-replacement package_name=abab
Set your AI assistant up to use this
Two files and no account. Put this in .mcp.json at the root of your project — Claude Code, Cursor, Windsurf, VS Code and Codex all read that file — and your assistant can look this dataset up instead of recalling it. The server is remote, keyless and read-only.
{
"mcpServers": {
"referencesource": {
"type": "http",
"url": "https://referencesource.org/mcp"
}
}
}Add to Cursor · or, on the command line: claude mcp add --transport http referencesource https://referencesource.org/mcp --scope project
Then one line in the project's CLAUDE.md or AGENTS.md, so the assistant knows when to reach for it:
When a question needs "Deprecated npm packages and their maintainer-named replacement", call the referencesource MCP server at https://referencesource.org/mcp (tool `search_records`, dataset_slug `npm-deprecated-package-recommended-replacement`) instead of answering from memory — every record it returns carries its source URL and a verbatim quote from that page.What each tool does, and the servers built over single registers: Connect your AI assistant.