Intentional Releases: Why I Chose Changesets Over Semantic-Release
Original Article: Intentional Releases: Why I Chose Changesets Over Semantic-Release
Summary
Automating software releases is a cornerstone of modern CI/CD. For years, tools like semantic-release have dominated the ecosystem by parsing Git commit messages (using Conventional Commits) to automatically determine version bumps and generate changelogs. However, as projects grow and incorporate multi-ecosystem monorepos, purely automated commit-message parsing reveals significant shortcomings.
In this article, I explain why I transitioned to Changesets and the benefits of choosing intentional, human-driven release communication over automated side-effects.
Commit-Message Parsing vs. Human Intent
The Limits of Semantic-Release
While semantic-release works well for straightforward single-package repositories, it assumes that every commit message accurately reflects release intent:
- Missing User Context: Commit messages describe what was coded, not necessarily the value or impact to end users.
- Accidental Version Bumps: A poorly labeled commit (
feat:vsfix:) can trigger an accidental major or minor release. - AI-Assisted Commit Noise: As AI code assistants generate more commits, relying strictly on commit prefixes for release notes becomes increasingly noisy.
- Monorepo Coordination: Managing synchronized releases across disparate components (such as Ansible collections, Terraform modules, and Python tools) becomes rigid and difficult to customize.
Why Changesets Wins on Intent
Changesets decouples the release documentation from individual commits:
- Explicit Intent: Developers explicitly declare whether a change represents a
major,minor, orpatchbump. - Meaningful Changelogs: Release notes focus on “why” changes were made, including clear migration guides and upgrade warnings.
- Unified Multi-Ecosystem Workflow: By attaching minimal
package.jsondefinitions, Changesets can coordinate releases across non-JavaScript components (Ansible roles, Terraform modules, Python CLI utilities) in a single monorepo. - Consolidated Version PRs: Changesets batches intents across multiple PRs into a single “Version Packages” release pull request, giving teams complete visibility before publishing tags.
Conclusion
Automating tedious deployment mechanics is essential, but communicating software changes to users requires intentionality. Choosing Changesets allows developers to maintain human clarity in changelogs while keeping release automation robust and scalable.




