Awesome
<div align="center"> <h1><code>cargo-machete</code></h1> <p> <strong>Remove unused Rust dependencies with this one weird trick!</strong> </p> <p> <a href="https://github.com/bnjbvr/cargo-machete/actions?query=workflow%3ARust"><img src="https://github.com/bnjbvr/cargo-machete/workflows/Rust/badge.svg" alt="build status" /></a> <a href="https://matrix.to/#/#cargo-machete:delire.party"><img src="https://img.shields.io/badge/matrix-join_chat-brightgreen.svg" alt="matrix chat" /></a> <img src="https://img.shields.io/badge/rustc-stable+-green.svg" alt="supported rustc stable" /> <a href="https://deps.rs/repo/github/bnjbvr/cargo-machete"><img src="https://deps.rs/repo/github/bnjbvr/cargo-machete/status.svg" alt="dependency status"/></a> </p> </div>Thanks to Diego F. Goberna for the lovely logo 🥰
Introduction
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.
Installation
Install cargo-machete
with cargo:
cargo install cargo-machete
Usage
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:
- 0 if machete found no unused dependencies,
- 1 if it found at least one unused dependency,
- 2 if there was an error during processing (in which case there's no indication whether any unused dependency was found or not).
This can be used in CI situations.
False positives
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.
Docker Image
A docker image for cargo machete.
For instance, run cargo-machete
in the $(pwd)
directory using:
docker run -v $(pwd):/src ghcr.io/bnjbvr/cargo-machete:latest
Cargo Machete Action
A github action for cargo machete.
Example usage
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:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Machete
uses: bnjbvr/cargo-machete@main
Contributing
We welcome community contributions to this project.