Skip to main content

Cargo (Rust)

Publish Rust crates to crates.io using Universal Release.

Detection​

Automatically detected when Cargo.toml exists.

Configuration​

ecosystems:
cargo:
enabled: true
registry: https://crates.io
validation:
build: true
test: true
clippy: true
rustfmt: true

Credentials​

Store your crates.io token:

release secrets set CARGO_TOKEN

Get your token from crates.io/settings/tokens.

Publishing​

# Publish with validation
release publish --ecosystem cargo

# Dry run
release publish --ecosystem cargo --dry-run

Validation​

Universal Release validates:

  • βœ… Cargo.toml exists and is valid
  • βœ… Build succeeds (cargo build --release)
  • βœ… Tests pass (cargo test)
  • βœ… Clippy checks pass (cargo clippy)
  • βœ… Formatting is correct (cargo fmt --check)

Rollback​

Cargo supports yanking:

release rollback 1.2.3 --strategy yank

This runs cargo yank --version 1.2.3.

Best Practices​

Configure Cargo.toml​

[package]
name = "my-crate"
version = "1.0.0"
edition = "2021"
license = "MIT"
description = "A brief description"
repository = "https://github.com/user/repo"
documentation = "https://docs.rs/my-crate"

[dependencies]
# Your dependencies

Use Workspace for Monorepos​

[workspace]
members = ["crates/*"]

Version Management​

Cargo version is read from Cargo.toml:

# Show current version
release version

# Bump version (updates Cargo.toml)
release version --bump minor

# Set specific version
release version --set 2.0.0

Next Steps​