git-cliff
A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️
A command-line tool that automatically generates changelog files from your Git commit history, supporting conventional commits and fully customizable output templates.
git-cliff is a command-line tool written in Rust that generates changelog files from a project's Git commit history. Rather than writing release notes by hand each time, you run git-cliff against your repository and it reads through your commits to produce a formatted changelog document automatically.
The tool is designed around the conventional commits format, a widely used convention where each commit message starts with a type prefix such as "feat", "fix", or "chore" to indicate what kind of change it represents. git-cliff uses these prefixes to sort and group commits into labelled sections in the generated changelog. If your project does not follow conventional commits, you can configure regex-based custom parsers in the configuration file to pull useful information out of whatever commit message format you use.
The output format is controlled by a template system and a cliff.toml configuration file. You can adjust which sections appear, how commits are grouped within each section, what text accompanies each entry, and how the document is structured overall. This flexibility lets teams adapt the output to match their specific changelog conventions or documentation style.
The README is brief and points to the official documentation website for detailed setup instructions, usage examples, and templating reference. An Emacs integration called git-cliff.el exists for generating and updating changelogs from within that editor. The tool has appeared in developer conference talks and newsletters.
git-cliff is dual-licensed under Apache 2.0 and MIT, meaning you choose whichever license fits your project. Several similar changelog-generation tools are listed in the README for comparison.
Where it fits
- Automatically generate a formatted CHANGELOG.md for your project before each release.
- Customize which commit types (feat, fix, chore) appear as sections in your changelog.
- Use regex-based parsers to extract changelog content from non-conventional commit messages.