18 unstable releases (3 breaking)

0.5.9 Sep 11, 2020
0.5.8 Aug 12, 2020
0.4.4 Aug 11, 2020
0.3.1 Aug 8, 2020
0.2.1 Aug 8, 2020

#591 in Cargo plugins

50 downloads per month


519 lines

Rust Crate Version Manager (CVM)

Crate Version Manager (CVM) helps maintain crate versions between git branches, which can be used by CI workflows to ensure rust crate versions are up-to-date.

CVM checks the current Cargo.toml file for package and workspace.members, iterates through all the crates in the workspace, checks if any workspace's src/ directory has changed, and then checks whether the version has been changed compared to a target branch, which defaults to master.

If the version has not been incremented compared to the target branch, and there have been changes to the source files, then CVM will either print a warning to the terminal or panic.


  • Rust toolchain
  • Git ^2.22.0


cargo install cargo-cvm

Getting Started

cargo cvm --help

    cargo-cvm cvm [FLAGS] [OPTIONS]

    -x, --check      Panic if the versions are out-of-date
    -c, --commit     git commit updated version(s), otherwise will only add the files to git. Can only be used with
                     --fix or --force flags
    -f, --fix        Automatically fix the version if it is outdated. By default, this will bump the minor version,
                     unless otherwise specified by the --semver option
    -F, --force      Force a version bump. Can use be used with --semver option to determine version type
    -h, --help       Prints help information
    -V, --version    Prints version information
    -w, --warn       Warn if the versions are out-of-date

    -b, --branch <branch>      Which branch to compare to the current. Will attempt to find the version in the target
                               branch and check if the version has been bumped or not.
    -r, --remote <remote>      Determine which remote to use for the target branch. Defaults to `origin`.
    -s, --semver <semver>      Type of Semantic Versioning; i.e. `minor`, `major`, or `patch`. Defaults to `minor`
    -k, --ssh-key <ssh-key>    Provide the path to your ssh private key for authenticating against remote git hosts.
                               Defaults to $HOME/.ssh/id_rsa

Version Check

cargo cvm --check

This command will panic! if a workspace's version is out of date.

Bump Version

cargo cvm --fix --semver [major, minor, patch]

This command bumps the semantic versioning of the crate given the type of semantic version provided, i.e. major, minor, or patch. By default, version updates use minor.

When cargo cvm -f is run on an already up-to-date crate version, it will have no affect.

NOTE: If you run this command in a workspace with multiple members that are outdated, it will apply the same semantic versioning type across all crates, which may not be correct.

If you want to bump multiple versions that are not the same semantic version type, e.g. minor, then it is best to run this command inside the crate directory.

Force Version Bump

cargo cvm --force --semver [major, minor, patch]

cargo cvm -F will force update a version, even if the workspace has an up-to-date version.

Warn Outdated Versions

cargo cvm --warn

Similar to cargo cvm -x, this command will print errors when versions are out of date, but in this case, the command will not panic! when a crate is outdated.

Compare Target Branch

cargo cvm --branch <target-branch>

By default, CVM compares against the master branch. However, using the --branch or -b flag, you can specify a target branch to compare versions against.


~373K SLoC