Stable type identifiers: a missing piece for crABI and export
Rust Internals [Unofficial]
March 18, 2026
The complete type path is the same as what Rust uses as a crate name + modules + type name. Examples of this can be seen are std::vec::Vec and serde::de::Deserialize which already exists in Rust today. In order to fix the version issue, the hash of the crate will contain the major version.
Examples: hash("serde@1::de::Deserialize") != hash("serde@2::de::Deserialize") The major version will only be used. Two builds of serde 1.0.100 and 1.0.200 as long as they are the same major version will create the same hash. It makes sense because the types are the same and have always been compatible with each other.
If a crate violates semver (breaks) on minor versions, it is a fault of that crate and not a fault with this identifier scheme.
Discussion in the ATmosphere