| Crates.io | cargo-machete |
| lib.rs | cargo-machete |
| version | 0.9.1 |
| created_at | 2021-11-13 18:37:50.293196+00 |
| updated_at | 2025-08-15 20:43:34.670162+00 |
| description | Find unused dependencies with this one weird trick! |
| homepage | |
| repository | https://github.com/bnjbvr/cargo-machete |
| max_upload_size | |
| id | 481490 |
| size | 101,820 |
Thanks to Diego F. Goberna for the lovely logo 🥰
cargo-machete is a Cargo tool that detects unused dependencies in Rust
projects, in a fast (yet imprecise) way.
See also the blog post for a detailed writeup.
Install cargo-machete with cargo:
cargo install cargo-machete
Run cargo-machete in a directory that contains one or more Rust projects (using Cargo for dependency management):
cd my-directory && cargo machete
# alternatively
cargo machete /absolute/path/to/my/directory
The return code gives an indication whether unused dependencies have been found:
This can be used in CI situations.
To ignore a certain set of dependencies in a crate, add
package.metadata.cargo-machete to Cargo.toml (or workspace.metadata.cargo-machete to a
workspace Cargo.toml), and specify an ignored array:
For example:
[dependencies]
prost = "0.10" # Used in code generated by build.rs output, which cargo-machete cannot check
# in an individual package Cargo.toml
[package.metadata.cargo-machete]
ignored = ["prost"]
# in a workspace Cargo.toml
[workspace.metadata.cargo-machete]
ignored = ["prost"]
If there are too many false positives, consider using the --with-metadata CLI
flag, which will call cargo metadata --all-features to find final dependency
names, more accurate dependencies per build type, etc. âš This may modify the
Cargo.lock files in your projects.
Some crates have a different import name, than their dependency name (e.g.
rustls-webpki). This triggers false positives in cargo-machete when used
without the --with-metadata flag. To fix this you can manually rename a crate
for cargo-machete:
For example:
[dependencies]
rustls-webpki = "0.102"
# in an individual package Cargo.toml
[package.metadata.cargo-machete.renamed]
rustls-webpki = "webpki"
# in a workspace Cargo.toml
[workspace.metadata.cargo-machete.renamed]
rustls-webpki = "webpki"
This ensures that if rustls-webpki is no longer used in the project,
cargo-machete will be able to detect it (unlike with the ignored table).
A docker image for cargo machete.
For instance, run cargo-machete in the $(pwd) directory using:
docker run --rm -v $(pwd):/src ghcr.io/bnjbvr/cargo-machete:latest
A github action for cargo machete.
The step given by,
- uses: bnjbvr/cargo-machete@main
can be added to any workflow.
An example workflow is shown below:
name: Cargo Machete
on:
pull_request: { branches: "*" }
jobs:
detect-unused-dependencies:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Machete
uses: bnjbvr/cargo-machete@main
pre-commit Hookscargo machete can be used as a pre-commit hook to check for unused dependencies before committing changes.
Add the following to your .pre-commit-config.yaml:
- repo: https://github.com/bnjbvr/cargo-machete
rev: main # or a specific tag/commit
hooks:
- id: cargo-machete
We welcome community contributions to this project.