What is System Data on a Mac?
Open System Settings, click General, then Storage. The bar at the top splits your disk into categories: Applications, Documents, Photos and so on. System Data is the catch-all. Older versions of macOS called it Other.
Apple's Storage settings guide describes it as files that don't fall into the other categories: mostly files used by the system, such as log files, caches, VM files and other runtime resources, plus temporary files, fonts, app support files and plug-ins. The same page says you can't manage its contents there, and that its size varies with the current state of your Mac.
That is the whole problem. System Data can be the biggest bar on the chart and Storage settings won't tell you what is in it. To shrink it, you have to look at the folders yourself.
Why is System Data so large on a developer's Mac?
Apple doesn't publish which folder lands in which category, so don't try to reverse-engineer the bar. What it does say — caches, logs, VM files, app support files — describes most of what developer tools keep in your Library folder. These are the usual suspects:
- Docker Desktop's disk image. Every image, container and volume lives in one file,
~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw. It is a VM file in Apple's sense and often the single biggest item. How to shrink it safely. - Xcode build output and simulators.
~/Library/Developer/Xcode/DerivedDataholds build products and indexes;~/Library/Developer/CoreSimulator/Devicesholds every simulator you have created. See DerivedData and simulators and Device Support. - Simulator runtimes. Recent Xcode versions keep each iOS runtime as a disk image outside your home folder.
xcrun simctl runtime listlists them with their total size. - Caches.
~/Library/Cachescollects Homebrew downloads, pip, Yarn, JetBrains IDE indexes, Playwright browsers and more. See package-manager caches and the Gradle cache. - App support files.
~/Library/Application Supportholds app data, from editor workspace storage to the virtual machine images Claude Desktop keeps inClaude/vm_bundles. See AI coding tools. - Logs.
~/Library/Logs,/Library/Logsand/private/var/log. Usually smaller than the rest, but a tool stuck in a loop can write gigabytes.
What about Time Machine snapshots and purgeable space?
Time Machine keeps local snapshots of your startup disk, even with no backup disk attached. According to Apple, it saves one about every hour and keeps it for 24 hours, keeps one of your last successful backup until space is needed, and saves another before each macOS update. To see them:
tmutil listlocalsnapshots /Apple says your Mac counts the space snapshots use as available storage, and deletes them as they age or as space is needed. So they rarely cause a full disk on their own, but they are one reason two tools can disagree about how much space is free. If you want them gone now, Apple's way is to set Time Machine to back up manually, wait a few minutes, then turn automatic backups back on.
The same idea — space macOS can free on demand — is often called purgeable. You don't need to clear it by hand; macOS reclaims it when something needs the room.
How do I see what is actually taking the space?
Measure your Library folder from Terminal. This only reads sizes; it changes nothing:
du -sh ~/Library/* 2>/dev/null | sort -hThe biggest folders come last. du counts the blocks a file really uses, so a sparse file such as Docker.raw shows its real size here. Then go one level deeper into whatever is on top, for example:
du -sh ~/Library/Containers/* 2>/dev/null | sort -h | tail -20
du -sh ~/Library/Application\ Support/* 2>/dev/null | sort -h | tail -20Developer tools also keep a lot in hidden folders in your home folder, such as ~/.gradle, ~/.npm and ~/.cache. Storage settings doesn't name these either:
du -sh ~/.[!.]* 2>/dev/null | sort -hTwo things to know about these numbers. 2>/dev/null hides “Operation not permitted” errors, and those folders are left out of the total; giving Terminal Full Disk Access in System Settings → Privacy & Security lets du read them. And when you measure outside your home folder, add -x, which keeps du from following mount points into disk images that macOS has mounted there, such as simulator runtimes.
If you prefer Finder, open a folder, switch to List view, choose View → Show View Options and tick “Calculate all sizes”. The Size column then shows folder sizes too. To reach your Library folder, use Go → Go to Folder and type ~/Library.
What is safe to delete, and what isn't?
| Location | Safe to delete? | How |
|---|---|---|
~/Library/Caches/<app> | Usually. Caches are rebuilt, at the cost of downloading or computing them again. | Quit the app first. Prefer the tool's own command, such as brew cleanup. |
~/Library/Developer/Xcode/DerivedData | Yes. Xcode rebuilds it; the next build and index take longer. | Quit Xcode, then delete the folders inside. |
| Simulators and runtimes | Yes for ones you no longer use; you lose the apps and data inside them. | xcrun simctl delete unavailable removes simulators your Xcode no longer supports. Preview runtime removal with xcrun simctl runtime delete --notUsedSinceDays 30 --dry-run. |
Docker.raw | No. Deleting it deletes every image, container and volume. | Docker's own prune commands. |
~/Library/Logs | Usually. You lose old diagnostics; apps write new logs. | Delete large files inside, not the folder. |
~/Library/Application Support, ~/Library/Containers | Not as a whole. These hold settings, databases and sometimes your only copy of something. | Use the app's own settings, or remove one app's folder after uninstalling it. |
| Time Machine local snapshots | Yes, but macOS manages them for you. | Turn automatic backups off for a few minutes, as Apple describes. |
/System, /private/var/vm | No. macOS manages these; /private/var/vm holds the sleep image. | Leave them alone. |
Apple also notes that starting up in safe mode clears certain system caches, which macOS creates again as needed. It helps when you need room for one task, such as a macOS update, not as a lasting fix.
Be wary of anything that offers to “clean System Data” in one click without telling you which folders it will touch. The safe parts and the irreplaceable parts sit side by side in the same Library folder.
Why does System Data keep coming back?
Because most of it is working space. Caches refill as you install packages, DerivedData grows with every project you build, and Docker's disk image grows with every pull and build. Clearing them buys time; it doesn't change the trend.
What helps is cleaning at the source on a schedule: each tool's own cleanup command now and then, a disk limit in Docker Desktop, and deleting simulators you no longer test on. If the warning has already appeared, start with what to do when your disk is almost full.
How Specula handles System Data
Specula doesn't show a System Data bar. It measures your home folder directly, counting the blocks files really use, so Docker.raw shows its real size and hard links count once. After each scan it shows what grew since the previous one.
Its Cleanup → Tools list names the locations behind most of System Data on a developer's Mac — Docker, Xcode, simulators, Gradle and Android, package managers, browsers, Claude, Codex, Cursor and local models — each with a safety level (regenerable, app data, or your data), a note and a cleanup command where the tool has one. Every deletion asks for confirmation. Specula refuses to delete the top-level ~/Library folders, an app's entire data folder in Containers or Application Support, and Docker.raw.
The free-space figure also tells you when part of it is purgeable: when macOS can free more than a gigabyte on demand, Specula says so under the number.