Cargo.toml dependency management patterns for HASH workspace. Use when adding, updating, or removing dependencies, organizing Cargo.toml sections, configuring version pinning and default features, or managing public dependencies.
Guidance for adding and managing dependencies in Cargo.toml files within the HASH repository's workspace structure.
HASH uses a strict workspace dependency pattern:
✅ DO:
[workspace.dependencies]version = "1.0.0" = ^1.0.0)default-features = false for all dependencies unless specifically neededworkspace = true in package Cargo.tomlpublic = true for dependencies exposed in public API❌ DON'T:
= prefix (e.g., ) in workspace root=1.0.0default-features without considering impactpublic = true for dependencies exposed in public APIEvery package Cargo.toml must organize dependencies into these sections:
[dependencies]
# Public workspace dependencies
hash-graph-types = { workspace = true, public = true }
hashql-core = { workspace = true, public = true }
# Public third-party dependencies
serde = { workspace = true, public = true, features = ["derive"] }
tokio = { workspace = true, public = true }
# Private workspace dependencies
error-stack = { workspace = true }
hash-codec = { workspace = true }
# Private third-party dependencies
tracing = { workspace = true }
regex = { workspace = true }
Keep all 4 section comments even if a section is empty.
1.2.3workspace = true (+ public = true if needed)Choose the guide that matches the task:
Use when: Adding new dependencies to workspace root
Use when: Adding dependencies to a package Cargo.toml
public = trueUse when: Looking for real examples from HASH codebase
@local/codec@local/hashql/core# 1. Add to workspace root Cargo.toml
[workspace.dependencies]
my-crate = { version = "1.2.3", default-features = false }
# 2. Add to package Cargo.toml (appropriate section)
[dependencies]
# Private third-party dependencies
my-crate = { workspace = true }
# Use when the dependency appears in your public API
serde = { workspace = true, public = true, features = ["derive"] }
tokio = { workspace = true, public = true }
[dependencies]
serde = { workspace = true, optional = true, features = ["derive"] }
[features]
serde = ["dep:serde", "other-dep/serde"]