When a developer's Mac says the disk is almost full, the space is usually in a handful of folders that build tools fill and never empty. Here is how to find them, what is safe to clear and what to leave alone.
Open System Settings › General › Storage for macOS's breakdown. In Terminal:
df -h /System/Volumes/Data
On current macOS your files live on the Data volume, so df -h / shows only the small, read-only system volume as used. The available space is the same for both.
du -hd 1 ~ 2>/dev/null | sort -hr | head -20
du -hd 1 ~/Library 2>/dev/null | sort -hr | head -15
Repeat inside whichever folder is biggest until you find the culprit. These can take a few minutes on a full disk.
macOS protects some folders, such as Mail, Safari data and the Trash. Unless Terminal has Full Disk Access (System Settings › Privacy & Security › Full Disk Access), du skips them with "Operation not permitted" and the totals are too low.
~/Library/Developer/Xcode/DerivedData. Safe to delete; it rebuilds. See the DerivedData guide.brew cleanup -n shows what brew cleanup would remove.~/Library/Developer/CoreSimulator. Remove runtimes in Xcode › Settings › Platforms rather than deleting folders.~/Library/Developer/Xcode/Archives. Keep archives of versions you shipped; they hold the symbols for their crash reports.~/Library/Containers/com.docker.docker. Its disk image can hold databases in volumes. Use docker system df to see usage and docker system prune to remove stopped containers, unused networks, dangling images and build cache. Never delete the disk image by hand.~/.android/avd. Delete them in Android Studio's Device Manager.Storage settings put anything it can't categorize under System Data. That includes caches and logs, swap files, local Time Machine snapshots and app support files. Two parts are easy to check:
sysctl vm.swapusage
tmutil listlocalsnapshots /
Swap files live in /System/Volumes/VM and hold memory macOS moved to disk. Restarting clears most of them. Never delete them by hand. Local snapshots are managed by macOS, which removes them when it needs the space.
/System, /usr, /bin, /sbin or /private.~/Library as a whole.~/.cargo/bin, ~/.rustup, global npm packages and your SSH and Git config.SymbolSweep covers the developer part of the problem. Its free scan measures, and lists by tier:
~/.yarn/cache), Bun, Cargo registry, pnpm, pip, node-gyp, TypeScript, Homebrew, Go build and CocoaPods caches, plus .next, .turbo, .vite, .parcel-cache and node_modules/.cache inside projects.node_modules.dist, build, out and coverage folders can be moved to the Trash one at a time.~/Library/Caches/com.apple.coresymbolicationd.What it does not do: it doesn't clean System Data, swap, Time Machine snapshots, the Trash (beyond items it moved there itself), Photos, Mail, iCloud, iOS backups, app containers, or anything under /System, /Library or /Applications. It shows swap size for information only.
Scanning is free and never deletes anything. Deleting needs a one-time $12 license for one Mac. Requires macOS 13 or later on Apple silicon. See how it works.
System Data includes caches, logs, swap files and local Time Machine snapshots. On a developer's Mac, build tool caches in your Library often add to it. Check swap with sysctl vm.swapusage and snapshots with tmutil listlocalsnapshots /.
Most of it is regenerable, but some apps store data there they would have to download again, or sign you out. Delete specific folders you can identify rather than everything.
Check Xcode DerivedData, node_modules in old projects, Rust target folders and package manager caches first. All of them are safe to delete and rebuild when needed.
No. It cleans developer caches and build output in your home folder and the user-level symbolication cache. It doesn't touch swap, snapshots or anything under /System.