Introduction
Release-please automates CHANGELOG generation, version bumps, and GitHub releases based on conventional commit messages. Maintained by Google, it opens release PRs that, when merged, create tagged releases.
What Release-please Does
- Parses conventional commits (feat, fix, chore) to determine semantic version bumps
- Generates and maintains CHANGELOG.md from commit history
- Opens release PRs bundling pending changes with updated versions
- Creates GitHub releases with notes when release PRs merge
- Supports monorepos with independent or linked versioning per package
Architecture Overview
Release-please runs as a Node.js CLI or GitHub Action. It reads commits since the last release tag, categorizes them via the Conventional Commits spec, calculates the next version, and generates a release PR. A manifest file tracks per-package release types and strategies with pluggable support for Node, Python, Java, Go, Ruby, and more.
Self-Hosting & Configuration
- Install via npm or use the GitHub Action (googleapis/release-please-action)
- Set release-type per package in release-please-config.json
- Track versions in .release-please-manifest.json for monorepos
- Use --target-branch for release trains or maintenance branches
- Map commit types to changelog headings in the config file
Key Features
- 20+ release strategies for different language ecosystems
- Monorepo support with per-component and cross-component dependency updates
- Customizable commit type to changelog section mapping
- Linked versions for groups of packages sharing a version number
- Plugin system for custom versioning and changelog formatting
Comparison with Similar Tools
- semantic-release — Fully automated on push; release-please adds a PR review step before publishing
- standard-version — Deprecated predecessor; release-please is CI-native and actively maintained
- changesets — Requires manual changeset files; release-please infers changes from commits
- GoReleaser — Go-specific; release-please is language-agnostic and focuses on versioning
FAQ
Q: Does release-please publish packages to npm or PyPI? A: No. It handles versioning, changelogs, and GitHub releases. Add separate CI steps for publishing.
Q: Can I use it without conventional commits? A: No. Conventional commits are required for automatic version bump detection.
Q: How does monorepo support work? A: Configure each package path in release-please-config.json with its own release type. Versions are tracked independently per component.
Q: What if multiple features merge before the release PR? A: All unreleased commits accumulate into a single release PR with the appropriate version bump.