Claude
Skills
Sign in
Back

cargo-machete

Included with Lifetime
$97 forever

cargo-machete: detect unused Rust dependencies. Use when auditing Cargo.toml, optimizing build times, or cleaning up dependency bloat.

Backend & APIs

What this skill does


# 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 dependencies | Checking for outdated deps -- use `cargo outdated` |
| Cleaning up Cargo.toml | Auditing security vulnerabilities -- use `cargo audit` |
| Optimizing build times by removing bloat | Checking license compliance -- use `cargo deny` |
| Verifying deps in CI | Need nightly-accurate analysis -- use `cargo +nightly udeps` |

## Context

- Cargo.toml: !`find . -maxdepth 1 -name \'Cargo.toml\'`
- Workspace: !`grep -q '\[workspace\]' Cargo.toml`
- cargo-machete installed: !`cargo machete --version`
- Machete config: !`find . -maxdepth 1 -name \'.cargo-machete.toml\'`
- Workspace members: !`grep -A 20 '^\[workspace\]' Cargo.toml`

## 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:

| Finding | Action |
|---------|--------|
| Genuinely unused dependency | Remove with `--fix` or manually |
| Proc-macro dependency (e.g., serde derive) | Add `machete:ignore` comment |
| Build.rs-only dependency | Move to `[build-dependencies]` |
| Re-exported dependency | Add `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

| Scenario | Solution |
|----------|----------|
| Proc-macro deps (e.g., serde derive) | `machete:ignore` comment |
| Build.rs-only deps | Move to `[build-dependencies]` |
| Re-exported deps | `machete:ignore` comment with explanation |
| Example/bench-only deps | Verify in `[dev-dependencies]` |

## Comparison with cargo-udeps

| Feature | cargo-machete | cargo-udeps |
|---------|---------------|-------------|
| Accuracy | Good | Excellent |
| Speed | Very fast | Slower |
| Rust version | Stable | Requires nightly |
| False positives | Some | Fewer |

Use cargo-machete for fast CI checks. Use cargo-udeps for thorough audits:

```bash
cargo +nightly udeps --workspace --all-features
```

## Agentic Optimizations

| Context | Command |
|---------|---------|
| 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

| Flag | Description |
|------|-------------|
| `--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

| Problem | Solution |
|---------|----------|
| Proc macro flagged as unused | Add `machete:ignore` comment in Cargo.toml |
| Build.rs dep flagged | Move to `[build-dependencies]` |
| Re-exported dep flagged | Add `machete:ignore` with explanation |
| Need more accuracy | Use `cargo +nightly udeps` |

For CI integration patterns, configuration file examples, pre-commit setup, and Makefile integration, see [REFERENCE.md](REFERENCE.md).

Related in Backend & APIs