You dragged the app to Trash, emptied it, and called it done — but dragging an app to Trash on Mac is not enough to fully uninstall it. The .app bundle is only the visible tip of the iceberg. macOS stores support files, preferences, caches, and background agents across half a dozen directories that Trash never touches. This guide explains exactly what stays behind, where to find it, how to remove it safely, and when you should think twice before deleting anything.
What Dragging to Trash Actually Does
A macOS .app is a self-contained bundle — a folder disguised as a single file. When you drag it to Trash, you are moving that one bundle to ~/.Trash/. That's it. macOS has no built-in "uninstall" event that fires, no script that cleans up after the app, no registry to scrub (unlike Windows). Every piece of data the app scattered outside its bundle stays right where it is, even after you empty Trash.
Where the Leftover Files Actually Live
The leftovers fall into a predictable set of locations. Here is what each one is and roughly how much space apps typically leave behind.
| Location | What's stored there | Typical size range | Safe to delete? |
|---|---|---|---|
~/Library/Application Support/<AppName> |
Databases, user data, app-managed files | 1 MB – several GB | Yes, once the app is gone — but verify first |
~/Library/Caches/<BundleID> |
Cached assets, compiled shaders, thumbnails | 10 MB – 2 GB | Yes — caches are always regenerable |
~/Library/Preferences/com.<vendor>.<app>.plist |
User settings stored as property lists | A few KB each | Yes — tiny, no functional impact |
~/Library/Containers/<BundleID> |
Sandboxed app data (App Store apps) | Varies widely; can be 1+ GB | Yes — sandbox is isolated per app |
~/Library/Group Containers/<GroupID> |
Shared data between an app and its extensions | Varies | Usually yes, but check for shared suite apps |
/Library/LaunchAgents/ or ~/Library/LaunchAgents/ |
Background daemons and auto-starters | Tiny (KB) | Yes — but unload first (see below) |
/Library/Application Support/<AppName> |
System-wide data (installer receipts, kernel exts) | A few MB | Usually yes; kernel extensions require more care |
/Library/Logs/ or ~/Library/Logs/ |
Crash reports and diagnostic logs | KB – tens of MB | Yes — logs are for diagnostics, not function |
Real-World Examples of What Gets Left Behind
Spotify
Spotify stores its offline cache and downloaded podcasts in ~/Library/Caches/com.spotify.client/ and ~/Library/Application Support/Spotify/. Depending on your offline library size, these folders routinely reach 2–5 GB combined — still sitting on your drive after you drag the .app to Trash.
Slack
Slack's Electron-based app writes a large GPU shader cache and workspace message cache to ~/Library/Application Support/Slack/. On an account with several workspaces, this folder commonly exceeds 1–2 GB.
Xcode
Xcode is the king of leftovers. The app itself is large, but the derived data, simulators, and device support files scattered across ~/Library/Developer/ regularly consume 30–80 GB long after Xcode is removed from Applications.
Adobe Creative Cloud apps
Adobe apps install shared libraries under /Library/Application Support/Adobe/ and install launch daemons in /Library/LaunchAgents/. These services continue running even after you trash individual apps, because they're owned by the Creative Cloud suite, not any single app.
The Launch Agent Problem: Background Processes That Survive
Launch agents are the most insidious leftovers because they are not just wasted disk space — they continue executing. If an app registered a launch agent, that agent will keep loading at login indefinitely until you explicitly remove and unload it.
To find and remove a launch agent left behind by a trashed app, open Terminal and run:
# List all user launch agents
launchctl list | grep -i <appname>
# Unload it (replace the path with the actual .plist you find)
launchctl unload ~/Library/LaunchAgents/com.vendor.appname.plist
# Then delete the plist
rm ~/Library/LaunchAgents/com.vendor.appname.plist
System-wide agents in /Library/LaunchAgents/ or /Library/LaunchDaemons/ require sudo to remove and were likely installed by a privileged installer. Remove them with the same launchctl unload step before deleting.
How to Manually Find and Remove Leftover Files
After you drag an app to Trash and empty it, work through these locations to find what's left. Substitute AppName and the app's bundle identifier (e.g., com.spotify.client) as you go. You can find the bundle ID by looking at the app's Info.plist before removing it, or by searching the directories below for folder names that match the app.
- Open Finder. Press Cmd + Shift + G and go to
~/Library/Application Support/. Delete any folder named after the app. - Go to
~/Library/Caches/. Delete folders whose name matches the app's name or bundle ID. - Go to
~/Library/Preferences/. Delete.plistfiles whose name starts with the app's bundle ID (e.g.,com.spotify.client.plist). - Go to
~/Library/Containers/. Delete the container folder for the app's bundle ID. - Go to
~/Library/Group Containers/. Look for a folder with the app's group ID (often starts with a Team ID followed by a product name). - Check
~/Library/LaunchAgents/and/Library/LaunchAgents/for.plistfiles referencing the app. Unload them withlaunchctl unloadbefore deleting. - Check
~/Library/Logs/and/Library/Logs/for a subfolder named after the app and delete it. - Check
/Library/Application Support/for system-wide data (requires admin password to delete).
This is tedious for one app. For ten apps? It becomes a Saturday afternoon project.
What Is NOT Safe to Delete
Not every file tied to an app's name is safe to remove. Before deleting anything in ~/Library/, be aware of these situations:
- Shared preference files. Some apps share a bundle-ID prefix. Deleting a plist for one app can affect a companion app from the same developer.
- Files inside
~/Library/Containers/for apps you still use. The Containers directory holds sandboxed data for App Store apps. Deleting a container for a running app can corrupt it. - Kernel extensions (
/Library/Extensions/). kext files require careful removal withkextunloadbefore deletion. Incorrectly removing kexts can cause boot failures. - Receipts in
/var/db/receipts/. These are macOS package receipts used by the installer system. They're tiny; leave them alone. - Anything you cannot identify. If you're unsure whether a folder belongs to an app, don't delete it. Use the "Is this safe to delete?" check in Crumb to get a plain-English explanation of what a folder contains and what the risk of removing it is — especially useful before deleting anything in
/Library/.
A Faster Way: Uninstall Tools That Find Leftovers Automatically
The manual method works, but it requires you to already know the bundle ID, visit eight directories, and carefully match folder names. An uninstaller that indexes files at install time — or uses heuristics to match by bundle ID, vendor name, and executable path — can surface every leftover in seconds.
Crumb includes an Uninstall tab that does exactly this. Drag an app onto it (or pick it from the list), and it scans all the locations above, shows you each leftover file with its size, and lets you review before anything is removed. If you want to be able to undo the removal, the Pro tier moves files to a recoverable location rather than permanently deleting them — worth considering for large, hard-to-reinstall apps. You can download Crumb and try the first cleanup for free.
Whatever tool you use, always review the list before confirming. Cleanup is permanent.
Conclusion
Dragging an app to Trash on Mac is only the first step. The app's caches, preferences, containers, and launch agents remain scattered across ~/Library/ and /Library/, quietly consuming disk space and in some cases running background processes. The manual approach requires visiting eight or more directories, knowing the app's bundle ID, and carefully unloading any launch agents before deletion. It's doable, but it's slow. Whether you go manual or use a tool, the key habit is the same: after removing an app, check what it left behind — because macOS certainly won't tell you.