We just launched on Product Hunt. Upvote chamoji

Compare

chamoji vs semantic-release, changesets, release-please and git-cliff

All five turn a repository's history into release notes. They differ in what they read (your commits, or files you write), how much they automate (the changelog alone, or the version, tag and publish too) and where they run.

What chamoji, semantic-release, changesets, release-please and git-cliff each do
CapabilitychamojiFrom commits to a release, in one commandsemantic-releaseFully automated releases from CIchangesetsChange files, built for monoreposrelease-pleaseA release pull request to mergegit-cliffA configurable changelog generator
Reading your history
Reads the commits you already havePartly: Conventional Commits by default; presets for othersNot built in: Reads changeset files you add insteadPartly: Expects Conventional CommitsPartly: Conventional by default; your own regex parsers
Writes its config from your repoNot built in: No setup command; defaults or a config you writePartly: changeset init writes a default configPartly: bootstrap writes one from the options you passPartly: git cliff --init writes a default or a template
Plain messages like "Fix crash on startup"Not built in: Not with the default presetNot built in: Commits are not readNot built in: Expects Conventional CommitsPartly: Filtered out by default; a parser can match them
Cutting the release
Picks the next versionBuilt in: From the commitsBuilt in: From the bump in each changesetBuilt in: From the commitsBuilt in: With --bump
Writes CHANGELOG.mdPartly: With @semantic-release/changelogBuilt in: One per packageBuilt in: In the release pull requestBuilt in: Its main job, from a template
Bumps manifest versionsPartly: package.json, through the npm pluginBuilt in: Each package's package.jsonBuilt in: Per language, by release typeNot built in: Changelog and version only
Release commit and tagPartly: Tags; commits files with @semantic-release/gitPartly: Tags on publish; you commit and pushBuilt in: When you merge the release pull requestNot built in: Left to your release script
GitHub releaseBuilt in: Through @semantic-release/githubBuilt in: Through its GitHub ActionBuilt in: When you merge the release pull requestNot built in: Left to your release script
Publishes to npmBuilt in: By defaultBuilt in: changeset publishNot built in: Left to your workflowNot built in: Left to your release script
Independent versions in a monorepoNot built in: Not built in; community pluginsBuilt in: What it is built forBuilt in: With a manifest configPartly: Changelogs per path
Where it runs
From your terminalPartly: Built for CI; --dry-run locallyBuilt in: The changeset CLIPartly: Built around CI pull requestsBuilt in: git cliff
In CIBuilt in: Runs after each build on the release branchBuilt in: GitHub Action opens a Version Packages PRBuilt in: GitHub ActionBuilt in: GitHub Action or any CI

Scroll sideways to see every tool.

Which one

Pick by how you work.

Each is the better fit for a different team. chamoji isn't the answer to every row above.

semantic-release

You want every push to the release branch published to npm with no human step, and your team writes Conventional Commits.

changesets

You run a monorepo where each package versions on its own, and authors describe each change by hand.

release-please

You want a release pull request to review and merge, across many languages, with Conventional Commits.

git-cliff

You only need the changelog file, and want full control of its template.

chamoji

Your history mixes gitmoji, Conventional and plain messages, and you want the changelog, version bump, commit and tag in one command you, your CI or your coding agent runs, for one package or for each app in a monorepo.

Together

Use chamoji with what you have.

Keep your publish step

chamoji cuts the release: the CHANGELOG.md section, the version bumps, the commit and the tag. A workflow that runs on the tag can go on publishing to npm, PyPI or crates.io as it does today.

$ chamoji release --dry-run
$ chamoji release --push

What chamoji also does

  • Dependency updates from Dependabot or Renovate collapse into one changelog line.
  • If your repo started from a template you still pull updates from, the template's own commits stay out of your notes, and each update is one line.
  • Tags you already have keep working: chamoji setup finds every format you have used, and chamoji never renames, moves or deletes a tag.
  • Workstreams group a piece of work into one Highlight in the release notes.
  • Project memory keeps the "Why:" behind each commit in git, one command away with chamoji why.
  • A commit composer and hook help write commits that sort themselves.
  • The chamoji-release skill lets Claude Code, Codex and Cursor cut a release, and asks before it pushes.
npm i -g @chamoji/cli
Read the docs on GitHub

Based on each project's own README and documentation, November 2026. Something out of date? Open an issue.

Chamoji Cloud · early access

Join the waitlist

Hosted release notes, shared team memory and review packets for your whole team. Leave your email and we'll tell you when it opens.

One email when early access opens. No newsletter, and we never share your address.