cargo-machete

Original🇺🇸 English
Translated

Detect unused dependencies in Rust projects for cleaner Cargo.toml files and faster builds. Use when auditing dependencies, optimizing build times, cleaning up Cargo.toml, or detecting bloat. Trigger terms: unused dependencies, cargo-machete, dependency audit, dependency cleanup, bloat detection, cargo-udeps.

6installs
Added on

NPX Install

npx skill4agent add laurigates/claude-plugins cargo-machete

cargo-machete - Unused Dependency Detection

Detect and remove unused dependencies in Rust projects using cargo-machete.

When to Use This Skill

Use this skill when...Use X instead when...
Auditing for unused dependenciesChecking for outdated deps -- use
cargo outdated
Cleaning up Cargo.tomlAuditing security vulnerabilities -- use
cargo audit
Optimizing build times by removing bloatChecking license compliance -- use
cargo deny
Verifying deps in CINeed nightly-accurate analysis -- use
cargo +nightly udeps

Context

  • Cargo.toml: !
    test -f Cargo.toml && echo "EXISTS" || echo "MISSING"
  • Workspace: !
    grep -q '\[workspace\]' Cargo.toml 2>/dev/null && echo "YES" || echo "NO"
  • cargo-machete installed: !
    cargo machete --version 2>/dev/null || echo "NOT INSTALLED"
  • Machete config: !
    test -f .cargo-machete.toml && echo "EXISTS" || echo "MISSING"
  • Workspace members: !
    grep -A 20 '^\[workspace\]' Cargo.toml 2>/dev/null | grep -o '"[^"]*"' 2>/dev/null

Execution

Execute this unused dependency analysis:

Step 1: Verify installation

Check if cargo-machete is installed (see Context above). If not installed, install it:
bash
cargo install cargo-machete

Step 2: Run dependency analysis

Run cargo-machete with metadata for detailed output:
bash
# Single crate
cargo machete --with-metadata

# Workspace (if Context shows workspace)
cargo machete --workspace --with-metadata

Step 3: Evaluate results

Review the output and classify each finding:
FindingAction
Genuinely unused dependencyRemove with
--fix
or manually
Proc-macro dependency (e.g., serde derive)Add
machete:ignore
comment
Build.rs-only dependencyMove to
[build-dependencies]
Re-exported dependencyAdd
machete:ignore
comment with explanation

Step 4: Apply fixes

For confirmed unused dependencies, auto-remove them:
bash
cargo machete --fix
For false positives, add ignore annotations in
Cargo.toml
:
toml
serde = "1.0"  # machete:ignore - used via derive macro
Or create
.cargo-machete.toml
for project-wide ignores:
toml
[ignore]
dependencies = ["serde", "log"]

Step 5: Verify build

After removing dependencies, confirm everything still compiles:
bash
cargo check --all-targets
cargo test --no-run

False Positive Handling

ScenarioSolution
Proc-macro deps (e.g., serde derive)
machete:ignore
comment
Build.rs-only depsMove to
[build-dependencies]
Re-exported deps
machete:ignore
comment with explanation
Example/bench-only depsVerify in
[dev-dependencies]

Comparison with cargo-udeps

Featurecargo-machetecargo-udeps
AccuracyGoodExcellent
SpeedVery fastSlower
Rust versionStableRequires nightly
False positivesSomeFewer
Use cargo-machete for fast CI checks. Use cargo-udeps for thorough audits:
bash
cargo +nightly udeps --workspace --all-features

Agentic Optimizations

ContextCommand
Quick check
cargo machete
Detailed check
cargo machete --with-metadata
Workspace check
cargo machete --workspace --with-metadata
Auto-fix
cargo machete --fix
Verify after fix
cargo check --all-targets
Accurate check (nightly)
cargo +nightly udeps --workspace

Quick Reference

FlagDescription
--with-metadata
Show detailed output with versions and locations
--fix
Auto-remove unused dependencies from Cargo.toml
--workspace
Check all workspace members
-p <crate>
Check specific workspace member
--exclude <crate>
Exclude specific workspace member

Troubleshooting

ProblemSolution
Proc macro flagged as unusedAdd
machete:ignore
comment in Cargo.toml
Build.rs dep flaggedMove to
[build-dependencies]
Re-exported dep flaggedAdd
machete:ignore
with explanation
Need more accuracyUse
cargo +nightly udeps
For CI integration patterns, configuration file examples, pre-commit setup, and Makefile integration, see REFERENCE.md.