UTM

Open source, feature rich, powerful type 2 hypervisor for Mac, can emulate x86-64 OSes on Apple Silicon Macs. There's also an iOS version (so you can run Windows on your iPhone!)

Open Source

UTM Privacy Policy

Privacy Policy Summary

  • There is a date of the last update of the agreements
  • Third parties are involved in operating the service

Score

N/A

Documents

About the Data

This data is kindly provided by tosdr.org. Read full report at: #8038

UTM Source Code

Author

utmapp

Description

Virtual machines for iOS and macOS

#apple#emulation#ios#jailbreak#macos#qemu#utm#virtual-machines#vm

Homepage

https://getutm.app

Repository

  • LicenseApache-2.0
  • Created12 Apr 19
  • Primary languageSwift
  • Size50,923 KB
  • Stars35,333
  • Forks1,804
  • Watchers35,333

Language Usage

Language Usage

Project Health

  • Last commit6 days ago
  • Open issues1,109
  • Latest releasev5.0.5

Recent Commits

  • osy(02 Sept 26)

    project: bumped version

  • osy(02 Sept 26)

    readme: use file-based workflow badge URL so it shows build status The legacy workflows/Build/badge.svg endpoint renders "no status" for branch=main&event=push even though those runs exist. The actions/workflows/build.yml/badge.svg form resolves them correctly. Assisted-by: Claude:claude-fable-5-1

  • osy(02 Sept 26)

    Merge pull request #7802 from changanmoon/l10n Update translations for zh-Hans & zh-HK

  • osy(02 Sept 26)

    Merge pull request #7805 from michaelbnewman/fix-readme-links Fix README links to MacStadium opensource

  • osy(02 Sept 26)

    Merge pull request #7806 from sigitkusuma/apple-explain-newer-guest-install-failure apple: explain macOS install failure when guest is newer than host

  • osy(02 Sept 26)

    Merge pull request #7845 from utmapp/display-upscaling-default-linear config: use linear upscaling except on classic guests

  • osy(02 Sept 26)

    Merge pull request #7840 from lprazdnik/fix/caps-lock-release input(macOS): preserve Caps Lock key releases

  • osy(02 Sept 26)

    Merge pull request #7837 from lprazdnik/feature/command-option-swap input(macOS): add command and option key swap

  • osy(02 Sept 26)

    Merge pull request #7832 from naveenrajm7/feature/full-vm-snapshots snapshots: expose QEMU full-VM snapshots

  • osy(02 Sept 26)

    Merge pull request #7829 from synrest/upstream/graceful-quit macOS: add graceful power-down quit policy

  • Leo(29 Aug 26)

    input(macOS): preserve Caps Lock key releases macOS treats Caps Lock as a locking modifier and never delivers its physical release, so once "Caps Lock is treated as a key" is enabled a guest that uses it as a held modifier (e.g. a screen reader's NVDA key) never sees it let go. While VM input is captured, remap Caps Lock to F20 on each attached keyboard through IOHIDEventSystemClient (Apple TN2450) so macOS delivers a normal key down/up pair, which VMMetalView translates back to the Caps Lock scan code. The keyboard's previous mapping is put back when capture ends, and a remap left behind by a crash is removed at the next launch. F20 is the highest function key macOS delivers and is on no Apple keyboard, so no physical key is shadowed. Fixes #7838 Assisted-by: Codex:gpt-5 Assisted-by: Claude:claude-fable-5-1

  • osy(01 Sept 26)

    config: use linear upscaling except on classic guests The nearest-neighbour default (ba5f7f7f, #3371) was chosen for low-resolution guests, where linear washes out already-chunky text. It is the wrong choice everywhere else: a modern guest rarely upscales by an integer ratio, so nearest duplicates source pixels unevenly and looks blocky rather than sharp -- the complaint behind #6209 and #6572. Default to linear and let the wizard select nearest for the guests the original change was about: Classic Mac OS, Windows 7 and below, and any OS configured for legacy hardware. Legacy hardware is checked on its own rather than folded into the Windows case so that choosing a legacy machine opts in under any OS, and because the summary page can enable it after the Windows page has already latched isWindows10OrHigher. Existing VMs are unaffected: upscalingFilter is a required coding key, so a saved configuration always carries its own value. The UTM 2.x migration path is likewise unchanged, since an absent displayUpscaler already defaulted to linear. Assisted-by: Claude:claude-opus-5

  • osy(01 Sept 26)

    Merge pull request #7844 from utmapp/download-vm-zip-traversal download: reject ZIP entries escaping the .utm folder

  • osy(01 Sept 26)

    download: never extract a symlink from a downloaded VM Bumping ZIPFoundation to 0.9.20 brought in its symlink containment guard, but that guard is not sufficient here. `URL.isContained(in:)` collapses repeated separators in a single pass, so a link target ending in `<package>///../elsewhere` is accepted while the filesystem resolves it to `<package>/../elsewhere`. A crafted archive could pair such a link with a later regular file underneath it, whose own path passes the containment check, and write outside the package again. Nothing in UTM ever stores a symlink inside a package, so reject them outright instead of trying to validate the target. Also remove the destination on failure. Extraction created the .utm directory up front and a mid-loop error left the partial contents in place, where the library would list them as a real virtual machine that survives a relaunch. Assisted-by: Claude:claude-fable-5-1

  • osy(01 Sept 26)

    download: show the real reason a VM download failed The three error types in this file declare `errorDescription` but conform only to `Error`, so the description is never consulted. `downloadUTMZip()` alerts with `error.localizedDescription`, which for a plain `Error` falls back to "The operation couldn't be completed. (UTM.UTMDownloadVMTask... error 1.)" -- the localized strings here have never reached a user. Conform them to `LocalizedError` instead, matching every other error type in the codebase. No other type has this defect. `CreateUTMFailed` is currently unthrown; it is included so the three stay consistent rather than leaving one behind. Assisted-by: Claude:claude-fable-5-1

  • osy(01 Sept 26)

    download: reject ZIP entries escaping the .utm folder A downloaded VM archive is attacker-controlled, so an entry named `some.utm/../../elsewhere` must not be able to write outside the package it claims to belong to. The extraction path was built by substituting the archive's .utm prefix out of the entry path and appending the remainder, and `appendingPathComponent()` does not resolve `..` -- the traversal was only resolved by the filesystem at write time, landing anywhere in the app container the depth reached. Derive the relative path by dropping the prefix, and resolve every destination through a containment check before extracting. Separators are collapsed in a loop because `fopen()` and `URL.standardized` disagree on a path such as `/../elsewhere`, and a single collapse pass still lets `///../elsewhere` through. Also bump ZIPFoundation to 0.9.20 for its accumulated fixes. This file is the only call site in the tree and the deprecated failable initializer it uses is still present, so the bump is source compatible. Reported-by: Vo Duc Thang (ugvxb) Assisted-by: Claude:claude-fable-5-1

  • osy(01 Sept 26)

    build: update virglrenderer An unused reply for SUBMIT_FENCE causes the QEMUL BQL to be held which impacted performance at higher core counts.

  • osy(01 Sept 26)

    system: keep Metal validation out of debug logging MTL_DEBUG_LAYER, MTL_DEBUG_LAYER_ERROR_MODE and ANGLE_METAL_DEBUG_BINDINGS were set alongside the loggers in -setHasDebugLog:, but they are not loggers: they turn on Metal API validation, which wraps every Metal object and validates every call. The environment is inherited by everything QEMU spawns, so the cost lands both in the virglrenderer render-server workers and in QEMU's own per-frame scanout blit, which is encoded and committed with the BQL held and therefore stalls every vCPU behind it. Measured with the Cyberpunk 2077 built-in benchmark on an aarch64 Windows guest (Neptune/D3D12 on the D3DMetal backend, 6 vCPUs), as the median frame time over the steady part of the flythrough: 55.5-56.7 fps with "Debug Log" enabled against 67.3 fps with it disabled -- a 19% loss purely from the validation layers. That makes verbose logging unusable for exactly the reports it is most needed for, since anyone asked to reproduce a performance problem with logging on measures a different machine. Move the three variables behind a separate hidden opt-in so debug logging stays a logging switch: defaults write com.utmapp.UTM GraphicsValidation -bool YES It still requires "Debug Log", because the validation output goes to the log. Assisted-by: Claude:claude-opus-5

  • osy(01 Sept 26)

    config: always use GICv3 GICv2 has reduced performance at higher core counts (measured in CP2077)

  • osy(31 Aug 26)

    system: enable DX12 on D3DMetal backend

  • osy(30 Aug 26)

    build: update dependencies for DX12 support

  • osy(30 Aug 26)

    system: default to D3DMetal if available

  • Leo(28 Aug 26)

    input(macOS): add command and option key swap Add a single modifier-key mapping control that preserves the existing Control/Command preference while keeping swap modes mutually exclusive. Map both left and right Command and Option keys for QEMU guests. Assisted-by: Codex:gpt-5

  • Naveenraj M(20 Aug 26)

    snapshots: expose QEMU full-VM snapshots Expose named create, list, restore, and delete operations through AppleScript and utmctl so automation can manage QEMU full-VM snapshots. QEMU image metadata remains the source of truth, the internal suspend snapshot stays hidden and reserved, and Apple virtualization reports the feature as unsupported until it can preserve equivalent VM state reliably. Assisted-by: Codex:gpt-5

  • vectorseven(18 Aug 26)

    macOS: add graceful power-down quit policy Allow users to request guest shutdown when quitting UTM while preserving Save State as the default. Wait for all selected virtual machines to stop, resume paused non-suspended guests, and cancel termination with a visible error when shutdown fails or times out. Related to #5912. Assisted-by: Codex:gpt-5.6-sol Assisted-by: ChatGPT:GPT-5.6-Sol

  • Tiffany Fung(10 Aug 26)

    Merge branch 'utmapp:main' into l10n

  • osy(05 Aug 26)

    Merge pull request #7809 from utmapp/dev/neptune-ios

  • osy(05 Aug 26)

    config(iOS): use physical RAM limit when limit is raised Otherwise the checks won't kick in on a jailbroken device.

  • osy(04 Aug 26)

    project: revert minver bump We can selectively support DXMT on macOS 13, iOS 16 and so we can revert the minver bump.

  • osy(04 Aug 26)

    project: add dxmt to iOS builds

UTM Security

3.8/10

Repo Security Summary

Updated 24 Aug 26

  • Code-Review4/10
  • PackagingN/A
  • Maintained10/10
  • Dangerous-Workflow10/10
  • Token-Permissions0/10
  • CII-Best-Practices0/10
  • Binary-Artifacts10/10
  • Security-Policy0/10
  • License10/10
  • Fuzzing0/10
  • Pinned-Dependencies0/10
  • Branch-Protection0/10
  • Signed-Releases0/10
  • SAST0/10

UTM Website

Website

UTM | Virtual machines for Mac

Securely run operating systems on your Mac

Redirects

Does not redirect

Security Checks

All 65 security checks passed

Server Details

  • IP Address104.20.19.3
  • LocationSan Francisco,California,United States of America,NA
  • ISPCloudFlare Inc.
  • ASNAS13335

Associated Countries

  • USUS

Safety Score

Website marked as safe

100%

Blacklist Check

mac.getutm.app was found on 0 blacklists

  • AntiSocial Blacklist
  • Artists Against 419
  • Badbitcoin
  • Bambenek Consulting
  • CERT Polska
  • CoinBlockerLists
  • CRDF
  • CryptoScamDB
  • EtherAddressLookup
  • EtherScamDB
  • Fake Website Buster
  • MetaMask EthPhishing
  • NABP Not Recommended Sites
  • OpenPhish
  • PetScams
  • PhishFeed
  • PhishFort
  • Phishing.Database
  • PhishStats
  • PhishTank
  • Phishunt
  • RPiList Not Serious
  • Scam.Directory
  • SecureReload Phishing List
  • Spam404
  • StopGunScams
  • Suspicious Hosting IP
  • ThreatFox
  • ThreatLog
  • TweetFeed
  • URLhaus
  • ViriBack C2 Tracker

Website Preview

Website preview

UTM Reviews

More Virtual Machines

  • Open source, powerful, feature-rich virtualization product, supporting x86 and AMD64/Intel64 architectures. Available for Windows, MacOS, Linux and BSD, and free for both personal and enterprise use. VirtualBox is backed by a strong community, and has been under active development since 2007.

  • Open source virtual machine monitor intended to serve as a type-1 hyperviser for multiple operating systems using the same hardware - very useful for servers, as it allows for fully independent virtual Linux machines.

About the Data: UTM

Change History

Edit UTM Data

You can edit UTM's entry in this section of awesome-privacy.yml by submitting a PR to our GitHub repo.
Note that some of the information shown above has been aggregated from external sources, a list of these can be found data documentation.

Origin Data

Modify Data

API

You can access UTM's data programmatically via our API. Simply make a GET request to:

https://api.awesome-privacy.xyz/v1/services/utm

The REST API is free, no-auth and CORS-enabled. To learn more, view the API Docs or read the API Usage Guide.

Share UTM

Help your friends compare Virtual Machines, and pick privacy-respecting software and services.
Share UTM and Awesome Privacy with your network!