13 stable releases
1.5.1 | Aug 27, 2023 |
---|---|
1.5.0 | Sep 19, 2022 |
1.4.1 | Feb 22, 2020 |
1.3.0 | Dec 2, 2019 |
1.0.3 | Feb 23, 2019 |
#117 in Cargo plugins
94 downloads per month
Used in substrate-deps
51KB
952 lines
cargo-deps
Note: This crate is not actively worked on. Consider using one of the crates mentioned in Alternatives.
Table of Contents
**Table of Contents**About
Cargo subcommand for building dependency graphs of Rust projects.
This project is an improvement on the unmaintained and buggy cargo-graph.
Example:
Installing
cargo-deps
can be installed with cargo install
:
cargo install cargo-deps
Instructions
First, make sure you have graphviz installed.
Next, just cd
into the Rust project directory you want to graph and run:
cargo deps | dot -Tpng > graph.png
That's it! graph.png
will contain the graph (you can change its name, of course!)
Note that >
may not work if the output file already exists, in which case you can try >|
.
Dependency Kinds
The default behavior is to exclude optional, dev, and build dependencies. To see all dependencies, pass --all-deps
:
cargo deps --all-deps | dot -Tpng > graph.png
Dependencies are colored depending on their kind:
- Black: regular dependency
- Purple: build dependency
- Blue: dev dependency
- Red: optional dependency
A dependency can be of more than one kind. In such cases, it is colored with the following priority:
Regular -> Build -> Dev -> Optional
For example, if a dependency is both a build and a dev dependency, then it will be colored as a build dependency. If, however, you pass the --dev-deps
option instead of --all-deps
, the dependency will be colored as a dev dependency (as the build-dependency graph will not be shown).
Filtering
Some Rust projects have really big dependency trees and maybe you just want to display certain dependencies, like the ones in the same workspace. Fortunately, cargo-deps
provides the --filter
option for this use case. Unfortunately, you have to explicitly list all the dependencies you want to keep, and cargo-deps
doesn't detect workspaces just yet.
Excluding
It can be useful to exclude certain crates from the final graph. This can be achieved with the --exclude
flag taking the undesired crates as arguments.
Depth
In order to constrain the size of graphs and make them cleaner, it is possible to limit the output to dependencies within a certain depth using the --depth
option.
Filtering transitive edges
For large dependency graphs, the --no-transitive-deps
option can be used to filter out edges that are "covered" by a transitive dependency, which can make visual parsing a little easier by omitting some redundant edges. For example, if crate A
depends directly on crate B
and C
, and crate B
depends directly on crate C
, this option would omit the edge from A
to C
. To illustrate, compare the default dependency graph for Tokei, generated by cargo deps
, to the graph with transitive edges removed, generated by cargo deps --no-transitive-deps
.
Subgraphs
You can visually group a set of dependencies by using the --subgraph
command.
Examples
This was generated using the command:
cargo deps -I --all-deps --no-regular-deps | dot -Tpng > tokei.png
This was generated using the following whopper of a command to display only MaidSafe dependencies:
cargo deps --all-deps --include-orphans --subgraph safe_app safe_app_jni safe_authenticator safe_authenticator_jni safe_core --subgraph-name "SAFE Client Libs" --filter accumulator config_file_handler crust ffi_utils fake_clock lru_time_cache maidsafe_utilities parsec resource_proof routing rust_sodium safe_app safe_app_jni safe_authenticator safe_authenticator_jni safe_bindgen safe_core safe_crypto safe_vault secure_serialisation self_encryption system_uri tokio_utp --manifest-path safe_app/Cargo.toml | dot -Tpng -Nfontname=Iosevka -Gfontname=Iosevka > safe-client-libs.png
More info
Run cargo deps -h
to see all available options.
Alternatives
While cargo-deps
should work for most use cases, it has an outdated architecture and the creator is not working on active development. Some alternatives to consider are:
cargo-depgraph
: Has more features thancargo-deps
.cargo-tree
: Displays dependencies in a textual format. As of Rust 1.44 is included incargo
as a subcommand.
Dependencies
Changelog
Dependencies
~4.5MB
~78K SLoC