cambi is a tool that infers semantic version bumps from conventional commits, updates CHANGELOG.md, and manages GitHub releases.
It can:
major / minor / patch),CHANGELOG.md,Project page: https://sw.cowtech.it/cambi
feat => minor, breaking => major, default patch)release --notes-only) to print generated notes locallyDownload one of the prebuilt binaries for your platform, then make it executable:
Example:
curl -L -o cambi https://github.com/ShogunPanda/cambi/releases/latest/download/cambi-linux chmod a+x cambi
cargo install cambi
cambi [OPTIONS]
Global options:
-c, --config <CONFIG>: optional explicit config file path-p, --tag-pattern <TAG_PATTERN>: override the release tag matcher regex-v, --verbose: enable verbose output-h, --help: print help-V, --version: print versionversion (v): print the current versionsemver (s): compute semantic version informationupdate (u): update project version files from detected or explicit targetchangelog (c): update CHANGELOG.md with the next release sectionrelease (r): publish releases on GitHub from git history derived by tagsversion (v)Print current version from the latest matching tag (or from -f, --from-tag).
cambi version cambi v cambi version --from-tag v1.2.3
Options:
-f, --from-tag <FROM_TAG>: override start tag instead of auto-detecting latest version tag-c, --config <CONFIG>-p, --tag-pattern <TAG_PATTERN>-v, --verbose-h, --helpsemver (s)Compute next bump type from commits since latest matching tag (or from -f, --from-tag).
cambi semver cambi s cambi semver --from-tag v1.2.3
Options:
-f, --from-tag <FROM_TAG>: override start tag instead of auto-detecting latest version tag-c, --config <CONFIG>-p, --tag-pattern <TAG_PATTERN>-v, --verbose-h, --helpupdate (u)Update project version files. By default it infers the bump from commits. You can override detection by passing:
major, minor, patch1.2.3 or v1.2.3cambi update cambi u cambi update major cambi update 1.4.0 cambi update --commit cambi update --commit --commit-message "chore: bump app version" cambi update --commit --tag
Options:
-f, --from-tag <FROM_TAG>: override start tag instead of auto-detecting latest version tag-o, --commit: commit updated version file-m, --commit-message <MESSAGE>: custom commit message (requires --commit)-t, --tag: create a git tag for the updated version (requires --commit)-c, --config <CONFIG>-p, --tag-pattern <TAG_PATTERN>-v, --verbose-h, --helpSupported update targets (first match wins):
Cargo.tomlpackage.jsonpyproject.toml*.gemspecmix.exspubspec.yamlPackage.swiftversion / VERSIONchangelog (c)Update CHANGELOG.md with the next pending release section.
cambi changelog cambi changelog minor cambi changelog 1.4.0 cambi c --dry-run cambi changelog --commit cambi changelog --commit --commit-message "chore: update release notes" cambi changelog --rebuild
Options:
<TARGET>: explicit changelog target (major, minor, patch, 1.2.3, v1.2.3) overriding inferred bump (conflicts with --rebuild)-r, --rebuild: regenerate CHANGELOG.md from the first commit-o, --commit: auto-commit if CHANGELOG.md is the only changed file-m, --commit-message <MESSAGE>: custom commit message (requires --commit)-d, --dry-run: preview changes without writing files-c, --config <CONFIG>-p, --tag-pattern <TAG_PATTERN>-v, --verbose-h, --helprelease (r)Create/update GitHub releases from git tags and commits.
cambi release cambi r --dry-run cambi release --rebuild cambi release --owner my-org --repo my-repo --token "$GH_RELEASE_TOKEN" cambi release 1.2.3 --prerelease cambi release --notes-only
Options:
-r, --rebuild: delete/recreate releases from scratch-n, --notes-only: print only the notes that would be used for the release body-t, --token <TOKEN>: override GitHub token-o, --owner <OWNER>: override GitHub owner/organization-u, --repo <REPO>: override GitHub repository-d, --dry-run: preview release actions without API calls-a, --prerelease: mark the GitHub release as a pre-release (requires positional target)-c, --config <CONFIG>-p, --tag-pattern <TAG_PATTERN>-v, --verbose-h, --helpNotes:
v-prefixed (for example v1.2.3)v (for example 1.2.3)-n, --notes-only conflicts with --rebuild, --dry-run, --token, --owner, --repo~/.config/cambi.yml./cambi.yml--config / -c path/to/file.ymlLocal config overlays global config.
CAMBI_TOKEN (preferred) / GH_RELEASE_TOKENCAMBI_OWNERCAMBI_REPOCAMBI_TAG_PATTERNCAMBI_CHANGELOG_TEMPLATECAMBI_IGNORE_PATTERNS (semicolon-separated regex list)CAMBI_VERBOSE (1, true, yes)^v\d+\.\d+\.\d+$cambi.ymltoken: ghp_xxx owner: my-org repo: my-repo tag_pattern: '^v\d+\.\d+\.\d+$' ignore_patterns: - "^docs: .+$" - "^chore: .+$" changelog_template: | ### $DATE / $VERSION $COMMITS
Template placeholders:
$DATE$VERSION$COMMITS (already bullet-formatted)Copyright (C) 2026 and above Shogun (shogun@cowtech.it).
Licensed under the ISC license.