Mono
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.
Installation
Or use our GitHub Action:
- uses: zensical/mono@v0
Usage
Version management
# Create a new version and update all packages
# Generate the changelog of a version in Markdown format
# List the names of changed packages in topological order
# List versions in reverse chronological order
Package discovery
# List the names of all packages in topological order
Commit validation
# Validate a commit message summary
# Validate a commit message in a file
# Validate a commit by identifier
Features
Monorepo-first design
- 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
Conventional commits validation
- 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
Multi-language support
- Rust (Cargo workspaces)
- Node.js (npm/pnpm/yarn workspaces)
- More coming: Python, ...
Interactive version bumping
- 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
Intelligent changelog generation
- 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
Change detection
- Detects which packages changed since last release
- Returns packages in topological order for publishing
- Integrates with
cargo publish,npm publish, or custom scripts
Comparison
| 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 |