Skip to content
JKULDEV

What actually takes up space on a developer's Mac

Mohan Singh Thagunna7 min read
Illustration for “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.

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.

Mentioned in this postReclaimFind what is actually taking your disk space on a Mac.

Read next