Hi there!
Monorepo releases can be amazing… until the tooling feels either too heavy (extra metadata, intent files, complex flows) or too opinionated about how you should work. I wanted something lightweight that stays out of the way — especially if your Git history is already meaningful.
So I built Bumpy — a zero-config CLI for monorepo versioning that:
Auto-discovers packages (pnpm/npm workspaces,
apps/*,packages/*)Suggests the next version using Conventional Commits
Generates per-package changelogs from Git history
Uses per-project tags like
project@versionfor precise release boundariesSupports prereleases and
--dry-run
Repo: https://github.com/antonreshetov/bumpy
Best fit: small/medium monorepos that already use Conventional Commits and want clean per-package changelogs + tags, without adopting a whole new workflow.
Why another release tool?
Tools like Changesets and Nx Release are excellent — they just optimize for different trade-offs than I needed:
Changesets: great, but it’s a file-based workflow (changeset “intent” markdown files that you commit and later assemble into releases).
Nx Release: powerful and well-integrated if you’re already in Nx; heavier if your repo isn’t.
Bumpy tries to keep the best parts (automation + safety) while keeping Git as the source of truth and avoiding extra ceremony.
How Bumpy works
At release time, Bumpy:
- Scan: Finds packages in your workspace.
-
Locate: Detects the last tag for each package (e.g.,
project-a@1.2.3). - Analyze: Reads Git history since that tag.
- Suggest: Recommends a bump based on Conventional Commits.
-
Generate: Creates/updates a package-level
CHANGELOG.md.
You can always confirm the suggestion, choose a different bump type, or enter a custom version.
Quick Start
Installation
# Global
npm install -g @antonreshetov/bumpy
# Local (recommended for monorepos)
pnpm add -D @antonreshetov/bumpy
Common commands
Interactive release:
bumpyStatus overview:
bumpy statusRelease one project (non-interactive):
bumpy release project-a --type minor --yesDry-run:
bumpy release --dry-run
Config is optional
By default, Bumpy uses your existing workspace layout. To customize behavior, run bumpy init to generate bumpy.json in the repo root.
{
"projects": ["apps/*", "packages/*"],
"release": {
"ignore": ["apps/internal-tool"],
"changelog": {
"projectChangelogs": true,
"workspaceChangelog": false
},
"git": {
"commit": true,
"tag": true,
"push": true,
"commitMessage": "chore(release): {tag}"
}
}
}
Where I’d love feedback
If you’ve used Changesets / Nx Release / anything similar:
Does this release flow feel intuitive?
What would you miss immediately if you switched to Bumpy?
Any edge cases you’ve hit around per-project tags or changelog structure?
What should
bumpy statusshow to be useful day-to-day?
Repo again: https://github.com/antonreshetov/bumpy
Top comments (0)