How to uninstall a Mac app properly, leftovers and all

Dragging to the Trash removes the app. It does not remove the eleven other places the app wrote to.

Mac uninstallation has a reputation for being simple: drag the icon to the Trash, done. That is true for the application itself, and it has been quietly untrue for everything else since about 2005.

An app that has been running for a year has usually written to somewhere between four and a dozen locations outside its own bundle. None of them go anywhere when you trash the app.

What gets left behind

Here is the full set of places to check, in the order they are most likely to hold something:

Location What lives there
~/Library/Application Support/<app> Databases, projects, downloaded content
~/Library/Preferences/com.vendor.app.plist Settings
~/Library/Caches/com.vendor.app Cache, sometimes gigabytes of it
~/Library/Containers/com.vendor.app Everything, for sandboxed apps
~/Library/Saved Application State/<app>.savedState Window positions
~/Library/Logs/<app> Logs
~/Library/LaunchAgents/com.vendor.plist Things that start at login
/Library/Application Support/<app> Shared support files
/Library/LaunchDaemons/com.vendor.plist Background services, root level
/Library/PrivilegedHelperTools/ Helper tools installed with an admin prompt

The two LaunchAgents and LaunchDaemons entries are the ones worth caring about most, because they keep running after the app is gone.

Finding them

Every app has a bundle identifier that looks like com.vendor.appname. Find it first, because it is what most of the leftover files are named after:

osascript -e 'id of app "Spotify"'

Then search for it:

find ~/Library /Library -maxdepth 4 -iname "*spotify*" 2>/dev/null

That one command covers most of the table above. Read the output before deleting any of it — you are looking for things clearly named after the app, not for anything that happens to match.

For a quick look at what a departed app left in the two biggest folders:

du -sh ~/Library/Application\ Support/* | sort -h | tail -20
du -sh ~/Library/Containers/* | sort -h | tail -20

Anything in that list belonging to an app you no longer have is dead weight.

The order that avoids trouble

  1. Quit the app. Properly — check it is not still in the menu bar.
  2. Look for a real uninstaller first. Adobe, Microsoft Office, most VPNs, most antivirus products and anything with a kernel or system extension ship one, and you should use it. These apps install pieces that a manual sweep will miss.
  3. Drag the app to the Trash.
  4. Search for the bundle identifier with the find command above.
  5. Deal with launch agents last — see below.
  6. Empty the Trash, then restart if the app had a background service.

Launch agents deserve a moment

A launch agent is a small file telling macOS to start something at login. When an app is deleted and its agent is not, macOS keeps trying to run something that no longer exists — usually harmlessly, occasionally with an error dialog at every login that nobody can explain.

ls ~/Library/LaunchAgents /Library/LaunchAgents /Library/LaunchDaemons

On the Mac I used for this, that is seven, six and fourteen entries respectively. Most are legitimate. Look for names matching apps you have removed.

Before deleting one, unload it:

launchctl unload ~/Library/LaunchAgents/com.vendor.something.plist

Then delete the file. For anything under /Library/LaunchDaemons you will need sudo, and you should be correspondingly more careful — that folder also contains things macOS itself relies on.

Also check System Settings → General → Login Items, which shows the friendlier version of the same list and lets you switch things off without touching a file.

What to leave alone

  • Preferences for apps you might reinstall. A .plist is a few kilobytes. Deleting it only means reconfiguring later.
  • Anything in ~/Library you cannot connect to a specific app. If you cannot name the owner, leave it.
  • Shared frameworks. Two apps from the same vendor often share support files, and removing one can break the other.

Is it worth the effort?

Honestly, for a single small app, no. A leftover preferences file costs you nothing.

It becomes worth it in two cases. The first is the big ones: creative apps, virtualization, developer tools and anything that syncs will leave multiple gigabytes in Application Support and Caches. The second is an app that misbehaved — a clean reinstall only counts as clean if the old settings are gone, and half the “reinstalling did not fix it” stories come from preferences that survived.

If you would rather not do the find dance every time, this is precisely what CleanSpace’s uninstaller does: it maps an app to its files, shows you the list with sizes, and removes what you tick.