#info #build #serialization #flag #safe #type #default #crates #part


Part of the build-info and build-info-build crates: This crate provides the types that are serialized by build-info-build and used by build-info

23 releases

Uses new Rust 2021

0.0.28 Oct 29, 2022
0.0.27 Jul 4, 2022
0.0.26 Mar 4, 2022
0.0.24 Jul 1, 2021
0.0.19 Jun 10, 2020
Download history 1216/week @ 2022-08-08 1418/week @ 2022-08-15 1288/week @ 2022-08-22 1471/week @ 2022-08-29 1225/week @ 2022-09-05 1417/week @ 2022-09-12 1367/week @ 2022-09-19 1412/week @ 2022-09-26 1523/week @ 2022-10-03 1833/week @ 2022-10-10 1584/week @ 2022-10-17 1658/week @ 2022-10-24 1521/week @ 2022-10-31 790/week @ 2022-11-07 963/week @ 2022-11-14 941/week @ 2022-11-21

4,298 downloads per month
Used in 8 crates (3 directly)


164 lines


Begin by adding build-info as a [dependency] and build-info-build as a [build-dependency] to your Cargo.toml. By separating those two crates, pure compile-time dependencies, such as git2 are not compiled into your final program. For this to work properly, ensure to opt in to resolver "2".

If it does not already exist, add a build.rs to your project's root, where you call build_info_build::build_script(). This will collect build information at compile time.

Then, either use the build_info! macro to add a function that returns version information at runtime:

build_info::build_info!(fn version);

or use build_info::format! to generate a string at compile time:

// sample output: "{sample v0.0.13 built with rustc 1.45.0-nightly (4bd32c980 2020-05-29) at 2020-05-30 11:22:46Z}"
build_info::format!("{{{} v{} built with {} at {}}}", $.crate_info.name, $.crate_info.version, $.compiler, $.timestamp)

The sample project shows both variants.


The build_info crate supports several feature flags:

  • The runtime feature enables build_info::build_info!. It is enabled by default, but if you intend to only use build_info::format!, it is safe to disable this flag.
  • The chrono feature enables the default features of the chrono package, which is used by build_info::build_info!. It is disabled by default.
  • The serde feature adds Serialize/Deserialize support to the types used by build_info::build_info!. It is disabled by default.


The build script will ask cargo to rerun it whenever the project or the currently checked out commit changes. It will not necessarily be rerun if only the dependencies change (build_info_build::build_script will try to find the lockfile and depend on it, but it is not really aware of any of the more intricate features, such as, cargo workspaces). Please open an issue if your specific use case requires a more strict rerun policy for build.rs and include a short description what additional files should trigger a rebuild when changed.


~34K SLoC