Introduction
FerrFlow is a single binary that automates semantic versioning for any repository — monorepo or classic, any language.
It reads your commit history, determines the right version bump, updates your version files, writes a changelog, creates a git tag, and publishes a release. Zero runtime dependencies.
CLI-first
Everything happens from your terminal or your CI. No UI to click, no config server to babysit.
Multi-forge
GitHub, GitLab, self-hosted — FerrFlow adapts to your forge. One tool, any platform.
Conventional commits
Reads commit history to determine version bumps automatically. No manual changelog maintenance.
Zero infra
A single binary with no daemon, no server, no database. Runs wherever your CI runs.
Why not semantic-release or changesets?
Section titled “Why not semantic-release or changesets?”Most versioning tools are coupled to a specific ecosystem or require Node.js to be present in your CI.
| Tool | Monorepo | Multi-language | Runtime |
|---|---|---|---|
| semantic-release | via plugins | JS/Node only | Node.js |
| changesets | manual bump | JS only | Node.js |
| release-please | limited | partial | Node.js |
| cargo-release | no | Rust only | Rust |
| FerrFlow | native | any | none |
FerrFlow ships as a compiled binary. Drop it in any CI environment without installing a runtime. A WASM build (@ferrflow/wasm) is also available for browser-side usage.
How it works
Section titled “How it works”- Reads commits since the last git tag for each package
- Determines the bump from Conventional Commits (
feat→ minor,fix→ patch, breaking → major) - Updates version files —
Cargo.toml,package.json,pom.xml, etc. - Writes the changelog in Keep a Changelog format
- Creates a git tag (
api@v1.2.0) and pushes - Publishes a GitHub/GitLab release with the changelog as release notes
In a monorepo, FerrFlow only releases packages that have changed, and understands shared dependency paths.
Key features
Section titled “Key features”- Pre/post-release hooks — run scripts at every lifecycle stage (bump, commit, publish, failure)
- Query commands —
ferrflow version,ferrflow tag, andferrflow statusfor CI scripting - Any version file — Cargo.toml, package.json, pom.xml, build.gradle, Chart.yaml, plain text, and more
- Browser support —
@ferrflow/wasmbrings commit parsing, bump computation, and changelog generation to the browser