cargo-tree

Build Status Latest Version

cargo tree is a Cargo subcommand that visualizes a crate's dependency graph in a tree-like format.

Install it with Cargo:

$ cargo install cargo-tree

In its default mode, cargo tree will print the "normal" dependencies of the local crate:

$ cargo tree postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) ├── bufstream v0.1.1 ├── byteorder v0.4.2 ├── hex v0.1.0 ├── log v0.3.4 │ └── libc v0.2.2 ├── net2 v0.2.19 │ ├── cfg-if v0.1.0 │ ├── kernel32-sys v0.2.1 │ │ └── winapi v0.2.5 │ ├── libc v0.2.2 (*) │ ├── winapi v0.2.5 (*) │ └── ws2_32-sys v0.2.1 │ └── winapi v0.2.5 (*) └── phf v0.7.9 └── phf_shared v0.7.9

Crates will only have their dependencies displayed the first time they are shown - further copies will have a (*) appended to indicate that their output has been truncated.

Like other cargo subcommands, features can be enabled via the --features flag: $ cargo tree --features serde_json postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) ├── bufstream v0.1.1 ├── byteorder v0.4.2 ├── hex v0.1.0 ├── log v0.3.4 │ └── libc v0.2.2 ├── net2 v0.2.19 │ ├── cfg-if v0.1.0 │ ├── kernel32-sys v0.2.1 │ │ └── winapi v0.2.5 │ ├── libc v0.2.2 (*) │ ├── winapi v0.2.5 (*) │ └── ws2_32-sys v0.2.1 │ └── winapi v0.2.5 (*) ├── phf v0.7.9 │ └── phf_shared v0.7.9 └── serde_json v0.6.0 ├── num v0.1.28 │ ├── rand v0.3.12 │ │ ├── advapi32-sys v0.1.2 │ │ │ └── winapi v0.2.5 (*) │ │ ├── libc v0.2.2 (*) │ │ └── winapi v0.2.5 (*) │ └── rustc-serialize v0.3.16 └── serde v0.6.1 └── num v0.1.28 (*)

Output can be switched to development or build dependencies with the --kind or -k flag:

cargo tree -k build postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) └── phf_codegen v0.7.9 ├── phf_generator v0.7.9 │ ├── phf_shared v0.7.9 │ └── rand v0.3.12 │ ├── advapi32-sys v0.1.2 │ │ └── winapi v0.2.5 │ ├── libc v0.2.2 │ └── winapi v0.2.5 (*) └── phf_shared v0.7.9 (*)

cargo tree can also operate in an "inverse" mode where the dependency tree is walked backwards. This is most often useful when trying to determine where a certain crate is coming from. The --package or -p flag selects the crate to use as the root of the tree and the --invert or -i flag inverts the dependency graph traversal:

cargo tree --features serde_json -p libc -i libc v0.2.2 ├── log v0.3.4 │ └── postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) ├── net2 v0.2.19 │ └── postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) (*) └── rand v0.3.12 └── num v0.1.28 ├── serde v0.6.1 │ └── serde_json v0.6.0 │ └── postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) (*) └── serde_json v0.6.0 (*)

More options are available - see the output of cargo tree --help for details.