Open Storage in System Settings and you will find a grey band labelled System Data, frequently the largest item on the disk and never explained. It is not a folder and it is not one thing. It is the bucket macOS drops anything into that does not match a category it recognises.
What actually lands in the bucket
- Application caches under ~/Library/Caches and /Library/Caches, which are unbounded by design.
- Application Support data for apps that store databases and media outside the categories Storage understands, including messaging apps and design tools.
- Local Time Machine snapshots, which frequently account for more than half the bucket on their own.
- Container data for sandboxed apps under ~/Library/Containers.
- Developer artifacts: Xcode DerivedData and device support, Docker images, package manager caches, virtual machine disks.
- System and diagnostic logs, plus crash reports that accumulate with no expiry.
Why the number keeps moving
System Data is calculated by subtraction. macOS totals the categories it can identify, then attributes the remainder to System Data. Any change in how a category is measured shifts the bucket, which is why the figure can jump by gigabytes with no corresponding change on disk. Chasing the number is a mistake; measuring directories is not.
What is safe to remove
The safe tier is anything an application regenerates on its own with no network access and no loss of state. Browser caches, thumbnail caches, Quick Look caches, and font caches all qualify. Clearing them costs you a slightly slower next launch and nothing else.
The next tier down needs thought. Package manager caches for npm, pnpm, CocoaPods, Gradle, and Maven regenerate, but only by downloading again, which is expensive on a slow connection and impossible offline. Build output such as DerivedData, target, dist, and .next regenerates locally but costs you a full rebuild.
The tier you should not touch blind is anything under Application Support that is not explicitly a cache. That directory holds real user state: message history, local databases, licence files, and app configuration. A cleaner that sweeps Application Support wholesale will eventually delete something you needed.
Doing it without guessing
Burrow's Clean tool sorts everything it finds by exactly this hierarchy, showing regenerable caches first and user-visible state last, with the file list and byte count in front of you before anything moves. Items with real rebuild cost stay unchecked until you tick them yourself. Purge covers the developer tier separately, so a build directory is never mixed in with a browser cache.