relnote compared
A git-cliff alternative and a gh release create --generate-notes alternative — offline conventional-commit release notes from a stdlib Python changelog CLI and GitHub Action.
What you are choosing between
Four tools get asked about in the same breath. They overlap, but they are not the same job.
- relnote — stdlib Python changelog CLI and GitHub Action. Reads a git range, groups conventional commits, prints a Release body. No config file, no GitHub API.
gh release create --generate-notes— GitHub’s official notes. Online, PR-linked, and it creates the Release for you.- git-cliff — changelog generator with
cliff.toml, Tera templates, and optional version bump. Heavier, more control. - swapnanil/relnotes — another offline stdlib Python CLI for conventional-commit notes. Optional
.relnotes.toml, inferred semver bump,--from/--to.
relnote is the smaller offline alternative when you want a GitHub Action and zero-config CI. Keep gh when you want official GitHub notes. Keep git-cliff when you want a maintained changelog file.
Comparison
| Question | relnote | gh --generate-notes |
git-cliff |
|---|---|---|---|
| Runs offline | Yes. Needs Python 3.11+ and git on PATH. | No. Talks to the GitHub API and needs gh auth. |
Yes for local git history. Remote extras are optional. |
| Config file | None. | None. Flags and GitHub repo settings. | cliff.toml plus Tera templates. |
| Install / language | Python stdlib. pip install git+https://github.com/loki-inu/relnote.git or python3 -m relnote. |
GitHub CLI. Already common in many workflows. | Rust binary (package manager, cargo, or a release asset). |
| Conventional commits | Yes. Groups feat, fix, type! / BREAKING CHANGE:, and everything else. |
No. Groups merged pull requests, not commit types. | Yes, if you configure parsers for that. |
| What it writes | A GitHub Release body on stdout (or --output). You paste or attach it. |
The GitHub Release itself. | A changelog file, typically CHANGELOG.md. |
| Creates the GitHub Release | No. Not a GitHub App and not a hosted service. | Yes. That is the command. | No, unless you wrap it with gh or another step. |
| PR links and new contributors | No. Local commits only. Compare URL if origin is github.com. |
Yes. Official PR-linked notes. | Optional, via GitHub / GitLab integration. |
| Templates | Fixed Features / Fixes / Breaking / Other layout. | GitHub’s generated-notes format. | Tera templates. Full control over sections and wording. |
| Version bump | No. | No. | Yes (--bumped-version and related flags). |
| Third-party packages | None. stdlib only. | The gh binary and GitHub. |
The git-cliff binary (and a config you maintain). |
| CI hook | loki-inu/relnote@v0.1.5. Draft-release example in the repo. |
Call gh release create --generate-notes in a workflow. |
Community Action and native CLI in CI. |
| Use it when | You want offline, no-config, conventional-commit notes to paste into a Release — plus a GitHub Action. | You want GitHub’s official notes and you are already online with gh. |
You want a changelog file, templates, and a config. |
relnote and swapnanil/relnotes
There is another stdlib Python conventional-commit notes CLI: swapnanil/relnotes. Same job — offline, no runtime dependencies, grouped Features / Fixes / Breaking / Other. Different extras.
- Pick relnote when you want a GitHub Action, zero-config CI (
--quiet/--output), and filters for bot authors and secret-looking subjects. - Pick swapnanil/relnotes when you want an optional
.relnotes.toml, inferred semver bump, or--from/--torange names.
relnote uses --since / --until for the same kind of range, and also has --format plain. Neither tool creates the GitHub Release.
Install relnote
pip install git+https://github.com/loki-inu/relnote.git
relnote --help
Python 3.11+, git on PATH, no third-party packages. Or from a checkout: python3 -m relnote. For CI, the GitHub Action is loki-inu/relnote@v0.1.5 after actions/checkout with fetch-depth: 0.
What relnote will not do
- It does not create the Release, open a PR, or bump versions.
- It does not write a changelog file back into the repository.
- It does not replace git-cliff if you need Tera templates or a living
CHANGELOG.md. - It does not replace
gh --generate-notesif you want PR-linked official notes. - It does not replace swapnanil/relnotes if you want a config file or inferred semver bump.
Common questions
Is relnote a git-cliff alternative?
Yes, when you want a GitHub Release body from conventional commits and do not need Tera templates or a living CHANGELOG.md. Keep git-cliff when you want a maintained changelog file, templates, and optional version bump.
Is relnote a gh release create --generate-notes alternative?
Yes, when you want offline notes grouped by commit type. Keep gh release create --generate-notes when you want official PR-linked notes and the Release created for you.
Is there a stdlib Python changelog CLI for conventional commits?
Yes. relnote is a stdlib Python changelog CLI: Python 3.11+, git on PATH, no third-party packages. It prints offline conventional-commit release notes from local git history.
How do I generate conventional-commit release notes in a GitHub Action?
Use loki-inu/relnote@v0.1.5 after actions/checkout with fetch-depth: 0. The action writes grouped notes to an output. A draft-release example is in the repo.
How does relnote differ from swapnanil/relnotes?
Both are offline stdlib Python CLIs that group conventional commits. Pick relnote for the GitHub Action, --quiet/--output CI, and bot or secret-looking subject filters. Pick swapnanil/relnotes for optional .relnotes.toml, inferred semver bump, or --from/--to range names.