Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,14 +143,13 @@ Tools like semantic-release infer version bumps from commit messages (`feat:`

## Why not just use changesets?

Bumpy is built as a successor to [🦋changesets](https://github.com/changesets/changesets). Changesets is mature and widely adopted, but has stagnated - hundreds of open issues around core design problems that are unlikely to be fixed without a rewrite. See [differences from changesets](https://github.com/dmno-dev/bumpy/blob/main/docs/differences-from-changesets.md) for a detailed comparison with links to specific issues. The biggest pain points bumpy addresses:
Bumpy is built as a successor to [🦋changesets](https://github.com/changesets/changesets). Changesets is mature and widely adopted, and its v3 release (August 2026) fixed many long-standing complaints - forced peer-dep major bumps, unresolved `workspace:` ranges, no non-interactive mode, publish ordering. The remaining differences are structural. See [differences from changesets](https://github.com/dmno-dev/bumpy/blob/main/docs/differences-from-changesets.md) for a detailed comparison with links to specific issues. The biggest ones:

- **Sane dependency propagation** - changesets hardcodes aggressive behavior where a minor bump triggers a major bump on all peer dependents. Bumpy uses a [three-phase algorithm](https://github.com/dmno-dev/bumpy/blob/main/docs/version-propagation.md) with sensible defaults and full configurability.
- **Workspace protocol resolution** - changesets uses `npm publish` even in pnpm/yarn workspaces, so `workspace:^` and `catalog:` protocols are NOT resolved, resulting in broken published packages.
- **Custom publish commands** - changesets is hardcoded to `npm publish`. Bumpy supports per-package custom publish for VSCode extensions, Docker images, JSR, etc.
- **Flexible package management** - changesets treats all private packages the same. Bumpy lets you include/exclude any package individually.
- **Configurable dependency propagation** - changesets hardcodes peer dep behavior (v2 forced major bumps on all peer dependents; v3 forces patch, assuming every peer change is non-breaking). Bumpy uses a [three-phase algorithm](https://github.com/dmno-dev/bumpy/blob/main/docs/version-propagation.md) that matches the triggering bump level by default, with full configurability.
- **Custom publish commands** - changesets only publishes npm packages. Bumpy supports per-package custom publish for VSCode extensions, Docker images, JSR, etc.
- **Catalog & protocol resolution** - changesets v3 resolves `workspace:^` by delegating to pnpm/yarn at publish time, but `catalog:` is still unsupported. Bumpy resolves all workspace protocols and catalogs (pnpm, Bun, Yarn) itself - so resolution also works for custom publish targets.
- **CI without a separate action or bot** - changesets requires installing a [GitHub App](https://github.com/apps/changeset-bot) _and_ using a [separate GitHub Action](https://github.com/changesets/action). Bumpy replaces both with two CLI commands (`bumpy ci check` + `bumpy ci release`) that run directly in your workflows - no extra repos to trust, no app installation requiring org admin approval.
- **Prerelease channels that don't corrupt state** - changesets' prerelease mode is described in [their own docs](https://github.com/changesets/changesets/blob/main/docs/prereleases.md) as "very complicated" with states "very hard to fix." Bumpy uses [branch-based channels](https://github.com/dmno-dev/bumpy/blob/main/docs/prereleases.md) where prerelease versions are never committed - no global mode file to poison unrelated releases.
- **Prerelease channels that don't corrupt state** - changesets' prerelease mode is described in [their own docs](https://github.com/changesets/changesets/blob/main/docs/prereleases.md) as "very complicated" with states "very hard to fix" (improved bookkeeping in v3, but still a committed global mode). Bumpy uses [branch-based channels](https://github.com/dmno-dev/bumpy/blob/main/docs/prereleases.md) where prerelease versions are never committed - no global mode file to poison unrelated releases.
- **Automatic migration** - `bumpy init` detects `.changeset/`, renames it to `.bumpy/`, migrates config, keeps pending files, and offers to uninstall `@changesets/cli`.

## Development
Expand Down
12 changes: 6 additions & 6 deletions docs/comparisons.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ There are several great tools in the release management space, each with differe

## Changesets

[Changesets](https://github.com/changesets/changesets) is the most direct comparison — bumpy uses the same bump-file-per-PR model and is designed as a successor to it. Changesets is mature, widely adopted, and battle-tested across many large monorepos.
[Changesets](https://github.com/changesets/changesets) is the most direct comparison — bumpy uses the same bump-file-per-PR model and is designed as a successor to it. Changesets is mature, widely adopted, and battle-tested across many large monorepos. The v3 release (August 2026) fixed many long-standing v2 complaints — forced peer-dep major bumps, unresolved `workspace:` ranges, no non-interactive `add`, publish ordering — which narrows the gap, though the remaining differences below are structural.

**Where changesets shines:**

- Proven at scale with years of production use across the ecosystem
- Large community with extensive documentation and third-party integrations
- Stable, well-understood behavior
- v3 modernized the core: sane peer-dep bumps, publishes routed through pnpm/yarn, dependency-ordered publishing, better failure recovery

**Where bumpy differs:**

- **Dependency propagation** — changesets hardcodes aggressive peer dep behavior (a minor bump can trigger major bumps on dependents). Bumpy uses a [configurable three-phase algorithm](./version-propagation.md) with sensible defaults.
- **Workspace protocols** — changesets uses `npm publish` even in pnpm/yarn workspaces, so `workspace:^` and `catalog:` protocols may not be resolved correctly. Bumpy resolves these before publishing.
- **Custom publish commands** — changesets is locked to `npm publish`. Bumpy supports per-package custom commands for VSCode extensions, Docker images, JSR, etc.
- **Dependency propagation** — changesets hardcodes peer dep behavior (v2 forced major bumps on dependents; v3 forces patch — assuming every peer change is non-breaking). Bumpy uses a [configurable three-phase algorithm](./version-propagation.md) that matches the triggering bump level by default.
- **Catalogs & protocol resolution** — changesets v3 resolves `workspace:^` by delegating to pnpm/yarn at publish time, but `catalog:` support is still open. Bumpy resolves all workspace protocols and catalogs (pnpm, Bun, Yarn) itself, so resolution also works with custom publish targets.
- **Custom publish commands** — changesets only publishes npm packages. Bumpy supports per-package custom commands for VSCode extensions, Docker images, JSR, etc.
- **CI setup** — changesets requires a [GitHub App](https://github.com/apps/changeset-bot) and a [separate GitHub Action](https://github.com/changesets/action). Bumpy uses two CLI commands (`bumpy ci check` + `bumpy ci release`) that run directly in your workflows.
- **Non-interactive CLI** — `bumpy add` works fully non-interactively, which is important for CI/CD and AI-assisted workflows.
- **Prereleases** — changesets uses a committed global "pre mode" (improved bookkeeping in v3, but still a shared state file with known footguns). Bumpy uses [branch-based channels](./prereleases.md) with no committed prerelease state.

For a detailed breakdown with links to specific changesets issues, see [Differences from Changesets](./differences-from-changesets.md).

Expand Down
Loading
Loading