# What changed in @changesets/cli

> 65 changes in @changesets/cli 2 to 3 from its official release notes, upgrade guides and advisories: 14 breaking, 1 deprecations, 11 new APIs and options. Each one cited. Sources checked 2026-10-18. HTML: https://unstale.sh/npm/@changesets/cli/

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

## @changesets/cli 3

### Breaking changes

- The prettier option was removed in favor of format; migrate prettier: false to format: false or remove the option for automatic formatter detection. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The changeset tag command was renamed to changeset git-tag. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Versioned prerelease changesets are stored in .changeset/pre/ rather than the root, so they can be edited or deleted independently of queued changesets. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The --sinceMaster flag is no longer supported; use --since=master or --since=main instead. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Exits with code 1 when there are no unreleased changesets, making no-op version steps detectable. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Supported package manager versions are specified, including npm >=10.9.0, pnpm >=10.0.0, and yarn >=4.5.2. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The package is now published as an ES module. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The deprecated snapshot option was removed; use snapshot.useCalculatedVersion instead. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Supported Node versions are now ^22.11 || ^24 || >=26. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Package detection now supports npm monorepos, while dropping detection support for Bolt monorepos. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The unused initialVersions property and its handling have been removed. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Private packages are no longer versioned by default; set privatePackages to true to version and tag them, or privatePackages.version to true to version without tagging. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Yarn Classic is no longer supported. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### Deprecations

- A named export was added that mirrors the current default export, providing a transition path before the default export is removed in the next major release. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### New APIs and options

- The add command accepts --major, --minor, and --patch flags. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The format option supports auto, prettier, oxfmt, deno, and dprint; false disables formatting. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The new command requires --out-dir and writes package tarballs and an enriched publish-plan.json there, from the workspace or a saved plan via --from-plan. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The publish and tag commands accept CHANGESETS_OUTPUT and produce NDJSON output in the specified file. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Publish packages from a previously created pack output directory with --from-pack-dir. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- A new command inspects which packages would be published or tagged, with optional JSON output. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Initial OTP values can now be read from npm and pnpm environment variables. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Commands supporting --output, including status and publish-plan, can use CHANGESETS_OUTPUT as an equivalent environment variable. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The prerelease template supports {commit-short}, a seven-character variant of {commit}. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### Performance

- Node's Compile Cache is enabled to improve CLI startup speed. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### Behavior and default changes

- Adding a changeset no longer asks for confirmation; it always adds one, which can then be edited or deleted. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Array-valued --major, --minor, and --patch flags accept comma-separated values; whitespace is trimmed and empty entries ignored. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The init command interactively configures the changelog generator, commit preferences, publish access, and base branch instead of silently writing default configuration. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Package manager calls go through npm, pnpm, or yarn CLIs during publish; Yarn Berry can update workspace protocol ranges as part of publishing. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Authentication handling removes the preflight OTP requirement check and falls back to interactive auth when the package manager reports authentication is required. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The array-valued --ignore flag accepts comma-separated values; whitespace is trimmed and empty entries ignored. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Existing pre.json files are automatically migrated to the new prerelease changeset structure when changeset version or changeset status runs. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- CommitFunctions can now be synchronous or asynchronous; defaultCommitFunctions are now synchronous. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Releases are grouped into dependency-aware chunks in publish order. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- The ignore config option now allows unmatched glob patterns. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Packages are now listed in alphabetical order when possible. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- A peer dependency update now bumps dependent packages by patch instead of major; add a major changeset manually when the update is breaking. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- In prerelease mode, packages with only prerelease versions published use the prerelease tag when the target registry does not auto-assign latest; npm continues to use latest. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Warnings about using v1 configs are removed; those configs are silently ignored. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Dependency ranges are now updated in the workspace root package.json. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### Tooling

- Adds a review message when exiting pre mode. (3.0.2) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.2)
- Choosing a change type now previews which part of the version it affects. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Package selection now indicates whether a package is private. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

### Fixes and other changes

- Fixed pnpm 10 compatibility with npm 12 when reading registry information, packing, and publishing packages. (3.0.3) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.3)
- Fixed semver ranges being cut off when updating internal dependencies. (3.0.3) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.3)
- Publish errors are reported per package, successful publishes are still tagged after another package fails, and authentication retries avoid republishing completed packages. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Ignored packages are now respected for both publishing and private package tagging. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Publishing handles npm and pnpm JSON errors more reliably, including already-published errors and pnpm 11 interactive OTP retries. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- Publish failures no longer produce accidental success logs. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)
- For pnpm projects, scope-based publishConfig registry overrides and publishConfig.registry are ignored during unpublished package checks to match pnpm behavior. (3.0.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%403.0.0)

## @changesets/cli 2

### Breaking changes

- Unsupported flags for individual CLI commands now produce an error and print the matching command usage. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)

### New APIs and options

- Adds --message (or -m) to provide the changeset summary from the command line, skipping the summary prompt while retaining final confirmation. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- Adds a flag to choose the branch, tag, or git ref used to detect changed packages; falls back to baseBranch when omitted. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)

### Behavior and default changes

- Help now exits early on all subcommands, printing per-command usage for known subcommands or general help otherwise. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)
- The output path can now be absolute. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- Custom commit options can now be imported from ES modules as well as CommonJS modules. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- The CLI can now be run from nested project directories when a parent directory contains the `.changeset` directory. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- Delegates OTP prompting to the package manager, enabling its native web auth support. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- Private packages can depend on skipped packages without also being skipped, because private packages are not published to npm. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)

### Fixes and other changes

- Already-published version detection now handles npm 12’s array-wrapped successful npm info output, preventing attempts to republish existing versions. (2.31.1) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.1)
- Publishing now gracefully handles stale npm info data that could lead to duplicate publish attempts. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)
- Publishing now preserves configured registry URLs, fixing npm authentication for path-based registries. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)
- Valid explicit workspace ranges and aliases are no longer rewritten unnecessarily, and workspace path references are handled correctly during versioning. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)
- Detection of the published state is improved for prerelease-only packages without a latest dist-tag on GitHub Packages. (2.31.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.31.0)
- Fixes confusing prompt labels when entering a changeset summary after external editor fallback. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
- Computes terminal size lazily to avoid spurious stderr output in non-interactive mode. (2.30.0) — [release notes](https://github.com/changesets/changesets/releases/tag/%40changesets/cli%402.30.0)
