Skip to content

Are We ESM Yet?

NO

37% of packages are ESM-ready though

Updated: 2026-04-13

Next refresh: Mondays at 06:00 UTC

Trend

Area chart of ESM-ready package percentage over time. Latest point: 2026-04-13, 37% ESM-ready, which is 1,832 of 4,996 total packages.

  • 2021-08-24: 8% ESM-ready (436 of 5,617 packages)
  • 2021-11-09: 9% ESM-ready (530 of 5,647 packages)
  • 2022-08-01: 12% ESM-ready (703 of 5,734 packages)
  • 2022-11-04: 13% ESM-ready (734 of 5,747 packages)
  • 2023-05-29: 17% ESM-ready (1,047 of 6,240 packages)
  • 2023-11-22: 18% ESM-ready (1,244 of 6,818 packages)
  • 2024-05-27: 22% ESM-ready (1,555 of 7,042 packages)
  • 2024-11-27: 26% ESM-ready (2,094 of 8,087 packages)
  • 2025-06-05: 30% ESM-ready (2,568 of 8,677 packages)
  • 2025-12-04: 33% ESM-ready (4,726 of 14,159 packages)
  • 2026-02-23: 33% ESM-ready (4,876 of 14,888 packages)
  • 2026-02-24: 36% ESM-ready (1,804 of 4,996 packages)
  • 2026-02-25: 36% ESM-ready (1,805 of 4,996 packages)
  • 2026-02-26: 36% ESM-ready (1,806 of 4,996 packages)
  • 2026-02-27: 36% ESM-ready (1,806 of 4,996 packages)
  • 2026-03-02: 36% ESM-ready (1,808 of 4,996 packages)
  • 2026-03-09: 36% ESM-ready (1,809 of 4,996 packages)
  • 2026-03-16: 36% ESM-ready (1,822 of 4,996 packages)
  • 2026-03-23: 37% ESM-ready (1,824 of 4,996 packages)
  • 2026-03-30: 37% ESM-ready (1,826 of 4,996 packages)
  • 2026-04-06: 37% ESM-ready (1,829 of 4,996 packages)
  • 2026-04-13: 37% ESM-ready (1,832 of 4,996 packages)

ESM-ready = ESM-only + dual packages

Breakdown

ESM-only 17% dual 19% faux 8% CJS 55%

Glossary

ESM-only
Packages that only provide ESM (no CJS). type: 'module' or .mjs entry. Native import/export.
dual
Both ESM and CJS via exports. Works in either environment.
faux
Legacy "module" field. Not true Node ESM; no type: 'module' or proper exports.
CJS
CommonJS. Uses require()/module.exports.

How data is collected

Data comes from a curated list of 5,000 high-impact npm packages from npm-high-impact. Each package's latest version is fetched from the npm registry and classified by inspecting its package.json

Classification looks at type, exports, module, main, and file extensions (.mjs / .cjs). Known spam and placeholder packages are excluded.

The crawl runs weekly on Mondays at 06:00 UTC via GitHub Actions. Historical data is bootstrapped from npm-esm-vs-cjs.

Data sources & credits