Diskzyv0.1

How to completely uninstall an app on Mac, with leftovers

October 10, 2026 · 5 min read

Dragging an app to the Trash removes the app bundle and nothing else. The files it created while running, such as support data, caches, preferences, containers and background helpers, stay in your Library. To uninstall an app completely you delete the app, then find those leftovers by the app's bundle identifier and remove them too.

This guide shows where leftovers live, how to find them, and how to remove background items without leaving broken entries behind.

Why dragging to the Trash leaves files behind

A Mac app is a single bundle in /Applications, and macOS has no uninstaller that tracks what an app writes elsewhere. Apps store their data in standard folders inside your Library so that it survives updates and reinstalls. That is useful when you reinstall, and it is clutter when you do not.

Most leftovers are small: a preferences file, a saved window state. Some are not. Chat apps, browsers, design tools and development tools can leave several GB of caches and support data. Apps that installed a background helper may also leave something that keeps running after the app is gone.

Before you delete: check for an uninstaller and sign out

A few minutes of preparation avoids the common mistakes.

Where leftovers live

These are the standard places. Folders are named after the app, the developer, or the app's bundle identifier.

Find leftovers by bundle identifier

Every app has a bundle identifier, a reverse-domain name such as com.example.appname. Most of its files and folders carry that name, which makes it the most reliable thing to search for. Get it before you delete the app. This command prints the identifier for Slack: replace Slack with the name of your app.

osascript -e 'id of app "Slack"'

Search your Library for the identifier

Now search your Library for it. In the command below, replace com.example.appname with the identifier you just found. It only lists matches and deletes nothing.

Run the search a second time with the app's name and with the developer's name, since Application Support folders often use those instead. Repeat in /Library for system-wide files. Read each result before removing it, and move matches to the Trash in Finder, so you can put them back if something else breaks.

find ~/Library -iname "*com.example.appname*" 2>/dev/null

Remove launch agents and helpers safely

Launch agents and daemons are small .plist files that tell macOS to start a program in the background. If you delete the app but leave the plist, macOS keeps trying to start something that no longer exists. If you delete the plist while the job is loaded, it keeps running until the next restart.

The clean way is to unload the job first, then remove the file. For a launch agent in your own Library, use the command below with the real file name. It stops the job and removes nothing from disk. Afterwards, move the plist to the Trash.

For a daemon in /Library/LaunchDaemons, the equivalent is sudo launchctl bootout system followed by the full path to the plist. Then move the plist, and the matching file in /Library/PrivilegedHelperTools, to the Trash. Finder will ask for your administrator password.

You can also see and switch off background items in System Settings, under General, then Login Items & Extensions. Only remove plists whose name clearly matches the app you are uninstalling. Leave anything that starts with com.apple alone.

launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/com.example.appname.agent.plist

What to leave alone

Be careful with anything that may be shared. A Group Containers folder can belong to several apps from the same developer, so removing it while you still use one of the others deletes that app's data too. The same is true of developer-named folders in Application Support that hold data for a whole suite of apps.

If you are not sure a file belongs to the app, leave it. A stray preferences file takes almost no space and does no harm. Once everything is in the Trash, restart, check that your other apps behave normally, and only then empty the Trash.

How Diskzy uninstalls an app

Diskzy is a native Mac app with an Uninstall tab that does this search for you. It removes an app together with what it left behind: support files, caches, preferences, containers, launch agents and privileged helpers. It has guards so that files shared with another app are not touched.

Everything Diskzy removes goes to the Trash, so nothing is gone until you empty the Trash. It needs Full Disk Access to see everything, and it is signed and notarized by Apple. It is free for 72 hours with everything unlocked, then $9 once for 2 Macs.

Common questions

Does dragging an app to the Trash uninstall it completely?
No. It removes the app itself, but support files, caches, preferences and any background helpers stay in your Library until you delete them.
Where are leftover app files stored on a Mac?
Mostly in your user Library: Application Support, Caches, Preferences, Containers, Group Containers and Saved Application State. Background items are in ~/Library/LaunchAgents, /Library/LaunchDaemons and /Library/PrivilegedHelperTools.
How do I find an app's bundle identifier?
In Terminal, run osascript -e 'id of app "AppName"' with the app's name. It prints an identifier such as com.example.appname, which most of the app's files are named after.
Is it safe to delete files in ~/Library/Preferences?
It is safe to delete the preferences file of an app you have uninstalled. If you delete one for an app you still use, the app starts with default settings.
How do I stop a deleted app from running in the background?
Open System Settings, General, Login Items & Extensions and switch off its background item. Then unload and remove its plist from ~/Library/LaunchAgents or /Library/LaunchDaemons.

Related guides

Uninstall guides

See where your Mac's space went

Diskzy maps your disk, explains System Data and clears what's safe. Free for 72 hours, then $9 once for 2 Macs.

Try Diskzy for free
Read this in:EnglishEspañolDeutschPortuguêsFrançaisTürkçe日本語