# What changed in commander

> 8 changes in commander 14 to 15 from its official release notes, upgrade guides and advisories: 4 breaking, 1 deprecations. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/commander/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## commander 15

### Breaking changes

- Commander 15 is ESM only, which may require configuration for tooling that does not support importing ESM from CommonJS. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)
- The deprecated commander/esm.mjs export has been removed. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)
- Only a lone negative option sets the default option value to true; defining both positive and negative options in either order no longer implicitly sets a default. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)
- Commander 15 requires Node.js v22.12.0 or higher. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)

### Deprecations

- Commander 14 moves into maintenance and will receive security updates through May 2027, which may inform upgrade timing. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)

### Behavior and default changes

- Error messages now show excess command arguments, helping developers identify arguments that were not expected. (15.0.0) — [release notes](https://github.com/tj/commander.js/releases/tag/v15.0.0)

## commander 14

### Behavior and default changes

- Old major versions are supported for 12 months instead of only the previous major version, giving developers a more predictable end-of-life. (14.0.3) — [release notes](https://github.com/tj/commander.js/releases/tag/v14.0.3)

### Fixes and other changes

- The typing for the deprecated callback parameter to .outputHelp() is clarified. (14.0.3) — [release notes](https://github.com/tj/commander.js/releases/tag/v14.0.3)
