cargo tally
is a Cargo subcommand for drawing graphs of the number of crates
that depend directly or indirectly on a crate over time.
```
Usage: cargo tally --init
cargo tally [options]
Options: --graph TITLE Display line graph using gnuplot, rather than dump csv --relative Display as a fraction of total crates, not absolute number --transitive Count transitive dependencies, not just direct dependencies --exclude REGEX Ignore a dependency coming from any crates matching regex ```
cargo install cargo-tally
cargo tally --init
There is a one-time setup step that downloads a 7 MB json file of crates.io
metadata into a file called tally.json.gz
within the current directory.
Subsequent queries read from this cached data and do not query crates.io.
By default cargo tally
prints out a CSV with a timestamp column and one
column for each crate being tallied. Pass the --graph
flag with a title,
like --graph "Exponential growth!"
, to pop open gnuplot
with a line graph.
Requires gnuplot
to be present in your $PATH. On Ubuntu I was able to
install this with sudo apt install gnuplot
. On macOS you want brew install
gnuplot --with-qt
. If you can't get that working, you can always run without
--graph
and make your own graphs in Excel or Gnumeric.
The tally command accepts a list of which crates to tally. This can either be
the name of a crate like serde
or a name with arbitrary semver version
specification like serde:0.9
. If a version is not specified, dependencies on
all versions of the crate are tallied together.
If you come up with an interesting graph, please [open an issue] and just drop the picture in there! I would love to see what you find! Also @mention the crates' authors if you would like to share with them.
cargo tally --graph "Number of crates that depend directly on Serde vs rustc-serialize" rustc-serialize serde
cargo tally --exclude '^google-' --graph "Number of crates that depend directly on each Serde version" serde:0.5 serde:0.6 serde:0.7 serde:0.8 serde:0.9 serde:1.0
cargo tally --graph "Fraction of crates.io that depends transitively on libc" --relative --transitive libc
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.