Workspaces
Cargo workspaces group multiple packages with shared Cargo.lock and optional [workspace.dependencies].
Busca en todas las páginas de la documentación
Cargo workspaces group multiple packages with shared Cargo.lock and optional [workspace.dependencies].
# Cargo.toml (root)
[workspace]
members = ["crates/api", "crates/cli"]
resolver = "2"
[workspace.dependencies]
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1", features = ["full"] }When to reach for this: Monorepos with library + binary + internal crates sharing versions.
# crates/api/Cargo.toml
[package]
name = "api"
version = "0.1.0"
edition = "2024"
[dependencies]
serde = { workspace = true }cargo test --workspace
cargo build -p cliWhat this demonstrates:
-p selects packagedefault-members for bare cargo build. exclude directories. Virtual workspace (no root package) common.
path = "../core" in members.cargo test --workspace.| Alternative | Use When | Don't Use When |
|---|---|---|
| Single crate modules | Small project | Independent versioning needed |
| Separate repos | Independent release | Shared atomic changes |
| cargo workspaces + git deps | Cross repo | Same repo simpler |
Stack versions: This page was written for Rust 1.97.0 (edition 2024), Tokio 1.x, Axum 0.8, serde 1.0, sqlx 0.8, clap 4, and Polars 0.46+.
Revisado por Chris St. John·Última actualización: 16 jul 2026