Programming language: Rust
License: Mozilla Public License 2.0
Tags: Development Tools     Build System     Cargo     Plugin     mod     tree     module    
Latest version: v0.4.5

cargo-modules alternatives and similar packages

Based on the "Cargo" category.
Alternatively, view cargo-modules alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of cargo-modules or a related project?

Add another 'Cargo' Package



Build Status Downloads Version License


A cargo plugin for showing an overview of a crate's modules.


With time, as your Rust projects grow bigger and bigger, it gets more and more important to properly structure your code. Fortunately Rust provides us with a quite sophisticated module system, allowing us to neatly split up our crates into arbitrarily small sub-modules of types and functions. While this helps to avoid monolithic and unstructured chunks of code, it can also make it hard at times to still mentally stay on top of the over-all high-level structure of the project at hand.

This is where cargo-modules comes into play:



Install cargo-modules on nightly via:

cargo install cargo-modules

Or using rustup's ad-hoc mode:

rustup run nightly cargo install cargo-modules

Or if you want to build it locally:

$ rustup run nightly cargo build --release


cargo-modules requires nightly to run. As such unless you already are using nightly you need to either run this rustup command once, to set the default toolchain to nightly:

rustup default nightly

… or override the toolchain for the current directory (again, once):

rustup override set nightly

To then be able to just call cargo-modules through:

cargo modules <options>

Or if you want to stay on the beta or stable toolchain you would have to call cargo-modules through:

rustup run nightly cargo modules <options>

Tree mode

Display module parent-child relationships as a tree:

cargo modules tree

Graph mode

If you also want to see which modules depends on which other modules, you can use graph mode to output Graphviz DOT compatible output:

cargo modules graph


As extra options you can toggle external types/modules, conditional modules and used types using the --external, --conditional and --types options respectively.

You can convert the output to a PNG file as below:

cargo modules graph | dot -Tpng > modules.png


  • Green nodes are public modules.
  • Yellow nodes are private modules.
  • Black nodes are external types or modules.
  • Dotted nodes are conditional (test modules for example).

  • Black edges denote a 'is sub module of' relation.

  • Yellow/Green edges denote a 'use something of module' relation
    The width of the edge is determined by the number of types used. If types are enabled the edge label shows the types used Green means the use is public, yellow means the use is private.

Orphaned Modules

If you want to also list of potentially orphaned modules, then add a --orphans argument:

cargo modules --orphans tree

cargo modules --orphans graph

Any file src/../foo.rs or src/../foo/mod.rs that is not linked by its super-module via mod foo; is considered a (potential) orphaned module.

To keep false positives to a minimum cargo-modules excludes all build scripts as well as lib.rs and main.rs from the selection of potential orphans.

Plain Mode

If you, for some reason, need to remove the coloring, use:

cargo modules --plain tree

cargo modules --plain graph


If you need any further help:

cargo modules --help


Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct,
and the process for submitting pull requests to us.


We use SemVer for versioning. For the versions available, see the tags on this repository.


See also the list of contributors who participated in this project.


This project is licensed under the MPL-2.0 – see the [LICENSE.md](LICENSE.md) file for details.

*Note that all licence references and agreements mentioned in the cargo-modules README section above are relevant to that project's source code only.