unstale

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

@unstale/cli on npm

@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.

    3.0.0release notes

  • The changeset tag command was renamed to changeset git-tag.

    3.0.0release notes

  • 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.0release notes

  • The --sinceMaster flag is no longer supported; use --since=master or --since=main instead.

    3.0.0release notes

  • Exits with code 1 when there are no unreleased changesets, making no-op version steps detectable.

    3.0.0release notes

  • Supported package manager versions are specified, including npm >=10.9.0, pnpm >=10.0.0, and yarn >=4.5.2.

    3.0.0release notes

  • The package is now published as an ES module.

    3.0.0release notes

  • The deprecated snapshot option was removed; use snapshot.useCalculatedVersion instead.

    3.0.0release notes

  • Supported Node versions are now ^22.11 || ^24 || >=26.

    3.0.0release notes

  • Package detection now supports npm monorepos, while dropping detection support for Bolt monorepos.

    3.0.0release notes

  • The unused initialVersions property and its handling have been removed.

    3.0.0release notes

  • 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.0release notes

  • Yarn Classic is no longer supported.

    3.0.0release notes

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.

    3.0.0release notes

New APIs and options 9

  • The add command accepts --major, --minor, and --patch flags.

    3.0.0release notes

  • The format option supports auto, prettier, oxfmt, deno, and dprint; false disables formatting.

    3.0.0release notes

  • 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.0release notes

  • The publish and tag commands accept CHANGESETS_OUTPUT and produce NDJSON output in the specified file.

    3.0.0release notes

  • Publish packages from a previously created pack output directory with --from-pack-dir.

    3.0.0release notes

  • A new command inspects which packages would be published or tagged, with optional JSON output.

    3.0.0release notes

  • Initial OTP values can now be read from npm and pnpm environment variables.

    3.0.0release notes

  • Commands supporting --output, including status and publish-plan, can use CHANGESETS_OUTPUT as an equivalent environment variable.

    3.0.0release notes

  • The prerelease template supports {commit-short}, a seven-character variant of {commit}.

    3.0.0release notes

Performance 1

  • Node's Compile Cache is enabled to improve CLI startup speed.

    3.0.0release notes

Behavior and default changes 15

  • Adding a changeset no longer asks for confirmation; it always adds one, which can then be edited or deleted.

    3.0.0release notes

  • Array-valued --major, --minor, and --patch flags accept comma-separated values; whitespace is trimmed and empty entries ignored.

    3.0.0release notes

  • The init command interactively configures the changelog generator, commit preferences, publish access, and base branch instead of silently writing default configuration.

    3.0.0release notes

  • 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.0release notes

  • Authentication handling removes the preflight OTP requirement check and falls back to interactive auth when the package manager reports authentication is required.

    3.0.0release notes

  • The array-valued --ignore flag accepts comma-separated values; whitespace is trimmed and empty entries ignored.

    3.0.0release notes

  • Existing pre.json files are automatically migrated to the new prerelease changeset structure when changeset version or changeset status runs.

    3.0.0release notes

  • CommitFunctions can now be synchronous or asynchronous; defaultCommitFunctions are now synchronous.

    3.0.0release notes

  • Releases are grouped into dependency-aware chunks in publish order.

    3.0.0release notes

  • The ignore config option now allows unmatched glob patterns.

    3.0.0release notes

  • Packages are now listed in alphabetical order when possible.

    3.0.0release notes

  • 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.0release notes

  • 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.0release notes

  • Warnings about using v1 configs are removed; those configs are silently ignored.

    3.0.0release notes

  • Dependency ranges are now updated in the workspace root package.json.

    3.0.0release notes

Tooling 3

  • Adds a review message when exiting pre mode.

    3.0.2release notes

  • Choosing a change type now previews which part of the version it affects.

    3.0.0release notes

  • Package selection now indicates whether a package is private.

    3.0.0release notes

Fixes and other changes 7

  • Fixed pnpm 10 compatibility with npm 12 when reading registry information, packing, and publishing packages.

    3.0.3release notes

  • Fixed semver ranges being cut off when updating internal dependencies.

    3.0.3release notes

  • Publish errors are reported per package, successful publishes are still tagged after another package fails, and authentication retries avoid republishing completed packages.

    3.0.0release notes

  • Ignored packages are now respected for both publishing and private package tagging.

    3.0.0release notes

  • Publishing handles npm and pnpm JSON errors more reliably, including already-published errors and pnpm 11 interactive OTP retries.

    3.0.0release notes

  • Publish failures no longer produce accidental success logs.

    3.0.0release notes

  • For pnpm projects, scope-based publishConfig registry overrides and publishConfig.registry are ignored during unpublished package checks to match pnpm behavior.

    3.0.0release notes

@changesets/cli 216 changes

Breaking changes 1

  • Unsupported flags for individual CLI commands now produce an error and print the matching command usage.

    2.31.0release notes

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.

    2.30.0release notes

  • Adds a flag to choose the branch, tag, or git ref used to detect changed packages; falls back to baseBranch when omitted.

    2.30.0release notes

Behavior and default changes 6

  • Help now exits early on all subcommands, printing per-command usage for known subcommands or general help otherwise.

    2.31.0release notes

  • The output path can now be absolute.

    2.30.0release notes

  • Custom commit options can now be imported from ES modules as well as CommonJS modules.

    2.30.0release notes

  • The CLI can now be run from nested project directories when a parent directory contains the .changeset directory.

    2.30.0release notes

  • Delegates OTP prompting to the package manager, enabling its native web auth support.

    2.30.0release notes

  • Private packages can depend on skipped packages without also being skipped, because private packages are not published to npm.

    2.30.0release notes

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.

    2.31.1release notes

  • Publishing now gracefully handles stale npm info data that could lead to duplicate publish attempts.

    2.31.0release notes

  • Publishing now preserves configured registry URLs, fixing npm authentication for path-based registries.

    2.31.0release notes

  • Valid explicit workspace ranges and aliases are no longer rewritten unnecessarily, and workspace path references are handled correctly during versioning.

    2.31.0release notes

  • Detection of the published state is improved for prerelease-only packages without a latest dist-tag on GitHub Packages.

    2.31.0release notes

  • Fixes confusing prompt labels when entering a changeset summary after external editor fallback.

    2.30.0release notes

  • Computes terminal size lazily to avoid spurious stderr output in non-interactive mode.

    2.30.0release notes