canirequire

canirequireESM-only › commander

Is commander ESM-only? Can you require() it?

the complete solution for node.js command-line programs

Last verified Sep 9, 2026 against commander@15.0.0. JSON

ESM-only ESM-only since 15.0.0 — last CommonJS version is 14.0.3

commander dropped its CommonJS build in 15.0.0 (May 2026). The last version you can require() on every Node.js version, including 18 and older, is 14.0.3, published Jan 31, 2026.

On Node.js 20.19+, 22.12+ and every newer release, require("commander") works anyway: Node can load synchronous ES modules through require(). Verified on Node 22, 24, 26. Node.js 18 and older still fail with ERR_REQUIRE_ESM.

commander@15.0.0 declares engines ">=22.12.0", so Node.js 18, 20 are outside its supported range regardless of module format.

Latest
15.0.0 (May 29, 2026)
Module format
ESM-only
Last CommonJS version
14.0.3
ESM-only since
15.0.0 (May 29, 2026)
TypeScript types
Bundled
Node engines
>=22.12.0
Weekly downloads
451.1M
License
MIT

Does commander@15.0.0 actually load? Runtime test results

Installed and executed on Sep 9, 2026 with require("commander") from a CommonJS file and import "commander" from an ES module.

Runtimerequire("commander")import "commander"
Node.js 18✗ failsERR_REQUIRE_ESM✓ works
Node.js 20✓ works✓ works
Node.js 22✓ works✓ works
Node.js 24✓ works✓ works
Node.js 26✓ works✓ works
Bun 1.4✓ works✓ works

How to import commander

ES modules (import)

import commander from "commander";

CommonJS (require)

// Node.js 20.19+ / 22.12+ / newer (package has no top-level await):
const commander = require("commander");

// Any Node.js version:
const commander = await import("commander");

// Or pin the last CommonJS release:
// npm install commander@14.0.3

Module format by version

Derived from the type, main and exports fields of every stable release on npm (103 versions; the newest 60 shown).

VersionsFormatFirst published
15.0.0ESM-onlyMay 29, 2026
9.0.0 – 14.0.3Dual (CommonJS + ESM)Jan 29, 2022
2.8.1 – 8.3.0CommonJSApr 24, 2015

Frequently asked

Is commander ESM-only?

commander@15.0.0 is ESM-only. commander dropped its CommonJS build in 15.0.0 (May 2026). The last version you can require() on every Node.js version, including 18 and older, is 14.0.3, published Jan 31, 2026.

Which version of commander still supports CommonJS / require()?

14.0.3 is the last version of commander with a CommonJS build. Install it with "npm install commander@14.0.3". Every version from 15.0.0 on is ESM-only.

How do I use commander from a CommonJS file?

Use a dynamic import: const mod = await import("commander"). On Node.js 20.19+, 22.12+ and newer, a plain require("commander") also works for ESM packages that do not use top-level await. Alternatively pin commander@14.0.3.

Does commander work in Bun?

Yes. import "commander" loaded successfully in Bun 1.4 on Sep 9, 2026.

Does commander ship TypeScript types?

Yes. commander bundles its own type declarations; no @types package is needed.

Links

Other esm-only packages

Similar popularity