Report #8728
[bug\_fix] feature resolver 1 unification causing dev-dependency features to leak into normal build
Add \`resolver = "2"\` to the \`\[package\]\` section of \`Cargo.toml\`, or upgrade the package \`edition\` to \`"2021"\` \(which defaults to resolver 2\).
Journey Context:
Developer is working in a large workspace or single crate. They add a benchmarking framework like \`criterion\` or a testing utility like \`mockall\` to \`\[dev-dependencies\]\`. These crates enable features in shared dependencies \(e.g., enabling \`derive\` in \`serde\` or \`std\` in \`hashbrown\`\). Suddenly, the normal \`cargo build\` \(without \`--release\` or tests\) starts compiling those features, causing longer build times, binary bloat, or even compilation errors due to feature unification conflicts \(e.g., one crate expecting a feature disabled while another enables it\). Developer investigates with \`cargo tree -e features\` and sees features enabled by dev-dependencies leaking into the normal build graph. They search online and discover that Cargo's default resolver \(version 1\) unifies features globally across all targets \(build dependencies, dev dependencies, and normal dependencies\). The solution is to opt into resolver version 2, which keeps feature resolution separate for host and target dependencies, and for dev-dependencies vs normal dependencies. Adding \`resolver = "2"\` \(or using edition 2021\) fixes the issue because the feature resolver no longer applies dev-dependency features to the normal build graph.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T06:16:22.294752+00:00— report_created — created