#cargo-subcommand #tree #visualize #graph #flags #cmake #openssl

app cargo-tree

A Cargo subcommand that visualizes a crate's dependency graph in a tree-like format

38 releases (breaking)

0.29.0 Jan 30, 2020
0.28.0 Dec 24, 2019
0.27.0 Sep 28, 2019
0.26.0 Apr 12, 2019
0.3.1 Dec 31, 2015

#654 in Cargo plugins

Download history 264/week @ 2024-07-23 247/week @ 2024-07-30 194/week @ 2024-08-06 229/week @ 2024-08-13 251/week @ 2024-08-20 281/week @ 2024-08-27 259/week @ 2024-09-03 313/week @ 2024-09-10 183/week @ 2024-09-17 298/week @ 2024-09-24 212/week @ 2024-10-01 267/week @ 2024-10-08 392/week @ 2024-10-15 295/week @ 2024-10-22 299/week @ 2024-10-29 247/week @ 2024-11-05

1,304 downloads per month

MIT/Apache

27KB
641 lines

cargo-tree

CircleCI Latest Version

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

Requirements: cmake and openssl.

  • macOS (via homebrew): brew install cmake openssl
  • Debian/Ubuntu: apt install cmake libssl-dev pkg-config

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.4
├── net2 v0.2.20
   ├── cfg-if v0.1.0
   ├── kernel32-sys v0.2.1
   │   └── winapi v0.2.5
   ├── libc v0.2.4 (*)
   ├── 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.4
├── net2 v0.2.20
   ├── cfg-if v0.1.0
   ├── kernel32-sys v0.2.1
   │   └── winapi v0.2.5
   ├── libc v0.2.4 (*)
   ├── 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.29
       ├── rand v0.3.12
       │   ├── advapi32-sys v0.1.2
       │   │   └── winapi v0.2.5 (*)
       │   ├── libc v0.2.4 (*)
       │   └── winapi v0.2.5 (*)
       └── rustc-serialize v0.3.16
    └── serde v0.6.7
        └── num v0.1.29 (*)

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.4
├── log v0.3.4
   └── postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres)
├── net2 v0.2.20
   └── postgres v0.10.2 (file:///Volumes/git/rust/rust-postgres) (*)
└── rand v0.3.12
    └── num v0.1.29
        ├── serde v0.6.7
           └── 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.

Dependencies

~5.5MB
~87K SLoC