Skip to content

cargo-mono

cargo-mono is a Cargo external subcommand (cargo mono) for monorepo-scale Rust workspace operations.

Why use cargo-mono

  • Discover and scope affected crates with deterministic workspace analysis.
  • Coordinate safe version bumps across internal dependencies.
  • Run release and publish workflows with structured operator-friendly output.

Core capabilities

  • Workspace discovery and reporting: list
  • Git-aware impact analysis: changed
  • Version orchestration and release commit automation: bump
  • Dependency-aware publish flow with optional release tag creation: publish
  • Stable output contract: --output human|json

Install

Tag contract:

  • cargo-mono@v<semver>

cargo-binstall:

cargo binstall cargo-mono --no-confirm

GitHub Actions:

- uses: taiki-e/install-action@v2
  with:
    tool: cargo-binstall
- run: cargo binstall cargo-mono --no-confirm

Common workflows

List publishable workspace crates:

cargo mono list

Find crates changed from the default base ref:

cargo mono changed

Bump changed crates with dependent patch propagation:

cargo mono bump --changed --level patch --bump-dependents

Dry-run publish for selected changed crates:

cargo mono publish --changed --dry-run

Enable publish tag creation for selected crates:

[workspace.metadata.cargo-mono.publish.tag]
packages = ["nodeup", "cargo-mono"]

When enabled, successful publish runs create local tags with <crate>@v<version> naming.

Quality and reliability

cargo-mono is validated with command-level integration tests that run against temporary git workspaces.

The suite verifies:

  • Stable human and json output behavior across commands.
  • Change detection contracts, including include/exclude path filters, direct-only mode, include-uncommitted mode, and global-impact file handling.
  • Release bump behavior, including internal dependency updates, workspace dependency updates, and release commit creation without tag creation.
  • Publish safety behavior, including non-publishable crate skipping, invalid package selection errors, and allowlist-based publish tag creation.

Run from repository root:

cargo test -p cargo-mono --test cli

APT and DNF

Native packages for cargo-mono are not published yet. Use the installation methods above for now. The commands below apply after the first native package release.

Follow Linux Packages to verify the repository key and register stable. Then install cargo-mono with sudo apt-get install cargo-mono or sudo dnf install cargo-mono. Use the same package manager for updates and removal.