Are We ESM Yet?
NO
36% of packages are ESM-ready though
Updated: 2026-02-27
Next refresh: Mondays at 06:00 UTC
Trend
ESM-ready = ESM-only + dual packages
Breakdown
ESM-only 17% dual 19% faux 8% CJS 56%
Glossary
ESM-only-
Packages that only provide ESM (no CJS).
type: 'module'or.mjsentry. Nativeimport/export. dual-
Both ESM and CJS via
exports. Works in either environment. faux-
Legacy "module" field. Not true Node ESM; no
type: 'module'or properexports. 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
- npm-high-impact — curated package list
- npm-esm-vs-cjs — historical classification data
- npm registry — package metadata