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 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.

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

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.