Native macOS utility

Make room for the next build.

WD-40 finds and removes development build artifacts from the menu bar. Nothing is selected until you choose it.

macOS 13+ · Apple Silicon + Intel · v0.5.0

Scanning
Targets appear first. Measuring sizes…
rust targetsmeasuring
project-alphatarget · recentrecent
project-betatarget
node modulesmeasuring
web-clientnode_modules
RescanSettings
Cleaning33.9 GB
removing
project-alpha/target
project-betaremoved
project-alphacurrent
·web-clientwaiting
33.9 GBfreed
Rust targets removeddone
Skipped — recentkept

It counts what the disk holds.

Logical file sizes can count the same APFS data more than once. WD-40 reads device bytes from the extent map.

Exact accounting

The reclaimable number is the space you will actually get back.

naive sum84.4 GB
device bytes33.9 GB

Nothing armed

Recent builds stay excluded until you tick them. The button names what it will remove.

Toolchains leave safely

Anything still used by a default, override, pin, or link is never offered.

$ rustup toolchain uninstall
✓ unused toolchain removed

Names now.
Sizes behind them.

The two-phase scan puts targets on screen immediately, then fills in exact sizes as the extent map is measured.

A deliberate clean

Stop after the current target.

The cleaning view names what is coming off. Removals are permanent and removed directories rebuild with the next build.

Build artifactsmeasuring
Rust targetsrecent excludedready
Node modulesverified by heuristicready
Build outputproject manifest foundready

Built for build residue.

WD-40 looks for known artifacts and verifies ambiguous directories against their contents or neighboring project files.

Rust targetstarget directories, temporary cc-target build directories, and cargo-target build directories
Packages & outputnode_modules, .next, dist, and build
CachesDerivedData, ModuleCache, simulator caches, and package-manager download stores
Rust toolchainsToolchains that nothing points at any more

The same rules from the terminal.

The app and CLI share one config file at ~/.config/wd-40/config.toml.

$ wd40 scan
$ wd40 clean --dry-run
$ wd40 scan -g rust
$ wd40 clean-old -d 14

Source install

Put WD-40 in the menu bar.

The first release binary is not published yet. Build the app or CLI from the MIT-licensed source.

$ git clone https://github.com/sunoj/wd-40 && cd wd-40
$ make install   # menu bar app → /Applications
$ make cli       # CLI → ~/.cargo/bin/wd40
Get WD-40 on GitHub

Details

What does WD-40 remove?

Development build artifacts: Rust targets, Node modules, build output, caches, and unused Rust toolchains. Detection uses heuristics rather than directory names alone.

What happens to recent builds?

They are excluded until you explicitly select them. Nothing is selected by default.

Does removal use the Trash?

No. Removals are permanent. Removed directories are recreated by the next build that needs them.

What does it run on?

macOS 13 or later on Apple Silicon and Intel. It is one native Rust and AppKit binary, with no Electron or web view.