Every software project needs a changelog. Whether you’re shipping open-source libraries, internal tools, or commercial products, your users and contributors expect to see what changed between releases. Manually writing release notes is tedious, error-prone, and inevitably falls behind.
Automated changelog generators solve this problem by parsing your Git history — commit messages, tags, pull requests, and labels — and producing structured, readable release notes. This guide compares three mature, self-hosted tools that take different approaches to the same problem.
Why Automate Your Changelog
A well-maintained changelog serves multiple audiences: end users want to know what’s new, developers need to understand what changed in a dependency, and release managers must track what shipped in each version. Writing these by hand creates friction in the release process and leads to inconsistent formatting.
Consistency across releases. Automated tools enforce the same structure, headings, and grouping conventions for every release. No more one release with bullet points and another with paragraphs.
Conventional Commits enforcement. Tools that parse Conventional Commit messages (feat:, fix:, breaking:) encourage better commit discipline across your team. The changelog becomes both a product and an incentive for good Git hygiene.
CI/CD pipeline integration. Running changelog generation as part of your build pipeline means release notes are produced at the same time as the release artifact. No one has to remember to update a file before tagging.
Zero maintenance overhead. Once configured, these tools require no ongoing effort. They read your Git history, apply your template rules, and produce output — every time.
Reduced release friction. When changelog generation is automated, the release process becomes a single command or pipeline step instead of a multi-step manual chore. This matters most for teams shipping frequently.
git-cliff: Highly Customizable Changelog Generator
git-cliff is a Rust-based changelog generator that emphasizes configurability. It reads a TOML configuration file that controls every aspect of output — from which commit types appear, to how breaking changes are highlighted, to the exact template format.
Stars: 11,747+ | Language: Rust | Last updated: April 2026
Key Features
- TOML-based configuration with Jinja2-style templating
- Conventional Commits parsing with customizable commit type mapping
- Git tag-based release grouping with range selection
- Breaking change detection and prominent highlighting
- Multiple output formats: Markdown, plain text, JSON
- Bump version detection (
--bumpflag) - Pre-commit and CI/CD integration
Installation
| |
Docker Compose Setup
Since git-cliff is a CLI tool, the typical Docker usage pattern mounts your repository into a container:
| |
Configuration Example
A typical cliff.toml configuration:
| |
CI/CD Integration (GitHub Actions)
| |
release-please: Google’s Conventional Commits Release Tool
release-please takes a different approach. Instead of just generating a changelog file, it automates the entire release workflow: it reads your commit history, determines the next semantic version, updates the changelog, and opens a release pull request for review.
Stars: 6,768+ | Language: TypeScript | Last updated: April 2026
Key Features
- Automated semantic version bumping based on commit types
- Release pull request workflow (review before merging)
- Multi-package monorepo support
- GitHub, GitLab, and Bitbucket integration
- Conventional Commits parsing (Angular convention by default)
- GitHub Releases creation on PR merge
- Language-specific version bumping strategies
Installation
| |
Docker Usage
| |
Configuration
release-please uses a .release-please-manifest.json and release-please-config.json:
| |
For monorepos, you specify multiple package paths:
| |
GitHub Actions Workflow
| |
When commits land on main, release-please analyzes them, opens a release PR with the updated changelog and version bump, and — once you merge that PR — creates a Git tag and GitHub Release automatically.
auto (Intuit): Label-Driven Release Automation
auto by Intuit takes yet another approach. Instead of parsing commit message conventions, it uses GitHub labels on pull requests to determine what kind of release to make. Tag a PR with minor and it bumps the minor version; tag it with patch for a patch release.
Stars: 2,397+ | Language: TypeScript | Last updated: February 2026
Key Features
- Label-based release determination (no commit message format required)
- Pull request–centric workflow
- Multiple plugins for different platforms (GitHub, GitLab, npm, CocoaPods)
- Automatic changelog generation from PR titles and descriptions
- Canary releases for testing before stable releases
- Ship command for one-command publishing to npm and other registries
Installation
| |
Configuration
auto uses a .autorc file in JSON or JavaScript format:
| |
CI/CD Integration
| |
Comparison Table
| Feature | git-cliff | release-please | auto |
|---|---|---|---|
| Approach | Config file + templates | Conventional Commits + release PR | GitHub labels on PRs |
| Language | Rust | TypeScript | TypeScript |
| Stars | 11,747+ | 6,768+ | 2,397+ |
| Conventional Commits | ✅ Full support | ✅ Required | ❌ Not required |
| Monorepo support | ❌ Single project | ✅ Native support | ✅ Via plugins |
| Release PR workflow | ❌ Generates file only | ✅ Built-in | ❌ Generates file + tag |
| Label-based versioning | ❌ | ❌ | ✅ Core feature |
| Docker image | ✅ ghcr.io/orhun/git-cliff | ✅ ghcr.io/googleapis/release-please | ❌ npm install |
| Template customization | ✅ Jinja2-style | ⚠️ Limited | ⚠️ Limited |
| GitLab support | ✅ | ✅ | ✅ Via plugin |
| Bitbucket support | ❌ | ✅ | ❌ |
| Canary/beta releases | ❌ | ❌ | ✅ Built-in |
| Best for | Teams wanting full control | Teams wanting release automation | Teams using PR labels |
Which Tool Should You Choose?
Choose git-cliff if you want complete control over changelog formatting. Its TOML configuration and Jinja2-style templates let you produce changelogs in any style — from simple bullet lists to structured release notes with code diffs. It’s the best option when your team has specific formatting requirements that other tools can’t meet.
Choose release-please if you want the full release workflow automated. It doesn’t just generate a changelog — it opens release PRs, bumps versions, and creates GitHub Releases. The monorepo support is unmatched. This is ideal for teams following Conventional Commits who want “zero-touch” releases.
Choose auto if your team already uses PR labels for triage and doesn’t want to enforce commit message conventions. The label-based approach is more flexible for teams with diverse contribution styles, and the canary release feature is useful for pre-release testing.
For related reading, see our CI/CD pipeline comparison for setting up automated build pipelines, our dependency automation guide for keeping packages up to date, and our data versioning guide for versioning non-code artifacts.
FAQ
What is a changelog generator and why do I need one?
A changelog generator automatically creates release notes by reading your Git history — commits, tags, pull requests, and labels. Instead of manually writing what changed between releases, the tool parses your commit messages and produces a structured document. This saves time, ensures consistency, and integrates into your CI/CD pipeline so release notes are always up to date.
What are Conventional Commits?
Conventional Commits is a specification for formatting commit messages. Each commit starts with a type prefix like feat: (new feature), fix: (bug fix), docs: (documentation), or BREAKING CHANGE: (incompatible API change). Tools like git-cliff and release-please parse these prefixes to automatically categorize changes and determine version bumps.
Can I use these tools without Conventional Commits?
Yes, but with trade-offs. auto uses GitHub labels instead of commit message formats, so it works with any commit style. git-cliff can be configured to parse non-conventional commit patterns via custom regex rules in its commit_parsers section. release-please requires Conventional Commits as its core mechanism — it cannot determine version bumps without them.
How do I run changelog generation in a CI/CD pipeline?
All three tools support CI/CD integration. For git-cliff, use the git-cliff-action in GitHub Actions or run the Docker image in any CI system. For release-please, use the googleapis/release-please-action which handles the full release PR workflow. For auto, run auto shipit in your pipeline after setting the appropriate tokens. Each tool needs access to the full Git history, so configure your checkout step with fetch-depth: 0.
Do these tools support monorepos?
release-please has the best monorepo support natively — you configure multiple package paths in release-please-config.json and it manages independent versioning for each. auto supports monorepos via plugins and workspace configuration. git-cliff is designed for single-project repositories and does not have built-in monorepo handling.
Can I customize the output format of the changelog?
git-cliff offers the most customization through its Jinja2-style template engine in cliff.toml — you control every heading, bullet point, and section. release-please and auto produce standardized changelog formats with limited customization options. If your team needs a specific changelog style (e.g., adding contributor avatars, linking to Jira tickets, or including code diffs), git-cliff is the best choice.