Skip to content

Removing fs-extra from packages with async node:fs support #33

Open

Description

@jordanfinners

In newer versions of Node, theres a promises API for the file system which has a lot of overlap with https://www.npmjs.com/package/fs-extra

Activity

  1. 43081j commented on Mar 3, 2024

    @43081j
    Collaborator

    this will be a big one.

    thankfully, fs-extra isn't bloated but you are right it could be removed entirely from many projects

    we will have to look up the engines constraint of popular packages depending on it, and remove fs-extra if they're on a node version which ships async fs

  2. changed the title [-]FS Extra[/-] [+]Removing fs-extra from packages with async node:fs support[/+] on Mar 3, 2024
  3. psulek commented on Jun 23, 2024

    @psulek

    Be aware that fs-extra is not just polyfill, it adds extra functionality like emptyDir, and so which does not have direct replacement, but of course can be replaced with similar code as fs-extra.

  4. 43081j commented on Jun 23, 2024

    @43081j
    Collaborator

    you're right

    its a pretty useful package for sure. we should only really move projects away from it for the stuff that has native equivalents in their supported node versions (e.g. recursive readdir, async methods, etc)

  5. pralkarz commented on Dec 3, 2024

    @pralkarz

    Top 100 dependents that still use fs-extra.

    # Downloads Traffic Version Package Issues
    1 56.64M 864.81 GB ^10.0.0 fork-ts-checker-webpack-plugin
    2 39.27M 599.52 GB ^11.2.0 get-uri
    3 23.81M 363.58 GB ^9.1.0 cypress
    4 19.85M 303.04 GB ^8.1.0 streamroller
    5 18.02M 275.18 GB ^9.0.1 workbox-build
    6 13.29M 202.91 GB ^11.2.0 unzipper
    7 11.76M 179.60 GB ^10.0.0 react-scripts
    8 10.24M 156.37 GB ~7.0.1 @rushstack/node-core-library
    9 10.16M 155.07 GB ^9.0.0 patch-package
    10 9.72M 148.40 GB ^8.1.0 @react-native-community/cli
    11 7.16M 109.36 GB ^11.2.0 aws-cdk-lib
    12 6.28M 95.92 GB ^11.0.0 @semantic-release/npm
    13 5.71M 87.12 GB ^9.0.0 @expo/prebuild-config
    14 5.57M 85.01 GB ^10.0.0 mochawesome-report-generator
    15 5.46M 83.35 GB ^11.2.0 lerna
    16 5.38M 82.10 GB ^11.2.0 @lerna/create
    17 5.13M 78.32 GB ^7.0.1 @changesets/config
    18 5.12M 78.19 GB ^7.0.1 @changesets/read
    19 5.10M 77.89 GB ^7.0.1 @changesets/pre
    20 5.07M 77.48 GB ^8.1 @oclif/errors
    21 5.07M 77.38 GB ^7.0.1 @changesets/cli
    22 5.02M 76.62 GB ^7.0.1 @changesets/apply-release-plan
    23 5.01M 76.54 GB ^7.0.1 @changesets/write
    24 4.55M 69.46 GB ^8.1.0 eslint-loader
    25 4.48M 68.39 GB ^9.0.1 @storybook/manager-webpack4
    26 4.42M 67.51 GB ^11.1.0 vite-plugin-checker
    27 4.26M 65.10 GB ^9.1.0 expo-modules-autolinking
    28 4.15M 63.38 GB 9.0.0 @expo/image-utils
    29 4.15M 63.30 GB 9.1.0 commitizen
    30 4.04M 61.65 GB ^9.1.0 @serverless/dashboard-plugin
    31 3.94M 60.09 GB ^7.0.1 mochawesome-merge
    32 3.86M 58.96 GB ^8.1.0 @electron/get
    33 3.79M 57.90 GB ^9.1.0 @expo/metro-config
    34 3.61M 55.08 GB ^11.0.0 @semantic-release/changelog
    35 3.54M 54.05 GB ~8.1.0 @expo/cli
    36 3.21M 49.01 GB 3.0.1 browser-sync
    37 3.14M 47.99 GB ^10.0.0 rollup-plugin-typescript2
    38 3.10M 47.36 GB ^11.2.0 vite-plugin-inspect
    39 2.94M 44.93 GB 9.1.0 @module-federation/dts-plugin
    40 2.94M 44.81 GB 10.1.0 @openapitools/openapi-generator-cli
    41 2.93M 44.75 GB ^8.1 cli-ux
    42 2.91M 44.47 GB 9.1.0 @module-federation/third-party-dts-extractor
    43 2.80M 42.82 GB 9.1.0 @module-federation/managers
    44 2.80M 42.68 GB ^9.0.1 @storybook/manager-webpack5
    45 2.77M 42.36 GB ^11.0.0 postcss-cli
    46 2.65M 40.44 GB ^11.1.1 azurite
    47 2.62M 39.96 GB ^9.1.0 @vue/cli-service
    48 2.49M 37.99 GB ^9.1.0 sequelize-cli
    49 2.37M 36.14 GB ^11.2.0 nitropack
    50 2.32M 35.44 GB 8.1.0 @vercel/fun vercel/fun#110
    51 2.25M 34.32 GB ^11.1.1 @electron/universal
    52 2.18M 33.35 GB ^9.0.0 @ionic/utils-fs
    53 2.17M 33.11 GB 11.1.0 @vercel/gatsby-plugin-vercel-builder
    54 2.13M 32.46 GB ^9.0.1 @electron/notarize
    55 2.13M 32.46 GB ^11.2.0 serverless-offline
    56 2.10M 32.13 GB ^10.1.0 firebase-tools
    57 2.09M 31.94 GB ^9.0.1 ember-cli-typescript
    58 2.04M 31.22 GB ^11.2.0 gatsby-core-utils
    59 1.98M 30.27 GB ^8.1.0 rollup-plugin-copy
    60 1.97M 30.14 GB 9.1.0 @module-federation/data-prefetch
    61 1.91M 29.18 GB 11.2.0 sonarqube-scanner
    62 1.89M 28.87 GB ^9.1.0 @lerna/conventional-commits
    63 1.88M 28.77 GB ^9.1.0 @lerna/symlink-dependencies
    64 1.88M 28.77 GB ^9.1.0 @lerna/symlink-binary
    65 1.88M 28.77 GB ^9.1.0 @lerna/npm-install
    66 1.88M 28.76 GB ^9.1.0 @lerna/npm-publish
    67 1.88M 28.73 GB ^9.1.0 @lerna/create-symlink
    68 1.88M 28.72 GB ^9.1.0 @lerna/resolve-symlink
    69 1.88M 28.65 GB ^9.1.0 @lerna/get-packed
    70 1.86M 28.41 GB ^9.0.0 @cypress/browserify-preprocessor
    71 1.85M 28.28 GB ^10.1.0 cypress-terminal-report
    72 1.82M 27.86 GB ^10.1.0 fixturify
    73 1.82M 27.74 GB ^9.1.0 @lerna/profiler
    74 1.79M 27.29 GB ^10.0.0 fixturify-project
    75 1.65M 25.25 GB ^9.1.0 @stackbit/sdk
    76 1.65M 25.21 GB ^9.1.0 @stackbit/utils
    77 1.65M 25.18 GB ^8.1.0 @stackbit/cms-core
    78 1.65M 25.18 GB ^11.1.1 @docusaurus/utils
    79 1.64M 25.05 GB ^8.1.0 broccoli-output-wrapper
    80 1.60M 24.48 GB ^1.0.0 phantomjs-prebuilt
    81 1.60M 24.47 GB ^10.0.0 @electron/osx-sign
    82 1.60M 24.45 GB ^11.1.1 @docusaurus/core
    83 1.59M 24.24 GB ^10.0.0 @remix-run/dev
    84 1.57M 23.99 GB ^11.1.1 @docusaurus/mdx-loader
    85 1.57M 23.96 GB ^11.2.0 @docusaurus/utils-validation
    86 1.56M 23.86 GB ^11.2.0 @compodoc/compodoc
    87 1.54M 23.47 GB ^8.1.0 cucumber-html-reporter
    88 1.52M 23.20 GB ^11.1.1 @compodoc/ngd-transformer
    89 1.50M 22.89 GB ^11.1.1 gh-pages
    90 1.49M 22.78 GB ^10.1.0 builder-util
    91 1.48M 22.60 GB ^10.1.0 electron-publish
    92 1.44M 22.03 GB ^10.1.0 app-builder-lib
    93 1.44M 21.97 GB ^8.0.0 s3rver
    94 1.39M 21.28 GB ^10.0.1 cypress-mochawesome-reporter
    95 1.39M 21.27 GB ^10.1.0 dmg-builder
    96 1.38M 21.11 GB ^10.1.0 electron-builder
    97 1.37M 20.89 GB ^8.0.1 fs-merger
    98 1.36M 20.80 GB ^7.0.1 mock-aws-s3
    99 1.35M 20.58 GB ^11.1.0 vite-plugin-static-copy
    100 1.30M 19.83 GB ^11.1.1 @docusaurus/plugin-content-docs
  6. alexparish commented on Dec 3, 2024

    @alexparish

    The change to get-uri is merged but still waiting for it to be published: TooTallNate/proxy-agents#341

  7. alexparish commented on Dec 6, 2024

    @alexparish

    get-uri version 6.0.4 has now been published removing the fs-extra dependency 🎉

  8. Taureon commented on Dec 7, 2024

    @Taureon

    Top 100 dependents that still use fs-extra.

    Downloads Traffic Version Package

    [Contents of the table I expunged so the quote wouldn't be huge]

    If I did my math right, that sums up to 7040 GB (and 6440.48 GB without get-uri) of inefficiently used bandwidth per month.
    Awesome, I love npm.

  9. added
    umbrella issueThis issue contains a list of dependents of a package and tracks the progress in each
    on Dec 18, 2024
  10. v1rtl commented on Jan 19, 2025

    @v1rtl

    removed fs-extra from @vercel/fun: vercel/fun#110

  11. MichaelDeBoey commented on Jun 4, 2025

    @MichaelDeBoey

    Removed it from all React Router packages: remix-run/react-router#13736

  12. MichaelDeBoey commented on Aug 4, 2025

    @MichaelDeBoey
  13. MichaelDeBoey commented on Feb 11, 2026

    @MichaelDeBoey
    npx github:Fuzzyma/e18e-tools fs-extra -n 100 -q -o md  -U https://npm.devminer.xyz/registry
    # Downloads Traffic Version Package PR Notes
    1 22.34M 356.99 GB ^8.1.0 streamroller
    2 20.31M 324.54 GB ^9.1.0 cypress
    3 19.74M 315.42 GB ^11.2.0 unzipper
    4 17.87M 285.50 GB ^9.0.1 workbox-build
    5 16.39M 261.93 GB ~11.3.0 @rushstack/node-core-library
    6 13.49M 215.53 GB ^10.0.0 patch-package
    7 9.81M 156.71 GB ^10.0.0 react-scripts deprecated
    8 9.58M 153.08 GB 9.1.0 @module-federation/managers
    9 8.75M 139.76 GB 9.1.0 @module-federation/dts-plugin
    10 8.66M 138.33 GB 9.1.0 @module-federation/third-party-dts-extractor
    11 8.54M 136.46 GB 9.1.0 @module-federation/data-prefetch
    12 7.20M 115.09 GB ^11.3.3 aws-cdk-lib
    13 6.73M 107.58 GB ^11.0.0 @semantic-release/npm
    14 5.87M 93.80 GB ^8.1.0 @react-native-community/cli
    15 5.61M 89.69 GB ^10.0.0 mochawesome-report-generator
    16 5.16M 82.41 GB ^7.0.1 @changesets/cli
    17 5.08M 81.20 GB ^11.2.0 lerna
    18 5.07M 81.02 GB ^7.0.1 @changesets/config
    19 5.06M 80.80 GB ^7.0.1 @changesets/apply-release-plan
    20 5.05M 80.65 GB ^7.0.1 @changesets/read
    21 4.94M 78.93 GB ^7.0.1 @changesets/write
    22 4.92M 78.63 GB ^7.0.1 @changesets/pre
    23 4.87M 77.84 GB ^11.2.0 @lerna/create
    24 4.57M 73.10 GB ^8.1 @oclif/errors
    25 4.52M 72.23 GB ^10.0.0 rollup-plugin-typescript2
    26 4.51M 72.01 GB ^11.1.1 node-sarif-builder
    27 4.43M 70.84 GB 9.1.0 commitizen commitizen/cz-cli#1016
    28 3.97M 63.39 GB ^11.0.0 @semantic-release/changelog
    29 3.89M 62.17 GB 11.1.0 @vercel/gatsby-plugin-vercel-builder
    30 3.81M 60.81 GB ^11.3.0 mochawesome-merge
    31 3.48M 55.56 GB ^11.0.0 postcss-cli
    32 3.44M 55.04 GB ^9.0.0 @ionic/utils-fs
    33 3.30M 52.70 GB ^11.2.0 @capacitor/cli
    34 3.20M 51.16 GB 11.3.3 @openapitools/openapi-generator-cli
    35 3.18M 50.76 GB ^10.1.0 builder-util
    36 3.17M 50.60 GB ^10.1.0 electron-publish
    37 3.15M 50.41 GB ^10.1.0 app-builder-lib
    38 3.07M 49.10 GB ^9.1.0 sequelize-cli sequelize/cli#1564
    39 3.01M 48.07 GB ^8.1.0 eslint-loader
    40 3.00M 47.88 GB ^8.1.0 rollup-plugin-copy
    41 2.97M 47.39 GB ^10.1.0 firebase-tools
    42 2.93M 46.77 GB ^9.0.0 @malept/flatpak-bundler
    43 2.92M 46.71 GB ^10.1.0 electron-builder
    44 2.91M 46.58 GB ^10.1.0 dmg-builder
    45 2.76M 44.04 GB ^10.0.0 temp-file
    46 2.66M 42.57 GB ^9.1.0 @serverless/dashboard-plugin
    47 2.62M 41.89 GB 3.0.1 browser-sync
    48 2.58M 41.28 GB ^11.3.1 shadcn
    49 2.52M 40.28 GB 10.1.0 @turbo/gen
    50 2.50M 39.96 GB 10.1.0 @turbo/workspaces
    51 2.47M 39.47 GB ^8.1 cli-ux
    52 2.15M 34.33 GB ^8.1.0 broccoli-output-wrapper
    53 2.10M 33.54 GB ^11.1.1 @flmngr/flmngr-server-node
    54 2.00M 32.02 GB ^11.1.1 gh-pages tschaub/gh-pages#653
    55 1.99M 31.83 GB ^10.1.0 electron-updater
    56 1.97M 31.51 GB ^11.1.1 @docusaurus/core
    57 1.96M 31.39 GB ^11.3.2 @orval/core
    58 1.96M 31.29 GB ^11.1.1 @docusaurus/utils
    59 1.94M 31.00 GB ^11.3.2 orval
    60 1.93M 30.88 GB ^9.0.1 @storybook/manager-webpack4
    61 1.91M 30.50 GB ^11.2.0 @docusaurus/utils-validation
    62 1.91M 30.45 GB ^11.2.0 gatsby-core-utils
    63 1.86M 29.79 GB ^11.1.1 @docusaurus/mdx-loader
    64 1.85M 29.52 GB ^8.0.1 fs-merger
    65 1.81M 28.95 GB ^11.1.1 @docusaurus/plugin-content-docs
    66 1.80M 28.82 GB ^9.1.0 @vue/cli-service
    67 1.77M 28.35 GB ^11.1.1 azurite
    68 1.76M 28.12 GB ^11.2.0 serverless-offline dherault/serverless-offline#1876
    69 1.76M 28.08 GB ^11.1.1 @docusaurus/theme-translations
    70 1.70M 27.13 GB ^11.1.1 @docusaurus/plugin-content-pages
    71 1.70M 27.11 GB ^11.1.1 @docusaurus/plugin-content-blog
    72 1.69M 26.98 GB ^11.3.2 @orval/hono
    73 1.68M 26.91 GB ^11.1.1 @docusaurus/plugin-sitemap
    74 1.68M 26.86 GB ^11.1.1 @docusaurus/theme-search-algolia
    75 1.68M 26.79 GB ^11.1.1 @docusaurus/plugin-debug
    76 1.60M 25.63 GB ^8.1.0 cucumber-html-reporter
    77 1.58M 25.31 GB ^10.0.0 @electron-forge/maker-base
    78 1.58M 25.22 GB 11.3.3 sonarqube-scanner
    79 1.55M 24.82 GB ^10.1.0 fixturify
    80 1.50M 23.96 GB ^10.0.1 vite-plugin-html
    81 1.47M 23.45 GB ^10.0.0 fixturify-project
    82 1.43M 22.91 GB ^1.0.0 phantomjs-prebuilt
    83 1.41M 22.49 GB 11.3.0 @prisma/schema-files-loader
    84 1.39M 22.29 GB ^11.1.1 @docusaurus/babel
    85 1.39M 22.21 GB ^11.2.0 i18next-parser
    86 1.39M 22.16 GB 11.3.0 @cdktf/hcl2json
    87 1.36M 21.70 GB ^11.3.2 @compodoc/compodoc
    88 1.36M 21.66 GB ^9.0.1 ember-cli-typescript
    89 1.33M 21.27 GB ^10.1.0 codemaker
    90 1.31M 21.01 GB ^11.1.1 @rsdoctor/utils
    91 1.31M 20.99 GB ^11.1.1 @rsdoctor/core
    92 1.31M 20.87 GB ^11.1.1 @compodoc/ngd-transformer
    93 1.24M 19.76 GB ^9.1.0 @lerna/conventional-commits
    94 1.22M 19.56 GB ^9.0.1 @storybook/manager-webpack5
    95 1.22M 19.54 GB ^9.1.0 @lerna/symlink-dependencies
    96 1.22M 19.54 GB ^9.1.0 @lerna/symlink-binary
    97 1.22M 19.54 GB ^9.1.0 @lerna/npm-install
    98 1.22M 19.50 GB ^9.1.0 @lerna/npm-publish
    99 1.22M 19.46 GB ^9.1.0 @lerna/create-symlink
    100 1.22M 19.45 GB ^9.1.0 @lerna/resolve-symlink
    npx github:Fuzzyma/e18e-tools fs-extra -n 100 -q -o md -D -U https://npm.devminer.xyz/registry
    # Downloads Traffic Version Package PR Notes
    1 236.27M 3775.87 GB axios
    2 231.51M 3699.79 GB async
    3 219.06M 3500.87 GB rxjs
    4 188.43M 3011.25 GB rollup
    5 145.65M 2327.55 GB node-addon-api
    6 133.45M 2132.69 GB neo-async
    7 87.36M 1396.10 GB handlebars
    8 62.92M 1005.59 GB ts-jest
    9 62.06M 991.72 GB luxon
    10 61.83M 988.15 GB extract-zip
    11 56.67M 905.58 GB cac
    12 52.53M 839.50 GB @parcel/watcher
    13 48.93M 781.87 GB @tootallnate/quickjs-emscripten
    14 36.52M 583.66 GB web-vitals
    15 33.40M 533.76 GB workerpool
    16 31.31M 500.30 GB ts-loader
    17 29.65M 473.79 GB serve-handler
    18 27.96M 446.83 GB less
    19 27.05M 432.32 GB @reduxjs/toolkit
    20 26.49M 423.35 GB package-manager-detector
    21 26.48M 423.25 GB @prisma/fetch-engine
    22 26.21M 418.89 GB prisma
    23 23.67M 378.28 GB @pmmmwh/react-refresh-webpack-plugin
    24 23.47M 375.02 GB log4js
    25 20.18M 322.55 GB http-status-codes
    26 19.86M 317.40 GB date-fns-tz
    27 18.67M 298.44 GB vue-eslint-parser
    28 17.33M 276.92 GB @prisma/client
    29 16.35M 261.28 GB katex
    30 16.15M 258.09 GB @flmngr/flmngr-server-node-express
    31 15.76M 251.93 GB @commitlint/cli
    32 14.09M 225.17 GB eslint-webpack-plugin
    33 14.03M 224.21 GB klaw-sync
    34 13.76M 219.84 GB chromatic
    35 13.19M 210.73 GB @google-cloud/firestore
    36 13.04M 208.33 GB mongoose
    37 13.03M 208.29 GB npm-run-all
    38 11.63M 185.90 GB lmdb
    39 11.06M 176.70 GB gitconfiglocal
    40 10.59M 169.31 GB outdent
    41 10.19M 162.92 GB file-system-cache
    42 10.06M 160.77 GB react-shallow-renderer
    43 8.14M 130.12 GB eslint-plugin-eslint-comments unmaintained #227
    44 8.08M 129.17 GB antd
    45 8.00M 127.86 GB aws-cdk
    46 7.74M 123.75 GB better-sqlite3
    47 7.63M 121.91 GB jimp-compact
    48 6.75M 107.88 GB @semantic-release/release-notes-generator
    49 6.73M 107.57 GB rc-upload
    50 6.37M 101.77 GB typescript-language-server
    51 6.22M 99.43 GB semantic-release
    52 5.94M 94.85 GB react-beautiful-dnd
    53 5.68M 90.74 GB @cucumber/cucumber
    54 5.48M 87.62 GB country-flag-icons
    55 5.41M 86.50 GB echarts
    56 5.35M 85.53 GB @vercel/build-utils
    57 5.19M 82.91 GB zrender
    58 5.10M 81.46 GB @changesets/git
    59 5.10M 81.43 GB nunjucks
    60 4.96M 79.26 GB @vercel/node
    61 4.94M 78.96 GB ts-node-dev
    62 4.93M 78.74 GB vuex
    63 4.82M 76.99 GB depcheck
    64 4.79M 76.59 GB @icons/material
    65 4.65M 74.26 GB rollup-plugin-postcss
    66 4.41M 70.48 GB @semantic-release/git
    67 4.31M 68.84 GB apexcharts
    68 4.25M 67.95 GB autolinker
    69 4.19M 66.92 GB vercel
    70 4.13M 66.05 GB @vercel/python
    71 4.12M 65.82 GB @vercel/go
    72 4.11M 65.69 GB @cypress/webpack-preprocessor
    73 4.05M 64.74 GB @vercel/ruby
    74 4.03M 64.41 GB @vercel/next
    75 4.01M 64.01 GB @hello-pangea/dnd
    76 4.00M 63.88 GB @vercel/static-build
    77 3.99M 63.68 GB flatpickr
    78 3.97M 63.41 GB fs-tree-diff
    79 3.96M 63.22 GB cypress-real-events
    80 3.96M 63.21 GB @vercel/redwood
    81 3.95M 63.15 GB resolve-package-path
    82 3.95M 63.06 GB @vercel/hydrogen
    83 3.83M 61.25 GB node-sass
    84 3.75M 59.90 GB @rspack/plugin-react-refresh
    85 3.73M 59.61 GB jest-preset-angular
    86 3.52M 56.29 GB tocbot
    87 3.19M 50.96 GB fast-stable-stringify
    88 3.17M 50.72 GB yeoman-environment
    89 3.16M 50.52 GB stats-gl
    90 3.02M 48.26 GB vue-resize
    91 3.01M 48.15 GB babel-preset-env
    92 2.89M 46.20 GB jsqr
    93 2.86M 45.68 GB react-idle-timer
    94 2.81M 44.89 GB @segment/analytics-next
    95 2.74M 43.75 GB node-watch
    96 2.70M 43.14 GB broccoli-funnel
    97 2.66M 42.57 GB @stencil/core
    98 2.61M 41.70 GB @rollup/wasm-node
    99 2.51M 40.10 GB style-dictionary
    100 2.46M 39.24 GB @serverless/platform-client
  14. PowerKiKi commented on Feb 11, 2026

    @PowerKiKi

    Those list of dependencies are quite cool, and useful, but also very overwhelming with 100 packages each. Because who will open 200 PRs ? What about shorter list, maybe the top 20 as a first step, so we don't feel like it's a lost cause before even starting ?

    Also it's not super clear what the difference between the two list ? maybe the tool could also generate a short explanation of the output, so that newcomers might have an idea what it's about ?

  15. 43081j commented on Feb 11, 2026

    @43081j
    Collaborator

    i agree lets focus on the top few 👍

    the 2nd list is devDependencies, so you can probably focus on the first list for now.

    there's also a few orgs in that list we could tackle in one go by reaching out to them in an issue. e.g. changesets, lera, react-native-community, etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    umbrella issueThis issue contains a list of dependents of a package and tracks the progress in each

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions