Clear the space your dev tools left behind.
Old node_modules, Rust target folders, package caches, Xcode build data and
simulators you forgot about. Dustpan finds them, shows how big each one is and when you last used it, and
clears the ones you pick.
macOS 11 or later · Apple silicon build · Works offline
Where the space goes
Every tool keeps its own copy of something, in its own folder, and none of them clean up after themselves. It adds up quietly until the disk is full in the middle of a build.
Inside your projects
Dependency and build folders stay behind in every project you've ever cloned: node_modules,
target, .venv, Pods, .next, Gradle build.
In tool caches
npm, pnpm, Yarn, pip, Cargo, Go, Gradle, Maven and Homebrew all keep download caches. Xcode keeps DerivedData for projects you deleted long ago.
In simulated phones
iOS simulators, simulator runtimes and Android emulators take several GB each, including ones that can't even run any more because their runtime was removed.
How it works
No setup beyond telling it where your code lives.
Scan
Dustpan searches the folders you choose for project leftovers and checks the known cache and simulator locations. It reads names, sizes and dates only. It takes seconds to a few minutes, depending on how much is there.
Review
Everything is listed with its size and when you last used it. Items that are safe to remove and unused for 30+ days are pre-selected. You can change the cut-off or pick items yourself.
Clean up
Confirm once. Folders go to the Trash by default, so you can put them back. You get a report of what was removed and anything that couldn't be.
Built not to delete the wrong thing
A cleaner is only useful if you can trust it. Every item has a clear safety level, and only the first two are ever pre-selected.
Tools re-download or recreate it automatically, like the npm cache or Xcode DerivedData.
Comes back when you next install or build, like node_modules. Dustpan tells you the command.
May hold things you can't get back: simulator app data, Xcode archives, emulators. Never pre-selected, and removing one needs an extra confirmation.
- A folder only counts when its project file is there too:
targetneeds aCargo.tomlorpom.xml. - Generic names like
buildorbinare marked Review unless git confirms they're ignored. - Every item is checked again right before removal. If it changed since the scan, it's skipped.
- Symbolic links are never followed or removed.
- Running simulators and emulators can't be selected.
- The last-used date comes from your project and git activity, not unreliable file access times.
Stays on your computer
Dustpan needs no account and makes no network requests unless you turn on encrypted backup of your settings or anonymous stats, both off by default. Your files and scan results never leave your Mac. Scan results and settings are stored in your user config folder, and that's it. Privacy details
What it finds
Items under 1 MB are hidden. Full list with locations
Projects
- Node.js
node_modules,.next,.nuxt,.svelte-kit,.turbo,.parcel-cache,.angular - Rust and Maven
target - Python virtualenvs,
.tox,.nox - CocoaPods
Pods, SwiftPM.build - Gradle
.gradleandbuild, Flutterbuildand.dart_tool - .NET
bin/obj, Elixir, Haskell, Zig, Terraform, Composer, Elm, CLion
Caches
- npm, pnpm, Yarn, Bun, Deno
- pip, uv, Poetry
- Cargo registry and git checkouts, Go build and module caches
- Gradle, Maven, NuGet, Composer, pub
- Xcode DerivedData, device support files, archives; CocoaPods; SwiftPM
- Homebrew, Playwright and Puppeteer browsers, Electron, JetBrains IDE caches, Android system images
Simulators & emulators
- iOS, watchOS, tvOS and visionOS simulators, including unusable ones
- Simulator runtimes
- Android emulators (AVDs)
Also a command-line tool
The same engine as a small CLI for scripts and terminals. It only ever removes Safe and Rebuild items, and asks before it does.
CLI reference# see what's there; changes nothing dustpan scan # preview, then clean items unused for 90+ days dustpan clean --older-than 90 --dry-run dustpan clean --older-than 90 # only node_modules, as JSON for scripts dustpan scan --json | jq '.items[] | select(.kind=="node_modules")'
Questions
Will cleaning break my projects?
Project folders marked Rebuild come back when you run the install or build command again. Dustpan shows the command for each item. It never touches your source files: it only removes folders that match a known tool's layout, and anything ambiguous is marked Review.
I cleaned up, so why is my disk still full?
By default, items go to the Trash so you can restore them. The space comes back when you empty the Trash. You can choose "Delete permanently" in the confirm dialog to free it right away.
How does it know when I last used something?
For project folders it takes the most recent of your last install or build inside the folder, your last git activity, and changes at the top of the project. For caches, it's the newest file inside. For simulators, it's the last boot time Xcode records.
Does macOS ask for permissions?
macOS may ask to let Dustpan into folders like Documents, Desktop or an external drive when it scans them. If you decline, those folders are skipped and Dustpan tells you how many couldn't be read.
Does it clean Docker images?
Not yet. Docker's disk image doesn't shrink when files are
deleted from outside Docker, so it needs Docker's own commands. Use docker system prune for now.
Windows and Linux?
The scanner knows Linux and Windows cache locations and the CLI builds on both, but only the macOS app is built and tested today.
Get your disk back
Download, drag to Applications, and scan.
Apple silicon · macOS 11 or later · Installation help