Skip to main content

Welcome to git-cliff

git-cliff is a highly customizable changelog generator that follows Conventional Commits specifications. Written in Rust, it generates changelogs from your Git history using regex-powered custom parsers and flexible templates. git-cliff demo

What is git-cliff?

With git-cliff, you can automatically generate professional changelogs from your Git history. Whether you follow conventional commits or have your own commit style, git-cliff adapts to your workflow through powerful configuration options. The tool analyzes your Git commits, groups them by type (features, bug fixes, breaking changes, etc.), and generates beautifully formatted changelogs in Markdown or any other format you desire using the Tera templating engine.

Why use git-cliff?

Highly Customizable

Customize every aspect of your changelog with Tera templates and regex-powered commit parsers. Match your project’s style perfectly.

Conventional Commits

Built-in support for conventional commits specification with automatic grouping by commit type (feat, fix, docs, etc.).

Git Integration

Native integration with GitHub, GitLab, Gitea, Bitbucket, and Azure DevOps. Pull in PR titles, labels, and contributor information.

Fast and Reliable

Written in Rust for blazing-fast performance. Process thousands of commits in seconds.

Key Features

Flexible Commit Parsing

Parse commits using conventional commit patterns or define your own custom regex parsers:
[git]
conventional_commits = true
filter_unconventional = true

commit_parsers = [
  { message = "^feat", group = "⛰️  Features" },
  { message = "^fix", group = "🐛 Bug Fixes" },
  { message = "^doc", group = "📚 Documentation" },
  { message = "^perf", group = "⚡ Performance" },
  { message = "^refactor", group = "🚜 Refactor" },
]

Powerful Templating

Customize your changelog output with Tera templates. Access commit metadata, generate links, and format output exactly how you need:
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}
  {{ commit.message }} - ([{{ commit.id | truncate(length=7) }}]({{ commit.id }}))
{% endfor %}
{% endfor %}

Remote Integration

Fetch pull request metadata, contributor information, and more from your Git hosting service:
[remote.github]
owner = "your-org"
repo = "your-repo"
This enables features like:
  • Pull request titles and links
  • First-time contributor recognition
  • PR labels for custom grouping
  • Automatic version comparisons

Version Bumping

Automatically determine the next semantic version based on commit types:
# Automatically determine version bump
git-cliff --bump

# Or specify the bump type
git-cliff --bump major
git-cliff --bump minor
git-cliff --bump patch

Get Started

Quickstart

Get up and running with git-cliff in under 5 minutes

Installation

View all installation methods for your platform

Configuration

Learn how to configure git-cliff for your project

Templating

Customize your changelog format with templates

Real-World Example

Here’s an example of changelog output generated by git-cliff from its own repository:
## [2.12.0] - 2026-01-20

### ⛰️  Features

- *(args)* Add offline flag (#1321) - (f19f1cd)
- *(args)* Add `--skip-tags` cli argument (#1334) - (32cf8c5)
- *(logging)* Implement commit processing summary (#1355) - (aa01a09)

### 🐛 Bug Fixes

- *(config)* Respect the changelog.output configuration (#1349) - (cfcc5ae)
- *(logging)* Revert the noisy warn log level to trace (#1353) - (eb99e41)
- *(remote)* Avoid false first-time contributors when tag timestamp missing (#1348) - (de7cf02)

### 📚 Documentation

- *(contributing)* Clarify Rust toolchain requirements (#1344) - (97b0322)
- *(install)* Add mise alternative method installation (#1320) - (34b8d30)

## New Contributors ❤️

* @taladar made their first contribution in #1319
* @barskern made their first contribution in #1321
The git cliff command can be used interchangeably with git-cliff (with a hyphen) in most environments when git is installed.

Build docs developers (and LLMs) love