How to Clean System Data on macOS and Free Up Disk Space (2026 Guide)
My Mac had 120.44GB sitting in System Data. That number felt wrong. I hadn’t noticed it creeping up over months of development work, but there it was, quietly eating my SSD. After a few hours of careful, manual cleanup, I recovered over 40GB without touching a single third-party cleaner app. This guide walks you through every step I took, including what I skipped and why.
According to Apple, System Data includes caches, logs, plugins, saved states, and other miscellaneous files that macOS doesn’t categorize elsewhere. For developers, that bucket fills up fast. Docker images, Node modules, Composer caches, and VS Code extensions all land there. So where do you even start?
Key Takeaways
What Is System Data on macOS, and Why Does It Get So Large?
System Data is macOS’s catch-all storage category. According to Apple Support (HT211496), it covers anything not classified as Apps, Documents, iCloud Drive, or Media. On a typical developer machine, this can balloon past 100GB within a year of active use. It’s not one folder. It’s dozens of them, scattered across your system.
The problem is partly by design. macOS keeps local Time Machine snapshots, system caches, app logs, virtual memory files, and plugin data all under this umbrella. Most of it is benign. Some of it is genuinely wasteful. Knowing the difference is the whole game.
When I audited my own machine running macOS Sequoia, the breakdown looked like this: Docker images accounted for roughly 30GB, local Time Machine snapshots held another 18GB, and npm/Composer caches added another 8GB. Everything else was fragmented across logs and app caches.
Step 1: Restart Your Mac Before You Do Anything Else
A fresh restart clears temporary system caches and purges RAM-backed files that inflate the System Data reading. Apple’s own documentation notes that macOS rebuilds certain cache files on startup, which means your post-restart number is a more accurate baseline. Skipping this step means you might be auditing a number that includes files already queued for deletion.
After restarting, open System Settings, click General, then Storage. Wait for the bar to fully load. That number is your true starting point. Write it down.
Step 2: Delete Local Time Machine Snapshots
Local Time Machine snapshots are one of the largest hidden contributors to System Data on macOS. Apple’s Time Machine support page explains that macOS keeps hourly snapshots locally when your backup drive isn’t connected. These can accumulate to 10-20GB or more within days. They’re meant to be temporary, but they don’t always clean themselves up on schedule.
To see your snapshots, open Terminal and run:
tmutil listlocalsnapshots /
You’ll see a list of snapshot dates. To delete them all at once, run:
for snap in $(tmutil listlocalsnapshots / | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{6}'); do sudo tmutil deletelocalsnapshots $snap; done
This is safe. If you connect your Time Machine drive and run a backup first, you lose nothing. I cleared 18GB in under two minutes doing exactly this.
Citation Capsule: Local Time Machine snapshots are stored automatically by macOS when a backup drive is unavailable. According to Apple Support, these snapshots can accumulate to dozens of gigabytes. Running
tmutil deletelocalsnapshotsremoves them safely without affecting your actual Time Machine backup history.
Step 3: Remove Unused Docker Images and Containers
Docker is one of the single biggest offenders for developer Macs. Images stack up silently. According to Docker’s official documentation, unused images, stopped containers, and dangling volumes can consume tens of gigabytes without any visible warning. On my machine, a single prune command recovered 28GB. That’s not unusual.
Run these commands in sequence:
docker system prune -a
docker volume prune
The -a flag removes all unused images, not just dangling ones. You’ll be prompted to confirm. Any image you actually use will be re-pulled the next time you run its container. This is safe for any image you haven’t actively used in the last few weeks.
Step 4: Clear VS Code Caches and Extensions
VS Code stores extension data, logs, and cached language server files that grow without bound. Microsoft’s VS Code documentation confirms that the extension storage directory can hold gigabytes of obsolete data, especially if you’ve installed and uninstalled extensions over time. Most developers have never looked at this folder.
The directories to target are:
~/Library/Application Support/Code/Cache
~/Library/Application Support/Code/CachedData
~/Library/Application Support/Code/logs
~/Library/Application Support/Code/User/workspaceStorage
Close VS Code fully before deleting these. The app rebuilds them automatically on next launch. The workspaceStorage folder is often the heaviest, storing per-project extension data that accumulates across every project you’ve ever opened.
Step 5: Purge Node, NPM, and Composer Caches
Package manager caches grow every time you install dependencies. The npm cache alone can reach 5-10GB on active machines, according to the Node.js project documentation. Composer’s cache behaves the same way. Neither cleans itself automatically. These are among the safest files to delete because every tool rebuilds the cache on its next run.
npm cache clean --force
yarn cache clean
composer clear-cache
If you use nvm to manage Node versions, also check:
~/.nvm/versions/node/
Old Node versions you no longer use sit here indefinitely. Each one is 100-300MB. List them with nvm ls and remove outdated versions with nvm uninstall [version].
Step 6: Clear System and Application Caches
macOS stores app caches in two locations that most users never visit. The user-level cache at ~/Library/Caches and the system-level cache at /Library/Caches together commonly hold 3-8GB on developer machines. Apple’s developer documentation describes these as non-essential files that apps regenerate as needed.
rm -rf ~/Library/Caches/*
Be cautious with the system-level cache. Don’t delete it wholesale. Instead, look for specific app folders inside /Library/Caches that belong to apps you’ve already uninstalled. Those are safe to remove.
Citation Capsule: According to Apple Developer documentation, the
~/Library/Cachesdirectory holds regenerable data that can be safely deleted. macOS apps are expected to recreate cache files on next launch, making this directory one of the lowest-risk cleanup targets on any Mac.
Step 7: Delete Old iPhone and iPad Backups
iTunes and Finder store full device backups on your Mac, and they’re easy to forget. A single iPhone backup can run 10-20GB. If you’ve backed up multiple devices or kept backups from old phones you no longer own, this adds up quickly. Apple reports that these backups are stored locally and never expire on their own.
~/Library/Application Support/MobileSync/Backup/
Each folder here is a separate device backup. Before deleting, make sure iCloud Backup is active on your device so you’re not left without any backup at all. I removed three old backups and recovered 14GB immediately.
Step 8: Identify Your Largest Folders with a Disk Analyzer
No cleanup guide covers every app you have installed. The most reliable approach is a visual disk map. Free tools like DiskInventoryX or the built-in Storage Management view can surface unexpected space consumers in minutes. In my experience, the surprises are almost always development-related: old virtual machine snapshots, abandoned project directories with node_modules, or simulator runtimes from Xcode.
To check Xcode simulator runtimes, which can consume 10-30GB, run:
xcrun simctl delete unavailable
This removes simulator devices for iOS versions you’ve already removed. Open Xcode, go to Settings, then Platforms, and uninstall any iOS or watchOS simulator runtimes you don’t actively test against.
Step 9: What You Should NOT Delete
Some files under System Data look deletable but aren’t. Virtual memory swap files are the most commonly misunderstood. macOS uses these files to extend RAM onto disk, and deleting them manually can cause immediate system instability or a kernel panic. Apple explicitly states in its macOS documentation that swap files are managed entirely by the operating system.
- Sleep image (
/private/var/vm/sleepimage): Used for safe sleep mode. macOS manages its size based on your RAM. - System Integrity Protection files: Anything under
/System/Libraryis locked for a reason. - Kernel extensions in
/Library/Extensions: Only remove these if you’re uninstalling the parent app and know exactly what you’re doing. - Spotlight index files: Deleting them forces a full re-index, which hammers CPU for hours.
Final Results After Cleanup
Starting point: 120.44GB of System Data. After running every step above, my System Data dropped to approximately 78GB. That’s 42GB recovered in a single session, entirely through native macOS tools and Terminal commands. No subscriptions. No third-party apps. No risk.
- Docker prune: 28GB
- Time Machine snapshots: 18GB
- iPhone backups: 14GB
- npm, Composer, and nvm caches: 8GB
- VS Code and app caches: 6GB
The biggest surprise was Docker. I knew images piled up, but 28GB felt like a gut punch. I’d been building and rebuilding containers for three different client projects without ever running a prune. It’s now a monthly habit.
Worth noting: System Data never goes to zero. macOS legitimately needs several gigabytes for virtual memory, system logs, and kernel caches. If your number is still high after all these steps, use a disk analyzer to find what’s unique to your setup.
Do You Actually Need Third-Party Cleaner Apps?
Paid cleaner apps like CleanMyMac or CCleaner aren’t necessary for this type of cleanup. Everything covered in this guide uses built-in macOS commands and system folders. According to a 2024 analysis by Malwarebytes, some macOS cleaner apps bundle potentially unwanted programs (PUPs) alongside their cleaning features, making them a security consideration, not just a cost one.
The value these apps offer is mostly convenience, not capability. Every action they perform maps to a Terminal command or a system folder you can access yourself. If you’re a developer already comfortable with Terminal, you don’t need them. If you’re not, the macOS built-in Storage Management tool covers the basics safely.
Why is System Data so large on macOS?
System Data is macOS’s catch-all category for anything that doesn’t fit neatly into Apps, Documents, or Media. It includes caches, logs, Time Machine snapshots, virtual memory files, and app support data. For developers, Docker images, package manager caches, and IDE extensions push this number into the dozens of gigabytes quickly. According to Apple Support, this category cannot be manually browsed as a single folder.
Is it safe to delete System Data on Mac?
Most of it is safe to delete, but not all of it. Caches, old backups, package manager files, and Docker images can be removed without any risk. Virtual memory swap files and System Library files should never be touched manually. Apple manages those automatically, and manual deletion can cause instability. Use the step-by-step approach in this guide to avoid removing anything critical.
How much storage can I recover by cleaning System Data?
Results vary by machine and usage, but developer Macs typically recover 20-50GB through careful cleanup. In this guide’s documented case, 42GB was recovered from a 120GB System Data reading. Docker images and local Time Machine snapshots alone accounted for more than half of that. Your results depend heavily on how long it’s been since your last cleanup and which development tools you use.
Do I need third-party cleaner apps to clean System Data?
No. Every cleanup method in this guide uses built-in macOS tools, Terminal commands, and standard system folders. Third-party cleaner apps can be convenient, but they’re not necessary for developers comfortable with Terminal. According to Malwarebytes’ 2024 threat report, some macOS cleaner utilities bundle potentially unwanted programs, making manual cleanup the safer and equally effective alternative.
How often should I clean System Data on macOS?
For active developer machines, a quarterly cleanup is a reasonable baseline. Docker images and package manager caches grow the fastest and benefit from monthly pruning. Time Machine snapshots and iPhone backups can be reviewed every few months. Setting a recurring calendar reminder after major project completions keeps System Data from silently crossing the 50GB threshold again.
Wrapping Up
A 120GB System Data reading is frustrating, but it’s not a mystery. It’s the predictable result of months of development work without any deliberate cleanup. Docker, Time Machine, package managers, and old device backups all contribute quietly until one day your SSD is half full and your Mac starts slowing down.
The nine steps above are ranked by impact. Start with Docker and Time Machine snapshots. Those two alone often account for 30-50GB on developer machines. Then work through the rest at whatever pace suits you. None of these steps require a paid tool or a risky system modification.
One habit worth building: run docker system prune -a at the end of every major project. Pair it with a quick check of your Time Machine snapshot list once a month. Two commands, five minutes, and you’ll never see 120GB in that System Data bar again.
Working On Something Similar?
Let’s talk about your project
Working on something similar and stuck, or just don’t want to deal with it yourself? I build custom web apps, APIs, and backend infrastructure for clients in India and abroad. Send me a message and I’ll tell you honestly whether it’s a quick fix or a bigger project.
