Ten packages that depend on each other cannot be versioned by hand: bumping @shop/core means bumping the range inside @shop/cli and writing two changelogs. Changesets 12,450 (github.com/changesets/changesets (https://github.com/changesets/changesets 12,450 ), MIT, @changesets/cli 3.0.3) moves that work to the pull request that caused it. npx changeset asks which packages changed and how far, then writes a Markdown file you commit with the code:
---
"@shop/core": minor
"@shop/cli": patch
---
Add a `currency` option to `vat()`.Because it is a file with a random name, two pull requests never conflict. At release time one command consumes every pending file, bumps versions, rewrites internal ranges and generates changelogs:
$ npx changeset status Packages to be bumped: - minor - @shop/core - patch - @shop/cli $ npx changeset version # then inspect the manifests @shop/core 0.2.0 -> 0.3.0 @shop/cli 0.1.0 -> 0.1.1 (dependency range -> ^0.3.0)
Note the effect on @shop/cli: its range was rewritten and it took a patch bump, so consumers get a release that actually points at the new core. changeset publish then publishes only the packages whose version is not yet on the registry and creates the Git 1,932 tags. Lerna 3,824 does the same bookkeeping but decides at release time; per-package npm 2,036 version leaves ranges and changelogs to you.
Set "updateInternalDependencies": "patch" in .changeset/config.json so internal bumps propagate, and run changeset status --since=origin/main in CI to fail any pull request that changes a published package without declaring a release.