---
title: "commander Breaking Changes on npm | Since.dev"
description: "What each commander release removed, renamed or changed: 43 breaking changes in 4 versions on npm, each with its source."
canonical_url: https://since.dev/packages/npm/commander
last_updated: 2026-05-29
---

# commander breaking changes

Every breaking API change we have recorded in commander on npm: 43 breaking changes in 4 versions. Below are its newest 4 versions, removals and renames first, each with its source.

Newest change May 29, 2026

## 15.0.0

28 breaking changes, first published May 29, 2026.

- **Removed**  

Code running on older Node.js versions will no longer work with Commander 15; upgrade Node.js first. [github.com](https://github.com/tj/commander.js/releases/tag/v15.0.0)
- **Removed** `commander.esm.mjs`  

Removed the deprecated commander/esm.mjs export in commander 15.0.0 [github.com](https://github.com/tj/commander.js/releases/tag/v15.0.0)
- **Removed** `esm.mjs:AddHelpTextContext`  

AddHelpTextContext was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:AddHelpTextPosition`  

AddHelpTextPosition was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:Argument`  

Argument was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:Command`  

Command was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:CommanderError`  

CommanderError was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:CommandOptions`  

CommandOptions was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:createArgument`  

createArgument was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)
- **Removed** `esm.mjs:createCommand`  

createCommand was removed in commander 15.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/15.0.0)

And 18 more in this version.

## 14.0.0

2 breaking changes, first published May 18, 2025.

- **Removed**  

Commander 14 drops support for older Node.js versions. Users on Node.js versions below v20 must upgrade Node.js before upgrading Commander. [github.com](https://github.com/tj/commander.js/releases/tag/v14.0.0)
- **Signature changed** `Command.argument`  

Was argument<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this; now argument<T>(flags: string, description: string, parseArg: (value: string, previous: T) => T, defaultValue?: T): this. [npmjs.com](https://www.npmjs.com/package/commander/v/14.0.0)

## 13.0.0

6 breaking changes, first published December 30, 2024.

- **Removed** `Help.wrap`  

Help.wrap() was refactored away. Use formatItem() or boxWrap() instead. [npmjs.com](https://www.npmjs.com/package/commander/v/13.0.0)
- **Removed** `HelpConfiguration.wrap`  

HelpConfiguration.wrap was removed in commander 13.0.0 [npmjs.com](https://www.npmjs.com/package/commander/v/13.0.0)
- **Behavior changed** `Option`  

Option flags such as multiple characters after a single dash now throw during Option construction. Use supported flag forms. [github.com](https://github.com/tj/commander.js/releases/tag/v13.0.0)
- **Behavior changed** `parse`  

Calling parse() more than once now throws if storeOptionsAsProperties is true. Parse only once in that configuration. [github.com](https://github.com/tj/commander.js/releases/tag/v13.0.0)
- **Default changed** `allowExcessArguments`  

Passing more command-arguments than declared now fails with an error. To keep the old behaviour, call allowExcessArguments() explicitly. [github.com](https://github.com/tj/commander.js/releases/tag/v13.0.0)
- **Signature changed** `Command.action`  

The TypeScript parameters for the action handler callback now include the implicit this, which can affect typed handlers. [npmjs.com](https://www.npmjs.com/package/commander/v/13.0.0)

## 12.0.0

7 breaking changes, first published February 3, 2024.

- **Removed**  

Commander 12 requires Node.js v18 or higher, so users on older Node.js versions must upgrade Node.js before using this release. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Removed** `default`  

The default export of a global Command instance from CommonJS was removed; switch to the named program export or create a new Command. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Behavior changed**  

When a spawned executable subcommand terminates due to a signal, the parent now exits with a non-zero exit code, which can change scripts that expected success. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Behavior changed** `addCommand`  

Adding a command whose name or alias is already in use now throws, so programs with duplicate command names must be fixed. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Behavior changed** `option`  

Adding an option whose flag is already in use by another option now throws, so programs with duplicate flags must be fixed. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Behavior changed** `storeOptionsAsProperties`  

Calling storeOptionsAsProperties after an option value has been set now throws an error; call it before setting option values. [github.com](https://github.com/tj/commander.js/releases/tag/v12.0.0)
- **Signature changed** `Command.addHelpCommand`  

Was addHelpCommand(enableOrNameAndArgs?: string | boolean, description?: string): this; now addHelpCommand(cmd: Command): this addHelpCommand(enable?: boolean): this addHelpCommand(nameAndArgs: string, description?: string): this. [npmjs.com](https://www.npmjs.com/package/commander/v/12.0.0)

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
