What actually takes up space on a developer's Mac
On one working machine: 152.87 GB reclaimable, of which 66.2 GB was safely removable cache. The largest single items were Android emulator snapshots, node_modules and Xcode archives — none of which a general-purpose Mac cleaner looks at.
- macos
- developers
- storage
- xcode
General-purpose Mac cleaners look where ordinary Macs get full: browser caches, Downloads, Trash, app leftovers. On a developer's machine that is a rounding error.
Here is what a scan of one working Mac actually found. The disk was 494 GB and 93% full.
The measurements
| What | Size |
|---|---|
| Developer caches (Gradle, npm, pnpm, Bun, CocoaPods, SwiftPM, Cargo, Go, pip) | 62.47 GB |
| node_modules across all projects | 27 GB |
| Android emulator snapshots | 27.26 GB |
| Xcode (archives, DerivedData, iOS DeviceSupport) | 18.98 GB |
| Installed applications | 19.25 GB |
| Simulators and emulators | 17.3 GB |
| Downloaded AI model weights | 13.56 GB |
| Total reclaimable | 152.87 GB |
| Of which safe to clear without review | 66.2 GB |
That is roughly a third of the disk, and about 13% of it could go with no decision required at all.
Why these are the big ones
Build caches never shrink. Gradle, npm and their equivalents are append-only by design: they cache every version of every dependency you have ever resolved, because re-downloading is expensive and disk is assumed cheap. Nothing prunes them.
node_modules multiplies. Every project gets its own copy. Twenty projects means twenty copies of largely the same packages.
Xcode archives are forever. Every build you ship writes an .xcarchive and none is ever removed. They matter — they hold the dSYMs needed to symbolicate crash reports from released builds — so they should be reviewed, not blindly deleted.
Emulator images are enormous. Each Android system image is 1–3 GB, each iOS simulator device holds its own installed apps and data, and neither is removed when you stop using that API level.
Model weights are the new surprise. A handful of local LLMs is comfortably 10–20 GB, and nothing tells you they are there.
What is safe and what is not
The distinction that matters is not size, it is whether the thing regenerates on its own.
- Safe: DerivedData, Gradle caches, npm/pnpm caches, SwiftPM checkouts. All rebuild or re-download. The only cost is one slow build.
- Review: Xcode archives (dSYMs for shipped builds), model weights (multi-gigabyte re-downloads), simulators you still use, node_modules for active projects.
- Never: anything the tool cannot prove is regenerable.
A cleaner that does not make this distinction is just a delete button with extra steps.
Doing it yourself
Nothing here needs a tool. du -sh ~/Library/Developer/Xcode/* and du -sh ~/.gradle will show you the big ones, and find . -name node_modules -prune finds the rest.
Reclaim automates the measuring and, more usefully, labels each finding with what breaks if it goes — but the numbers above came from du, and you can get them the same way.
