Theme
FeaturesHow It WorksPricingBlogSign In to Dashboard →Download Mac App
← All posts
App Management

How to Uninstall Apps on Mac Completely (Including All Leftover Files)

The Silo Team · 7 min read · Updated September 27, 2026

Dragging to Trash Is Not Enough

When you drag an app from Applications to Trash, you delete only the .app bundle. Every other file the app created — preference files, Application Support data, launch agents, crash logs, containers — remains on your disk indefinitely.

For a large app like Slack or Docker Desktop, this leftover can be 2–5 GB. For a suite like Adobe Creative Cloud, it can exceed 20 GB.

The 14 Locations MacPilot Scans

MacPilot's Symlink-Safe Remnant Hunter checks all these locations for files matching the app's bundle ID:

  1. ~/Library/Application Support/
  2. ~/Library/Preferences/
  3. ~/Library/Caches/
  4. ~/Library/Containers/ (sandboxed apps)
  5. ~/Library/Group Containers/
  6. ~/Library/Logs/
  7. ~/Library/Saved Application State/
  8. ~/Library/LaunchAgents/
  9. ~/Library/WebKit/
  10. /Library/Application Support/ (system-level)
  11. /Library/LaunchAgents/
  12. /Library/LaunchDaemons/
  13. /Library/Receipts/
  14. /Library/PrivilegedHelperTools/

The Symlink Problem (Why Other Tools Freeze)

~/Library/Containers/ contains symbolic links — directory entries that point to other locations. Apps like Electron tools create deep symlink trees. Naively traversing this directory with find or a recursive file enumerator will follow symlinks indefinitely, causing the scan to hang for minutes or freeze entirely.

MacPilot solves this using URLResourceKey.isSymbolicLinkKey to detect symlinks before traversal. When a symlink is found, it calls enumerator.skipDescendants() immediately — completing the full scan in under 200 milliseconds.

Before Deletion: Terminate the App and Its Helpers

Some apps (particularly commercial software with license managers) run background helper processes even when the main app is closed. MacPilot's pre-flight process guard:

  1. Checks NSRunningApplication.runningApplications(withBundleIdentifier:)
  2. Checks for background helpers via pgrep
  3. Sends graceful terminate() notifications
  4. Escalates to SIGKILL only if needed after a timeout

Manual Uninstall Without MacPilot

# Replace com.example.MyApp with the actual bundle ID
BUNDLE_ID="com.example.MyApp"

# Find all related files
find ~/Library -name "*${BUNDLE_ID}*" -type f 2>/dev/null
find /Library -name "*${BUNDLE_ID}*" -type f 2>/dev/null

# Unload and remove LaunchAgents
launchctl unload ~/Library/LaunchAgents/${BUNDLE_ID}.plist 2>/dev/null
rm ~/Library/LaunchAgents/${BUNDLE_ID}.plist 2>/dev/null

See it on your own Mac.

Download Silo and find out where your space is going.

Download Silo →

Keep reading

Silo Support Desk

Help & Feedback

Send a message to our engineering team. We typically respond within 12 hours.

Direct email support: sparoconnect@gmail.com