npm / @changesets/cli
@changesets/cli
What changed in @changesets/cli 2 to 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
14 breaking1 deprecations11 new APIs and options1 performance21 behavior and defaults3 tooling14 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli init@changesets/cli 349 changes
Breaking changes 13
The prettier option was removed in favor of format; migrate prettier: false to format: false or remove the option for automatic formatter detection.
The changeset tag command was renamed to changeset git-tag.
Versioned prerelease changesets are stored in .changeset/pre/ rather than the root, so they can be edited or deleted independently of queued changesets.
The --sinceMaster flag is no longer supported; use --since=master or --since=main instead.
Exits with code 1 when there are no unreleased changesets, making no-op version steps detectable.
Supported package manager versions are specified, including npm >=10.9.0, pnpm >=10.0.0, and yarn >=4.5.2.
The package is now published as an ES module.
The deprecated snapshot option was removed; use snapshot.useCalculatedVersion instead.
Supported Node versions are now ^22.11 || ^24 || >=26.
Package detection now supports npm monorepos, while dropping detection support for Bolt monorepos.
The unused initialVersions property and its handling have been removed.
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.
Yarn Classic is no longer supported.
Deprecations 1
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.
New APIs and options 9
The add command accepts --major, --minor, and --patch flags.
The format option supports auto, prettier, oxfmt, deno, and dprint; false disables formatting.
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.
The publish and tag commands accept CHANGESETS_OUTPUT and produce NDJSON output in the specified file.
Publish packages from a previously created pack output directory with --from-pack-dir.
A new command inspects which packages would be published or tagged, with optional JSON output.
Initial OTP values can now be read from npm and pnpm environment variables.
Commands supporting --output, including status and publish-plan, can use CHANGESETS_OUTPUT as an equivalent environment variable.
The prerelease template supports {commit-short}, a seven-character variant of {commit}.
Performance 1
Node's Compile Cache is enabled to improve CLI startup speed.
Behavior and default changes 15
Adding a changeset no longer asks for confirmation; it always adds one, which can then be edited or deleted.
Array-valued --major, --minor, and --patch flags accept comma-separated values; whitespace is trimmed and empty entries ignored.
The init command interactively configures the changelog generator, commit preferences, publish access, and base branch instead of silently writing default configuration.
Package manager calls go through npm, pnpm, or yarn CLIs during publish; Yarn Berry can update workspace protocol ranges as part of publishing.
Authentication handling removes the preflight OTP requirement check and falls back to interactive auth when the package manager reports authentication is required.
The array-valued --ignore flag accepts comma-separated values; whitespace is trimmed and empty entries ignored.
Existing pre.json files are automatically migrated to the new prerelease changeset structure when changeset version or changeset status runs.
CommitFunctions can now be synchronous or asynchronous; defaultCommitFunctions are now synchronous.
Releases are grouped into dependency-aware chunks in publish order.
The ignore config option now allows unmatched glob patterns.
Packages are now listed in alphabetical order when possible.
A peer dependency update now bumps dependent packages by patch instead of major; add a major changeset manually when the update is breaking.
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.
Warnings about using v1 configs are removed; those configs are silently ignored.
Dependency ranges are now updated in the workspace root package.json.
Tooling 3
Adds a review message when exiting pre mode.
Choosing a change type now previews which part of the version it affects.
Package selection now indicates whether a package is private.
Fixes and other changes 7
Fixed pnpm 10 compatibility with npm 12 when reading registry information, packing, and publishing packages.
Fixed semver ranges being cut off when updating internal dependencies.
Publish errors are reported per package, successful publishes are still tagged after another package fails, and authentication retries avoid republishing completed packages.
Ignored packages are now respected for both publishing and private package tagging.
Publishing handles npm and pnpm JSON errors more reliably, including already-published errors and pnpm 11 interactive OTP retries.
Publish failures no longer produce accidental success logs.
For pnpm projects, scope-based publishConfig registry overrides and publishConfig.registry are ignored during unpublished package checks to match pnpm behavior.
@changesets/cli 216 changes
Breaking changes 1
Unsupported flags for individual CLI commands now produce an error and print the matching command usage.
New APIs and options 2
Adds --message (or -m) to provide the changeset summary from the command line, skipping the summary prompt while retaining final confirmation.
Adds a flag to choose the branch, tag, or git ref used to detect changed packages; falls back to baseBranch when omitted.
Behavior and default changes 6
Help now exits early on all subcommands, printing per-command usage for known subcommands or general help otherwise.
The output path can now be absolute.
Custom commit options can now be imported from ES modules as well as CommonJS modules.
The CLI can now be run from nested project directories when a parent directory contains the
.changesetdirectory.Delegates OTP prompting to the package manager, enabling its native web auth support.
Private packages can depend on skipped packages without also being skipped, because private packages are not published to npm.
Fixes and other changes 7
Already-published version detection now handles npm 12’s array-wrapped successful npm info output, preventing attempts to republish existing versions.
Publishing now gracefully handles stale npm info data that could lead to duplicate publish attempts.
Publishing now preserves configured registry URLs, fixing npm authentication for path-based registries.
Valid explicit workspace ranges and aliases are no longer rewritten unnecessarily, and workspace path references are handled correctly during versioning.
Detection of the published state is improved for prerelease-only packages without a latest dist-tag on GitHub Packages.
Fixes confusing prompt labels when entering a changeset summary after external editor fallback.
Computes terminal size lazily to avoid spurious stderr output in non-interactive mode.