macOS has no uninstaller. Dragging an app to the Trash removes the bundle and nothing else, and a typical app scatters files across six or seven locations outside it. Individually these are small. Across years of installs they add up, and some of them keep running.
Where the leftovers live
- ~/Library/Preferences: property lists keyed by bundle identifier.
- ~/Library/Application Support: the app's real data, often the largest leftover.
- ~/Library/Caches: disposable, but frequently the biggest by size.
- ~/Library/Containers and ~/Library/Group Containers: everything a sandboxed app wrote.
- ~/Library/Saved Application State: restored window layouts.
- ~/Library/LaunchAgents and /Library/LaunchDaemons: background jobs that keep launching after the app is gone.
- /Library/PrivilegedHelperTools: helper binaries installed with admin rights.
Launch agents are the ones that matter
The rest is wasted space. A launch agent for a deleted app is an active problem: launchd keeps trying to start a binary that no longer exists, which produces log noise on every boot and occasionally a visible error dialog. Updaters are the common case, since most third-party updater agents outlive the app that installed them.
ls ~/Library/LaunchAgents /Library/LaunchAgents
launchctl list | grep -v com.apple
Finding orphans after the fact
Uninstalling cleanly is easy if you do it at the time. The hard problem is the machine you have now, with leftovers from apps removed years ago and no record of what they were.
The approach that works is to enumerate support files by bundle identifier and check each against the set of installed applications. Anything referencing an identifier with no corresponding app is an orphan. This needs care around a few real exceptions: some identifiers belong to helper components of apps that are still installed, and some belong to Apple subsystems that ship no app bundle at all.
Burrow's Leftovers tool does this matching and shows you which vanished app each file belonged to, so you are approving a named app's remains rather than a list of paths. Its Apps tool handles the other direction, sweeping preferences, support files, containers, and launch agents at uninstall time so nothing is orphaned in the first place.