Mono repository automation toolkit
mono is a release management tool built specifically for monorepos. It validates commits, determines versions, generates changelogs, and orchestrates publishing – all with zero configuration needed for standard workflows. Rust and Node workspaces are supported out of the box, with more languages coming soon.
cargo install monoOr use our GitHub Action:
- uses: zensical/mono@v0# Create a new version and update all packages
mono version create
# Generate the changelog of a version in Markdown format
mono version changelog
# List the names of changed packages in topological order
mono version changed
# List versions in reverse chronological order
mono version list# List the names of all packages in topological order
mono list# Validate a commit message summary
mono validate commit "feature: add authentication"
# Validate a commit message in a file
mono validate commit --file .git/COMMIT_EDITMSG
# Validate a commit by identifier
mono validate commit --id 7b5e433- Automatic package discovery from
Cargo.tomlworkspaces orpackage.jsonworkspaces - Automatic scope detection from directory structure based on packages
- Topological sorting ensures dependencies are published before dependents
- Validates commit messages against Conventional Commits format
- Suggests valid scopes based on actual packages in your monorepo
- Works as a git hook or in CI
- Clear, actionable error messages
- Rust (Cargo workspaces)
- Node.js (npm/pnpm/yarn workspaces)
- More coming: Python, ...
- Visual prompt showing suggested version increments
- Computes suggestions from Conventional Commits types
- Understands
0.0.z(patch-only) and0.y.z(breaking changes = minor) ranges - Batch version bumping for related packages
- Generates changelogs from Conventional Commits
- Groups changes by package and type (Features, Fixes, Breaking Changes)
- Supports changelog summaries attached to commits for curated release notes
- Links to issues and pull requests automatically
- Detects which packages changed since last release
- Returns packages in topological order for publishing
- Integrates with
cargo publish,npm publish, or custom scripts
| Tool | Focus | Why mono |
|---|---|---|
| Lerna | JavaScript monorepos, publishing | Language-agnostic, opinionated defaults, no Node.js required |
| changesets | Developer-written changelogs | Fully automated from git history, no manual changeset files |
| cocogitto | Git Conventional Commits | Monorepo-first with automatic scopes and multi-package releases |
| git-cliff | Changelog generation | Interactive version selection, package-aware changelogs, topological publishing |
| cargo-release | Single Rust crate releases | Multi-package workspaces with dependency ordering |
| semantic-release | Automated releases | Simpler, faster, designed for monorepo batch operations |