| Crates.io | public-api |
| lib.rs | public-api |
| version | 0.50.1 |
| created_at | 2022-04-07 13:03:53.167647+00 |
| updated_at | 2025-08-11 06:40:56.389482+00 |
| description | List and diff the public API of Rust library crates. Relies on rustdoc JSON output from the nightly toolchain. |
| homepage | https://github.com/cargo-public-api/cargo-public-api/tree/main/public-api |
| repository | https://github.com/cargo-public-api/cargo-public-api/tree/main/public-api |
| max_upload_size | |
| id | 563645 |
| size | 223,804 |
List and diff the public API of Rust library crates by analyzing rustdoc JSON output files from rustdoc +nightly.
See docs.rs for library documentation and example code.
Use cargo public-api for CLI use cases.
With a regular cargo test that you run in CI you will be able to
First add the latest versions of the recommended libraries to your [dev-dependencies]:
cargo add --dev \
rustup-toolchain \
rustdoc-json \
public-api
Then add the following test to your project. As the author of the below test code, I hereby associate it with CC0 and to the extent possible under law waive all copyright and related or neighboring rights to it:
#[test]
fn public_api() {
// Install a compatible nightly toolchain if it is missing.
rustup_toolchain::install(public_api::MINIMUM_NIGHTLY_RUST_VERSION).unwrap();
// Build rustdoc JSON.
let rustdoc_json = rustdoc_json::Builder::default()
.toolchain(public_api::MINIMUM_NIGHTLY_RUST_VERSION)
.build()
.unwrap();
// Derive the public API from rustdoc JSON.
let public_api = public_api::Builder::from_rustdoc_json(rustdoc_json)
.build()
.unwrap();
// Assert that the public API matches the latest snapshot.
// Run with env var `UPDATE_SNAPSHOTS=yes` to update the snapshot.
public_api.assert_eq_or_update("./tests/snapshots/public-api.txt");
}
Before you run the test the first time you need create a snapshot of the current public API:
UPDATE_SNAPSHOTS=yes cargo test
This creates a tests/public-api.txt file in your project that you git add together with your other project files. Then a regular
cargo test
will fail if your public API is accidentally or deliberately changed. Run
UPDATE_SNAPSHOTS=yes cargo test
again to update the public API snapshot and review the git diff.
See here.