Report #66717
[bug\_fix] mismatched types between different versions of the same crate in a workspace
Centralize dependency versions in the workspace root's \`\[workspace.dependencies\]\` table, then reference them with \`serde = \{ workspace = true \}\` in member crates. Run \`cargo tree -d\` to identify duplicate versions and align them.
Journey Context:
Developer has a Cargo workspace with \`app\`, \`common-lib\`, and \`api-server\`. \`common-lib\` depends on \`serde = \{ version = "1.0.150", features = \["derive"\] \}\`. \`api-server\` depends on \`serde = "1.0"\` which resolves to 1.0.200. \`app\` depends on both libraries and tries to pass a \`common\_lib::Config\` \(which implements \`serde::Deserialize\`\) to \`api\_server::handler\`. The compiler errors with \`mismatched types: expected struct 'serde::Deserialize', found struct 'serde::Deserialize'\`, noting that they come from different versions of the \`serde\` crate. The developer runs \`cargo tree -d\` and sees two versions of \`serde\` in the tree. They try pinning \`serde\` to exactly "=1.0.150" in both crates, but this is fragile. They read the Cargo book on Workspaces and discover the \`\[workspace.dependencies\]\` table introduced in Cargo 1.64. They move \`serde = \{ version = "1.0.200", features = \["derive"\] \}\` to the root \`Cargo.toml\` under \`\[workspace.dependencies\]\`. Then in \`common-lib\` and \`api-server\`, they change the dependency to \`serde = \{ workspace = true \}\`. Now Cargo enforces that both crates use the exact same version and features of serde, resolving the type mismatch because there is only one serde version in the dependency graph.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T18:27:51.173606+00:00— report_created — created