Uninstall UTM on Mac
Copy every virtual machine you want to keep somewhere outside UTM's own folder before you uninstall. UTM keeps all of its virtual machines inside one sandboxed container, and Mole builds up to Preview 289 selected that container by default, so an uninstall confirmed without unchecking it, or a Homebrew --zap, deleted your VMs along with the app. Preview builds 290 and later list the container unchecked and leave out --zap for UTM. This guide covers the official DMG from UTM's GitHub releases and the Homebrew cask utm; both build the same sandboxed app under the same bundle identifier, so the paths below apply either way. UTM's own build scripts also produce a Mac App Store package under that identical identity, so if you installed it that way nothing here changes either. The paths below come from UTM's own public source, including its sandbox entitlements and packaging scripts.
Back up your virtual machines first
Each VM is a self-contained <Name>.utm package. Open ~/Library/Containers/com.utmapp.UTM/Data/Documents in Finder (Shift + Command + G, paste the path) and copy the .utm packages you want to keep to a different folder, drive, or backup before doing anything else. A copy sitting next to the original inside the same container is not a backup: removing the container takes the copy with it.
Quit UTM and shut down running VMs
Stop or suspend any virtual machine that is still running, then quit UTM from its menu. UTM has no separate background helper or login item; once the app has quit, nothing about it keeps running.
Where UTM keeps its data
| Location | What it holds | What to do |
|---|---|---|
~/Library/Containers/com.utmapp.UTM/Data/Documents |
Every virtual machine (.utm packages) plus any other documents you kept in UTM |
Back this up before you continue. Preview builds 290 and later list the whole container unchecked; earlier builds selected it by default. Copy your VMs out first either way |
~/Library/Group Containers/*.com.utmapp.UTM |
Data shared between UTM and its helper processes | Selected by default; safe to remove with the app |
~/Library/Application Scripts/*com.utmapp* |
Sandbox scripting support for UTM's helper processes | Selected by default; safe to remove with the app |
~/Library/Preferences/com.utmapp.UTM.plist |
App preferences | Selected by default; safe to remove |
~/Library/Saved Application State/com.utmapp.UTM.savedState |
Saved window state | Selected by default; safe to remove |
~/Library/Caches/com.utmapp.UTM |
App-level cache | Regenerable; Mole's Clean tab offers this as an ordinary app cache |
~/Library/Containers/com.utmapp.UTM/Data/Library/Caches |
Cache inside the sandbox container | Regenerable; same treatment as above |
~/Library/Containers/com.utmapp.UTM/Data/tmp |
Temporary files inside the sandbox container | Regenerable; same treatment as above |
The three cache/temp paths are separate from Data/Documents: Mole's Clean tab only ever touches those three, never the Documents folder where your VMs live.
Check the result
Run these read-only commands in Terminal:
pgrep -ilf utm
ls -d ~/Library/Containers/com.utmapp.UTM
ls -d ~/Library/Containers/com.utmapp.UTM/Data/Documents
No output from pgrep means no UTM or QEMU process is still running. ls -d on the container prints the path if it (and anything inside it, including your VMs) is still on this Mac, or "No such file or directory" once it's gone. Run the second ls -d on its own if you deliberately kept the container: it confirms whether your VM files specifically are still there.
If you installed it with Homebrew
Mole builds up to Preview 289 removed a Homebrew-installed UTM the same way as brew uninstall --cask --zap utm; later Preview builds leave out --zap for UTM. The cask's own zap list trashes ~/Library/Containers/com.utmapp*, ~/Library/Group Containers/*.com.utmapp.UTM, ~/Library/Application Scripts/*com.utmapp*, plus its preferences and saved state, and it runs regardless of what you left checked or unchecked in Mole's review screen. That means every VM in Data/Documents goes to the Trash with the rest of the container. Copy your VMs out first, or skip the zap step entirely:
brew uninstall --cask utm
What Mole lists
This describes Mole 1.15, currently in Preview. ~/Library/Containers/com.utmapp.UTM (which holds Data/Documents and every VM inside it) is listed but not selected in Preview builds 290 and later, because Mole treats it as your data rather than app state; earlier builds selected it by default. The Group Container and the Application Scripts row are selected by default. The three cache/temp paths above show up separately in the Clean tab, selected by default there as ordinary regenerable cache; Clean itself never reaches into Data/Documents.
What this test covered
UTM was installed from the Homebrew cask utm and uninstalled with a development build of Mole on September 17, 2026. That build had Full Disk Access enabled, so the residue review screen was skipped and the removal went straight through; official-download users still see the review list described above. The Group Container, sandbox Container, and Application Scripts rows were all removed cleanly with no leftover found beyond what is already listed. No virtual machine was created for this test, so removing a populated Data/Documents folder was not directly observed; the container-selection behavior above comes from reading Mole's scanner code, not from watching a real VM get deleted.
