Skip to content

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 .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