Library for scripting analyses against crates.io's database dumps
APACHE-2.0 License
Library for scripting analyses against crates.io's database dumps.
These database dumps contain all information exposed by the crates.io API packaged into a single download. An updated dump is published every 24 hours. The latest dump is available at https://static.crates.io/db-dump.tar.gz.
The examples/ directory of this repo contains several runnable example analyses.
Each of these examples can be run using Cargo once you've downloaded a recent database dump:
$ wget https://static.crates.io/db-dump.tar.gz
$ cargo run --release --example total-downloads
Here is the implementation of the most basic example, total-downloads, and graph of the resulting table. It shows crates.io download rate doubling every 9 months, or equivalently 10× every 2.5 years!
use chrono::Utc;
use db_dump::Date;
use std::collections::BTreeMap as Map;
fn main() -> db_dump::Result<()> {
let mut downloads = Map::<Date<Utc>, u64>::new();
db_dump::Loader::new()
.version_downloads(|row| {
*downloads.entry(row.date).or_default() += row.downloads;
})
.load("./db-dump.tar.gz")?;
for (date, count) in downloads {
println!("{},{}", date, count);
}
Ok(())
}
Here is a graph from the user-downloads example: