release-please: Automating Release PRs from Conventional Commits
Project brief: generate release PRs based on the conventionalcommits.org spec. Linear git commit history (use squash-merge) We highly recommend that you use squash-merges when merging pull requests.
At a glance
- What is it?
- release-please turns conventional commit messages into release pull requests, changelogs, and GitHub releases. It suits teams with linear history and a clear release workflow, but it deliberately leaves publication and complex branching to other tools.
- Who is it for?
- Adopt release-please if your team uses conventional commits, squash-merges, and a single default branch, and you want a bot that maintains release PRs until you merge them. Avoid it if you need package publication, complex branch management, or if your history is full of merge commits that obscure releasable units.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 11 days ago.
- What is it written in?
- Mainly TypeScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.
Star history
- googleapis/release-please7,770 ★ · +500
| Repository | 2026-07-30 | 2026-11-13 |
|---|---|---|
| googleapis/release-please | 7.3k | 7.8k |
500 Stars in the last 106 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
The Problem: Release Drudgery and Manual Changelogs
Releasing a library or application involves writing a changelog, bumping version numbers, tagging a commit, and creating a GitHub release. Doing this by hand is error-prone and tedious, especially when multiple features and fixes land between releases. release-please automates the generation of changelogs and version bumps by reading your git history for conventional commit messages. It targets developers who already follow the conventional commits spec and want a bot to prepare release pull requests that they can review and merge. It is not a package publisher and it does not handle complex branch management, so teams that need those features must look elsewhere.
The Release PR Workflow: Merge to Release
Instead of releasing every commit to the default branch, release-please maintains a release PR that stays up to date as new work merges. The release PR contains the changelog and version bump. When you are ready to tag a release, you merge that PR. On merge, release-please updates the changelog file and language-specific files like package.json, tags the commit with the version number, and creates a GitHub release from that tag. The README lists three lifecycle labels: autorelease: pending before merge, autorelease: tagged after merge and tag, and autorelease: snapshot for snapshot version bumps. It also mentions autorelease: published as a convention that publication tooling can add, though release-please does not add it automatically. This design gives you a human review point before anything is tagged, which is a deliberate trade-off: releases are not immediate, but they are controlled.
How It Parses Commits: Prefixes, Footers, and Overrides
release-please relies on conventional commit prefixes to determine version bumps. A fix: prefix maps to a patch, feat: to a minor, and a trailing exclamation mark like feat!: or fix!: indicates a breaking change and triggers a major. The README also lists deps as a releasable unit, while chore and build are not. This means a PR that only contains chore commits will not produce a release PR. To handle a PR with multiple changes, release-please allows a single commit message to carry several conventional messages as footers, each with its own scope and optional BREAKING-CHANGE footer. The README shows an example where a commit contains a feat, a fix with a breaking change, and another feat, all in one message. For fixing mistakes after a merge, you can edit the body of the merged PR and add a BEGIN_COMMIT_OVERRIDE section that replaces the commit message for release notes. This override only works with squash-merges, because release-please cannot determine which commit to apply it to with plain merges.
Getting It Running: Commands and Configuration
The repository is published on npm, and package.json defines a release-please binary. The README gives a concrete example for forcing a version: run git commit --allow-empty -m "chore: release 2.0.0" -m "Release-As: 2.0.0". The Release-As footer in the commit body tells release-please to open a PR for that exact version. This is a simple, auditable way to override automatic versioning. The README explains that release-please creates a release PR after it notices releasable units on the default branch since the last release. For the GitHub application, it will not create a new PR if an existing PR has the autorelease: pending label, so you may need to remove that label manually if a release is already done.
A Genuine Limitation: Stale Labels and Missed Releases
A common failure mode is that release-please does not create a release PR when you expect it. The README dedicates a whole section to this. Step 1 is to ensure releasable units are present, since chore-only commits do not count. Step 2 warns about stale autorelease: pending or autorelease: triggered labels on old PRs. GitHub API failures can leave these labels in place, and release-please then thinks a release is still pending and blocks new PRs. The fix is to manually remove the label and rerun. This is a real operational burden: you need to monitor labels and occasionally clean them up. The README also notes that the commit override feature fails with plain merges, so if your team does not enforce squash-merges, you lose that correction mechanism and your changelog can include noisy commits.
When It Is the Wrong Tool: Publication and Branching
release-please explicitly does not publish to package managers. After merging the release PR, you still need separate tooling to run npm publish, twine upload, or similar. It also does not handle complex branch management, so if you maintain multiple release branches or need to backport fixes, release-please will not coordinate that. The README states this plainly: "It does not handle publication to package managers or handle complex branch management." For teams that need immediate releases on every merge, the release PR model adds latency. If you prefer a fully automated pipeline that tags and publishes without a human merge step, release-please's manual merge gate is a mismatch.
Alternative Approach: Direct Release on Merge
A common alternative is a tool that runs release steps immediately after a commit lands on the default branch, rather than maintaining a release PR. For example, semantic-release (a popular Node.js tool) analyzes commits, determines the next version, updates the changelog, tags, and publishes to npm in one automated workflow. The key difference is that semantic-release releases on every push to the main branch, with no manual merge of a release PR. This suits projects that want zero-touch releases and do not need a human review point. In contrast, release-please gives you a PR to review and merge, which is better for projects that require a changelog review before tagging. The trade-off is speed versus control. If your team values a human gate, release-please fits; if you want full automation, semantic-release is a direct alternative.
Maintenance and License Considerations
release-please is actively maintained, with version 17.11.2 released in August 2026. The repository is licensed under Apache-2.0, which permits commercial use, modification, and distribution, with the requirement to include the license and attribution. You should review the full license text for your specific use case. Being a Google-maintained project, it has a track record of updates, but you should still plan for occasional breaking changes in major versions. The configuration lives in your repository, and the tool's behaviour can change with updates. You should verify the current configuration options in the official docs before upgrading, as version 17.x may have changed defaults from earlier versions.
Editorial conclusion
Adopt release-please if your team uses conventional commits, squash-merges, and a single default branch, and you want a bot that maintains release PRs until you merge them. Avoid it if you need package publication, complex branch management, or if your history is full of merge commits that obscure releasable units. Before adoption, verify that your commit prefixes align with the releasable unit list (feat, fix, deps, plus language-specific ones), and that you can enforce squash-merges, because the commit override feature and clean changelogs depend on linear history. Also check the existing labels on old PRs, as stale autorelease labels can block new release PRs. If you need more control over the release process, consider a tool that runs release steps directly on merge rather than through a PR workflow.
Frequently asked questions
What does release please do?
Release Please automates CHANGELOG generation, the creation of GitHub releases, and version bumps. It parses your git history for Conventional Commit messages and maintains a Release PR that you merge when you are ready to tag a release. It does not publish to package managers and does not handle complex branch management.
What is a release PR?
A pull request that release-please keeps open and updates as more work is merged, so you decide when a release happens by merging it. Both squash-merge and merge commits work with it, and merging it updates CHANGELOG.md and other language specific files, tags the commit with the version number, and creates a GitHub release based on that tag.
how to setup release please
The release-please repository itself keeps release-please-config.json and .release-please-manifest.json at its root. The tool reacts to Conventional Commit prefixes: fix is a patch, feat is a minor, and a bang such as feat! or fix! produces a major. Releasable units are commits with the prefixes feat, fix and deps.
how to use release please
Two escape hatches sit on top of the commit history. A commit to the main branch with Release-As: x.x.x in the body makes release-please open a PR for that exact version, and a BEGIN_COMMIT_OVERRIDE to END_COMMIT_OVERRIDE block in a merged PR body replaces the commit message used for the release notes. The override does not work with plain merges.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/googleapis-release-please)Star history chart for your README
[](https://hysenlabs.com/projects/googleapis-release-please)Was this useful?