Skip to content
CAI
Software that uses CAICheck a score

utmapp/UTM

38.5

Weak · 22 September 2026

44.8k

lines of production code

Swift

with Objective-C

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a cross-platform virtualization application for macOS, iOS, and visionOS that manages and runs virtual machines using QEMU and Apple Virtualization backends. It provides a modern SwiftUI interface for configuring VM settings, handling input devices, and managing remote connections via a secure client-server architecture. The platform supports extensive internationalization, automated build processes, and automation through AppleScript, Shortcuts, and a dedicated command-line tool.

How it got here

2019–2020 — SwiftUI migration and architecture overhaul

23 changes.

The project underwent a comprehensive migration from legacy Objective-C and Storyboard-based interfaces to a modern Swift and SwiftUI architecture, removing old view controllers and app delegate boilerplate. This period established a new configuration backend for Apple Virtualization and QEMU, introduced modular input handling for iOS, and implemented a sandboxed XPC helper service for improved security and macOS integration.

2021–2022 — Localization expansion and macOS interface overhaul

40 changes.

This period focused on extensive internationalization, adding full language support for Chinese, Japanese, French, German, Spanish, Finnish, and Polish across iOS, macOS, and helper components. Concurrently, the macOS interface was redesigned with a new segmented power control toolbar, and the project introduced new automation capabilities through a dedicated command-line tool (utmctl) and a comprehensive AppleScript scripting interface.

2023–2026 — Localization expansion and remote access

23 changes.

This period focused on expanding language support by adding comprehensive localizations for Russian, Italian, Polish, Arabic, Korean, and Traditional Chinese (Hong Kong) across iOS and macOS platforms. It also introduced significant new capabilities, including remote VM access with TLS security, Apple Virtualization backend services for snapshots and USB passthrough, and Siri/Shortcuts integration via App Intents.

Features

Add English localization files for macOS app and helper

Added empty English localization files (InfoPlist.strings and Localizable.strings) for the main macOS application and the QEMUHelper component, establishing the base structure for English language support.

Platform/macOS/en.lproj, QEMUHelper/en.lproj · high confidence

Add Finnish language support for iOS app and QEMU helper

Users with their device language set to Finnish will now see localized strings for the UTM iOS app and the QEMUHelper background process. This includes privacy permission descriptions (local network, location, microphone), bundle names, copyright notices, and error messages such as 'Cannot find QEMU support libraries' and 'Error starting QEMU.', ensuring a fully Finnish interface experience.

Platform/iOS/fi.lproj, QEMUHelper/fi.lproj · high confidence

Add Finnish localization for the VM display window

Users with macOS set to Finnish can now see the virtual machine display window interface translated into their language. This change adds a new localization file (VMDisplayWindow.strings) that provides Finnish translations for toolbar items and controls, including labels and tooltips for features such as Shared Folder, Capture Mouse, Drives, USB devices, and the segmented power control (Start/Pause, Stop, Restart).

Platform/macOS/Display/fi.lproj · high confidence

Add German localization for UTM

Added German language support to the application, including 1,065 localized strings in Localizable.strings and pluralization rules in Localizable.stringsdict for UI elements such as VM configuration, drive settings, and display controls.

Platform/de.lproj · high confidence

Add German localization for VM display interface

German-speaking users will now see the VM display window interface translated into German. This change adds a new localization file (VMDisplayWindow.strings) containing translations for toolbar items such as 'Shared Folder', 'Drives', 'Capture Mouse', 'USB', and 'Resize Console', as well as tooltips and the window title for the UTM application.

Platform/macOS/Display/de.lproj · high confidence

Add Polish localization for VM display window

Polish language support has been added to the macOS VM display interface. Users can now see translated labels, tooltips, and window titles for toolbar items such as Shared Folder, Capture Mouse, Resize Console, Drives, and USB, as well as power control states (shutdown, start/pause, restart) in the segmented power control.

Platform/macOS/Display/pl.lproj · high confidence

Add Spanish (Latin America) localization for iOS and macOS

Users on iOS and macOS can now see system-level prompts and bundle names in Spanish (Latin America). This change adds the es-419.lproj resource bundles, providing localized strings for privacy permissions (such as local network, location, and microphone usage) and the application name, ensuring that permission dialogs and app metadata appear in the user's preferred language.

Platform/es-419.lproj, Platform/iOS/es-419.lproj, Platform/macOS/es-419.lproj, QEMUHelper/es-419.lproj · high confidence

Added Arabic language localization

Users can now see the application interface in Arabic. This change introduces the initial Arabic translation file (Localizable.strings) for the platform, covering UI strings for virtual machine configuration, drive settings, display controls, and system messages.

Platform/ar.lproj · high confidence

Added Chinese (Hong Kong) localization for iOS privacy and bundle strings

Added Chinese (Hong Kong) translations for the app's Info.plist and remote configuration strings. This includes the bundle name, local network usage descriptions, location permissions (always/when in use), and microphone access descriptions, ensuring these system prompts appear in Traditional Chinese for users in Hong Kong.

Platform/iOS/zh-HK.lproj · high confidence

Added Chinese (Hong Kong) localization for macOS bundle info

Users on macOS with Chinese (Hong Kong) locale settings will now see localized strings for the application bundle name and privacy descriptions, specifically including the microphone usage permission explanation and the virtual machine identifier.

Platform/macOS/zh-HK.lproj · high confidence

Added Finnish language support

Users can now see the application interface in Finnish. This change adds a new localization file (fi.lproj/Localizable.strings) containing translations for UI elements, configuration options, and system messages, enabling Finnish-speaking users to interact with the virtual machine settings and controls in their native language.

Platform/fi.lproj · high confidence

Added French localization for UTM

Added the French language resource bundle (Platform/fr.lproj), including Localizable.strings and Localizable.stringsdict, to provide French translations for the application's interface, configuration options, error messages, and pluralized strings.

Platform/fr.lproj · high confidence

Added French localization for VM display window controls

Users who have set their macOS system language to French will now see the Virtual Machine display window interface translated. This new file provides French strings for toolbar items and tooltips, including labels and descriptions for shared folders, mouse capture, drive options, USB devices, console resizing, and the segmented power control (start/pause, stop, restart).

Platform/macOS/Display/fr.lproj · high confidence

Added French localization for iOS, macOS, and QEMUHelper

French language support has been added to the application. Users with their device or system language set to French will now see localized strings for bundle names, privacy usage descriptions (such as local network, location, and microphone access), and error messages within the iOS app, macOS app, and the QEMUHelper background process.

Platform/iOS/fr.lproj, Platform/macOS/fr.lproj, QEMUHelper/fr.lproj · high confidence

Added German localization for iOS, macOS, and QEMUHelper

Users can now see the app interface in German. This change adds German language files (InfoPlist.strings and Localizable.strings) for the iOS app, macOS app, and the QEMUHelper background process, translating privacy permission descriptions, bundle names, and error messages.

Platform/iOS/de.lproj, Platform/macOS/de.lproj, QEMUHelper/de.lproj · high confidence

Added Italian language localization

Italian users will now see the application interface translated into Italian, including settings, error messages, and virtual machine configuration options. This change adds the necessary localization files (Localizable.strings and Localizable.stringsdict) to support Italian text and pluralization rules.

Platform/it.lproj · high confidence

Added Italian localization for UTM and QEMUHelper

Italian language support has been added to the UTM application and its QEMUHelper component. This includes localized strings for bundle names, privacy permission descriptions (such as local network, location, and microphone usage), and error messages displayed when QEMU encounters issues, ensuring these interfaces appear in Italian for users with that language setting.

Platform/iOS/it.lproj, Platform/macOS/it.lproj, QEMUHelper/it.lproj · high confidence

Added Italian localization for the VM display window

Users who select Italian as their system language will now see the virtual machine display window interface translated into Italian. This includes labels, tooltips, and titles for toolbar items such as Shared Folder, Capture Input, Drives, and USB, as well as the segmented power control buttons for starting, pausing, and restarting the VM.

Platform/macOS/Display/it.lproj · high confidence

Added Japanese localization for the VM display window interface

Japanese users will now see translated labels, tooltips, and window titles in the virtual machine display toolbar and controls. This new VMDisplayWindow.strings file provides translations for toolbar items such as Shared Folder, Drives, Capture Mouse, Windows, USB, and Resize Console, as well as specific tooltips for the segmented power control (shutdown, start/pause, restart) and the main window title.

Platform/macOS/Display/ja.lproj · high confidence

Added Japanese localization resources

Added new Localizable.strings and Localizable.stringsdict files for the Japanese (ja.lproj) locale, providing translations for configuration options, error messages, settings views, and drive management interfaces, including pluralization support for core counts.

Platform/ja.lproj · high confidence

Added Polish language localization for UTM

This change introduces the Polish language (pl.lproj) to the UTM application, adding support for displaying the interface in Polish. The update includes new localization files (InfoPlist.strings, Localizable.strings, and Localizable.stringsdict) that translate key UI elements, configuration options, error messages, and settings views. Users can now see labels for virtual machine settings, drive types, network configurations, and remote connection prompts in Polish, improving accessibility for Polish-speaking users.

Platform/pl.lproj · high confidence

Added Polish language localization for macOS bundle strings

A new Polish localization file (pl.lproj) has been added to the macOS platform, providing translations for the application bundle name (UTM) and the description of a UTM virtual machine. This enables the application to display these specific interface elements in Polish for users with that language setting.

Platform/macOS/pl.lproj · high confidence

Added Polish localization for privacy permissions and bundle names

Polish language support has been added for iOS privacy permission prompts and bundle identification. Users will now see Polish text when the app requests access to the local network, microphone, and location services (including background location), and the bundle name is localized for the UTM app and QEMU launcher components.

Platform/iOS/pl.lproj, QEMULauncher/pl.lproj · high confidence

Added Polish localization strings for QEMUHelper

Users with Polish language settings will now see localized messages in the QEMUHelper component, including bundle display names and error notifications such as 'Cannot find QEMU support libraries', 'Error starting QEMU', and 'QEMU exited unexpectedly'.

QEMUHelper/pl.lproj · high confidence

Added Russian language localization for iOS, macOS, and QEMUHelper

The application now supports the Russian language across its iOS and macOS platforms as well as the QEMUHelper component. This update includes translated strings for bundle names, copyright notices, and critical privacy permission descriptions (such as Local Network, Location, and Microphone usage) on iOS, along with localized error messages for QEMUHelper issues like missing libraries or unexpected exits.

Platform/iOS/ru.lproj, Platform/macOS/ru.lproj, QEMUHelper/ru.lproj, Platform/ru.lproj · high confidence

Added Russian language support for the VM display window

Users can now see the VM display window interface in Russian. This change adds a new localization file (VMDisplayWindow.strings) containing translations for toolbar items such as Shared Folder, Capture Input, Drives, and USB, as well as tooltips and labels for power controls and window titles.

Platform/macOS/Display/ru.lproj · high confidence

Added Simplified Chinese localization for QEMUHelper

Added new Localizable.strings and InfoPlist.strings files for the zh-Hans locale, providing Simplified Chinese translations for the bundle display name, copyright information, and the error message displayed when QEMU support libraries cannot be found.

QEMUHelper/zh-Hans.lproj · high confidence

Added Spanish (Latin America) localization for the VM display window

Users with Spanish (Latin America) locale settings will now see the Virtual Machine display window interface translated, including toolbar labels for features like Shared Folder, Drives, Capture Mouse, Windows, USB, and Resize Console, as well as tooltips and power control descriptions (Shut down, Start/pause, Restart).

Platform/macOS/Display/es-419.lproj · high confidence

Added Traditional Chinese (Hong Kong) localization for iOS settings

Users with their device language set to Traditional Chinese (Hong Kong) will now see the iOS Settings bundle translated into their language. This change adds the \Root.strings\ file for the \zh-HK\ locale, providing translations for settings related to input devices (mouse, touchpad, gamepad), gestures, cursor behavior, graphics, and general application information.

Platform/iOS/Settings.bundle/zh-HK.lproj, QEMUHelper/zh-HK.lproj · high confidence

Added Traditional Chinese (Hong Kong) localization for the VM display window

Users with macOS set to Traditional Chinese (Hong Kong) will now see the virtual machine display window interface translated, including toolbar labels for features like Send Key, Shared Folder, Drives, Capture Input, Displays, Power, USB Devices, and Resize Console, as well as their associated tooltips and window titles.

Platform/macOS/Display/zh-HK.lproj · high confidence

Added Traditional Chinese (zh-Hant) localization for iOS Settings

Users on iOS devices with Traditional Chinese language settings will now see localized labels in the app's Settings bundle. This change adds translations for input-related options (such as Apple Pencil, touchpad, and gamepad controls), cursor behaviors, and tablet/touch modes, ensuring these interface elements are displayed in the user's preferred language.

Platform/iOS/Settings.bundle/zh-Hant.lproj, QEMUHelper/zh-Hant.lproj · high confidence

Apple Virtualization backend gains snapshot, USB passthrough, and network management services

The Services layer now includes dedicated backends for Apple Virtualization features: UTMAppleSnapshotBackend manages full-VM snapshots (including disk layers and auxiliary files), UTMAppleUSBManager and UTMAppleUSBDevice enable host USB device passthrough, and UTMAppleVmnetNetworkManager handles virtual network configuration. These services are gated behind macOS 26/27 availability checks and integrate with the existing UTMAppleVirtualMachine implementation to provide these capabilities.

Services · high confidence

Initial Chinese (Hong Kong) localization added

Users can now see the application interface in Traditional Chinese (Hong Kong). This change introduces the zh-HK.lproj bundle containing Localizable.strings and Localizable.stringsdict, providing translations for UI elements, error messages, and pluralization rules (e.g., core counts) to support the zh-HK locale.

Platform/zh-HK.lproj · high confidence

Initial Simplified Chinese localization for UTM

Added the zh-Hans localization bundle, including Localizable.strings and Localizable.stringsdict, to provide Simplified Chinese translations for the application's user interface, error messages, and configuration options.

Platform/zh-Hans.lproj · high confidence

Introduce dedicated download and pending-VM infrastructure

The Platform layer now includes a new asynchronous download framework (UTMDownloadTask and subclasses) that handles fetching VM packages, IPSW files, and guest support tools while displaying progress in a Pending Virtual Machines list. A new UTMPendingVirtualMachine model tracks download state, and UTMData manages these pending items alongside active VMs, allowing users to monitor and cancel downloads without blocking the UI.

Platform · high confidence

Introduce remote VM access with TLS fingerprint verification and SPICE integration

The Remote module now enables connecting to and managing virtual machines on other Macs over the network. This change adds a client-server architecture using SwiftConnect for transport, with UTMRemoteKeyManager handling RSA-4096 certificate generation and storage in the system keychain. Connections are secured via TLS and verified using SHA-256 certificate fingerprints to prevent man-in-the-middle attacks. The UTMRemoteClient handles service discovery via Bonjour, connection establishment, and password-based authentication during the handshake. The UTMRemoteServer advertises the service, manages incoming connections, and supports NAT port mapping for external access. Virtual machine interactions are proxied through UTMRemoteSpiceVirtualMachine, which exposes capabilities like snapshots, screenshots, and process kill, while hiding QEMU internals from the remote SPICE interface.

Remote · high confidence

Introduce utmctl command-line interface for VM management

A new command-line tool, utmctl, is introduced to allow users to control UTM virtual machines from the terminal. The tool provides subcommands for listing, starting, stopping, suspending, and attaching to VMs, as well as managing snapshots, cloning VMs, and handling USB devices. It communicates with the UTM application via AppleScript scripting bridge, automatically locating the UTM.app bundle and handling sandbox entitlements for secure access.

utmctl · high confidence

New App Intents for Virtual Machine Control and Automation

This update introduces a new set of App Intents in the Intents module, enabling users to control virtual machines and send input via Siri and the Shortcuts app. You can now start, stop, pause, resume, and restart VMs (with options like recovery mode, disposable mode, and stop methods), query VM status, and send keystrokes, scan codes, or mouse clicks to the guest. The implementation includes the UTMVirtualMachineEntity for VM selection and querying, along with error handling for unsupported backends or missing input handlers.

Intents · high confidence

New AppleScript scripting interface for virtual machine management

UTM now exposes a comprehensive AppleScript suite (UTM Suite) allowing users to script virtual machine lifecycle and configuration. Users can create, import, export, duplicate, and delete VMs, as well as start, stop, and suspend them. The interface supports managing full-VM snapshots (create, restore, delete, overwrite), configuring QEMU and Apple Virtualization backends, and interacting with the guest via the QEMU Guest Agent for file operations and process execution. It also includes input automation for sending keystrokes and mouse events, USB device management, and display configuration.

Scripting · high confidence

New build, packaging, and configuration generation scripts

The build system now uses a new set of shell and Python scripts to manage dependencies, generate configuration constants, and package the application. The \build\_utm.sh\ script handles the main Xcode build and code signing for iOS and macOS targets, while \build\_dependencies.sh\ manages the download and compilation of third-party libraries with retry logic for CI stability. A new \const-gen.py\ script generates Swift constants for supported CPU architectures and hardware devices, and \package.sh\ automates the creation of DEB and IPA artifacts for various distribution modes (standard, SE, Remote). Additional utilities include \bridge-gen.sh\ for generating Swift scripting interfaces, \carmerge.m\ for handling app icon assets, and \install\_d3dmetal.sh\ for integrating the D3DMetal framework into the sysroot.

scripts · high confidence

New iOS Settings bundle with granular VM configuration options

The iOS application now includes a comprehensive Settings bundle (Root.plist and License.plist) that exposes numerous virtual machine configuration options directly in the iOS Settings app. Users can now control background behavior (continue running, auto-save on background/low memory), idle management (disable screen dimming), privacy (block screenshot saving), and device preferences (USB device prompts, microphone selection). Graphics settings are also exposed, allowing users to select the renderer backend (Default, ANGLE OpenGL, ANGLE Metal) and Vulkan driver (Default, Disabled, MoltenVK, KosmicKrisp), with certain options excluded for iOS-Remote and iOS-SE builds. The bundle also includes the LGPL v2.1 license text for distributed libraries.

Platform/iOS/Settings.bundle · high confidence

New shared SwiftUI UI components for consistent cross-platform styling

The Platform/Shared directory now includes a suite of reusable SwiftUI views to standardize the user interface across iOS, macOS, and visionOS. This adds a BigButtonStyle and InListButtonStyle for consistent button appearances, a BusyIndicator and BusyOverlay to display loading states and alerts, and specialized input controls like DefaultTextField, NumberTextField, SizeTextField, and RAMSlider for configuration forms. It also introduces a MacDeviceLabel to display the correct system icon based on the host Mac model, a FileBrowseField for path selection, and a GlobalFileImporter to work around iOS file picker limitations.

Platform/Shared · high confidence

Project initialization with documentation, build configuration, and multi-language support

The repository is initialized with the core project structure, including a new \.gitignore\ for Xcode and build artifacts, and \Build.xcconfig\ setting the marketing version to 5.0.5. The project now includes \AGENTS.md\ and \CONTRIBUTING.md\ to define development workflows, AI attribution policies, and coding standards. Additionally, the project adds localized README files for Bengali, Czech, German, Spanish, French, Japanese, Korean, Polish, and Russian to support international users.

(repo-wide) · high confidence

Standalone QEMU launcher for macOS

The QEMULauncher component has been refactored into a standalone macOS command-line tool that dynamically loads a QEMU dylib and executes it. This change replaces the previous iOS/UIKit-based entry point with a native C implementation, adding support for launching QEMU processes directly and integrating SWTPM capabilities. The launcher now includes necessary macOS entitlements (such as hypervisor and networking access) and an Info.plist, enabling it to function as a dedicated helper for virtualization tasks on macOS.

QEMULauncher · high confidence

iOS app structure and remote connection UI overhaul

The iOS platform files have been replaced with a new SwiftUI-based architecture, introducing a dedicated remote connection interface (UTMRemoteConnectView) for discovering and connecting to UTM servers via Bonjour, alongside a new donation system (UTMDonateStore/View) supporting consumable and subscription in-app purchases. The app entry point (UTMApp) now conditionally initializes either local (UTMData) or remote (UTMRemoteData) backends, while configuration is handled via a new settings view (UTMSettingsView) wrapping InAppSettingsKit, and the app bundle is updated with separate Info plists for remote and standard builds, a new PrivacyInfo.xcprivacy manifest, and StoreKit test configuration.

Platform/iOS · high confidence

Removals

Removal of legacy VM list view components

The \VMListViewCell\ and \VMListViewController\ files have been deleted from the Views directory. This removes the previous implementation of the VM list interface, which included a collection view with placeholder data and basic state management, as part of the broader migration to the new UTM-based view architecture.

Views · high confidence

Removed legacy VM configuration views

Deleted the old Objective-C configuration view controllers (System, Display, Drives, Input, Existing) and their associated subviews from the ConfigurationViews directory. This removes the previous table-based UI for managing VM settings, paving the way for the new settings backend.

ConfigurationViews · high confidence

Behavioural changes

Added Chinese (Hong Kong) localization for the launcher bundle name

A new localization file for the zh-HK region has been introduced, providing the Chinese (Hong Kong) translation for the application's bundle name (CFBundleName) within the QEMULauncher InfoPlist strings.

zh-HK.lproj · high confidence

Added English localization files

Added English localization files to the platform, including a Localizable.strings file and a Localizable.stringsdict file that defines pluralization rules for the "%lld Cores" string.

Platform/en.lproj · high confidence

Added English localization files for Info.plist

Added new English localization files (InfoPlist.strings and Info-RemotePlist.strings) to the iOS platform. These files provide the English language strings for the application's Info.plist configuration, ensuring that localized metadata is correctly handled for English-speaking users.

Platform/iOS/en.lproj · medium confidence

Added Finnish localization for macOS bundle and privacy descriptions

Users with Finnish language settings on macOS will now see localized strings for the application bundle name ("UTM virtuaalilaite") and the microphone usage permission description, improving clarity and accessibility for Finnish-speaking users.

Platform/macOS/fi.lproj · high confidence

Added German localization for iOS Settings

Users with German language settings on iOS will now see the application's Settings bundle translated, including labels for input methods (Apple Pencil, Touch, Mouse), gestures, and system behaviors like background VM execution and cursor visibility.

Platform/iOS/Settings.bundle/de.lproj · high confidence

Added IOServiceAuthorize interposer for iOS device builds

The JailbreakInterposer module now includes a C implementation that intercepts the IOServiceAuthorize function on iOS devices. This interposer replaces the standard authorization call with a custom handler that sets the authorization ID directly using the process's unique identifier, bypassing the need for the IOServiceAuthorizeAgent XPC service. This change is active only on physical devices and is disabled for simulator builds to prevent runtime errors in the simulator environment.

JailbreakInterposer · high confidence

Added Japanese localization for Info.plist keys

A new InfoPlist.strings file has been added for the Japanese locale, providing translations for the microphone usage description (NSMicrophoneUsageDescription) and the application name (UTM virtual machine). This ensures that macOS permission prompts and app identifiers display correctly in Japanese.

Platform/macOS/ja.lproj · high confidence

Added Japanese localization for QEMUHelper

Users with Japanese language settings will now see localized error messages and bundle display names in the QEMUHelper component. Specifically, the app now displays "QEMUHelper" as the bundle name and provides Japanese translations for critical errors such as "Cannot find QEMU support libraries" and "Error starting QEMU."

Platform/iOS/Settings.bundle/ja.lproj, QEMUHelper/ja.lproj · high confidence

Added Japanese localization for iOS privacy and bundle descriptions

Japanese users will now see localized strings for privacy permission requests (local network, microphone, and location) and the app bundle name, ensuring clear explanations for why the app requires these permissions and displaying the correct Japanese app name in the system UI.

Platform/iOS/ja.lproj · high confidence

Added Korean (ko) localization for iOS and macOS settings and permissions

Users can now see the app interface in Korean. This change adds new translation files for the iOS Settings bundle (covering background, graphics, gestures, cursor, and gamepad options) and provides localized strings for privacy permission descriptions (local network, location, microphone) and bundle metadata across the iOS app, macOS app, and QEMUHelper extension.

(repo-wide) · high confidence

Added Simplified Chinese localization for iOS app name and privacy permissions

The iOS app now displays its name and permission descriptions in Simplified Chinese (zh-Hans). This change introduces localized strings for the bundle name ('UTM' and 'UTM 远程'), as well as explanations for Local Network, Location (Always/When In Use), and Microphone permissions, ensuring users see clear, native-language prompts when the app requests access to these device features.

Platform/iOS/zh-Hans.lproj · high confidence

Added Simplified Chinese localization for macOS bundle and privacy descriptions

Users on macOS with Simplified Chinese locale settings will now see localized strings for the application bundle name (displayed as "UTM 虚拟机") and the system privacy permission prompt requesting microphone access, which explains that any virtual machine requires permission to record audio via the microphone.

Platform/macOS/zh-Hans.lproj · high confidence

Added Spanish (Latin America) translations for iOS Settings

Users with their device language set to Spanish (Latin America) will now see the iOS Settings bundle fully localized. This change adds the missing translations for general settings and iOS-specific options, covering UI elements such as cursor behavior, touch and gamepad input modes, background VM execution, and device connection prompts.

Platform/iOS/Settings.bundle/es-419.lproj · high confidence

Added Traditional Chinese localization for QEMULauncher bundle name

A new localization file for Traditional Chinese (zh-Hant) has been added to define the bundle name as "QEMULauncher". This ensures that the application's display name is correctly localized for users with Traditional Chinese language settings.

zh-Hant.lproj · high confidence

Added Traditional Chinese localization for bundle name and microphone permission

The macOS app now displays its bundle name and virtual machine label in Traditional Chinese, and provides a localized explanation for the microphone permission request, ensuring users see consistent language in system dialogs and app metadata.

Platform/macOS/zh-Hant.lproj · high confidence

Added Traditional Chinese localization for iOS privacy permissions and app name

The iOS app now displays Traditional Chinese (zh-Hant) strings for key system permission descriptions and the bundle name. Users will see localized explanations for why the app needs access to the local network (for AltServer communication), location services (for background virtual machine access), and the microphone, as well as the app name displayed as "UTM 虛擬機" in the system settings.

Platform/iOS/zh-Hant.lproj · high confidence

Added Xcode workspace configuration files

The project now includes the standard Xcode workspace data file (contents.xcworkspacedata) and the IDE workspace checks plist (IDEWorkspaceChecks.plist). These files establish the workspace structure and enable Xcode's built-in warning for uncommitted workspace changes, helping to prevent accidental workspace modifications from being committed to version control.

UTM.xcodeproj/project.xcworkspace · high confidence

Legacy configuration system refactored into dedicated category extensions

The legacy QEMU and Apple virtualization configuration handling has been reorganized into a set of focused category extensions (Constants, Display, Drives, Miscellaneous, Networking, Sharing, System) and a new Codable model for Apple configurations. This change introduces automatic migration logic for display upscalers/downscalers, console fonts, drive image types, sound cards, and network settings, ensuring that older configuration files are updated to the new format on load. Users will benefit from more robust handling of legacy settings, such as default display card selection based on the system target and automatic generation of missing MAC addresses, while the underlying configuration storage remains compatible with existing data.

Configuration/Legacy · high confidence

New Xcode schemes for iOS variants and command-line tool

The project now includes explicit build schemes for the main iOS app, the iOS SE variant, the iOS Remote app, the macOS app, and the utmctl command-line tool. These schemes configure build settings such as parallelization and implicit dependencies, and define launch behaviors including environment variables (e.g., IDELogRedirectionPolicy for logging), command-line arguments (e.g., list -d for utmctl), and StoreKit configuration references for in-app purchase testing in the iOS SE scheme.

UTM.xcodeproj/xcshareddata · high confidence

New configuration backend for Apple Virtualization and QEMU argument generation

The Configuration area introduces a new Swift-based backend for managing virtual machine settings. For Apple Virtualization (macOS), \UTMAppleConfiguration\ and its sub-models (boot, display, drive, network, serial, platform) replace the previous format, enabling structured storage of system, virtualization, and shared directory settings. For QEMU, \QEMUArgument\ and \QEMUArgumentBuilder\ provide a type-safe, result-builder-based approach to constructing command-line arguments, while \QEMUConstant\ and \QEMUConstantGenerated\ define the available hardware options (CPUs, architectures, network modes) used in these arguments.

Configuration · high confidence

QEMURenderServer entitlements updated for sandboxing and library validation

The QEMURenderServer now includes explicit entitlements files to configure its security profile. The unsigned build target enables code-signing library validation disablement, allowing it to load dynamically linked libraries without strict validation, while the signed target maintains standard app sandboxing and entitlement inheritance. This change supports the addition of DirectX rendering capabilities by ensuring the server process can properly load necessary graphics libraries within the macOS security framework.

QEMURenderServer · medium confidence

Redesigned VM display window with segmented power controls and toggle mouse capture

The VM display window interface has been updated to consolidate power actions (shutdown, start/pause, restart) into a single segmented toolbar control and change the mouse capture button to a toggle state. The window is now configured as a FullScreenPrimary window, and the toolbar includes dedicated items for keyboard shortcuts, console resizing, USB devices, drives, and shared folders.

Platform/macOS/Display/Base.lproj · high confidence

Refactored iOS display input handling into modular components

The iOS display input logic has been reorganized into distinct, specialized categories to improve maintainability and support for various input devices. The new \VMCursor\ class handles cursor movement and speed multipliers, while \VMDisplayMetalViewController+Gamepad\ adds support for connected gamepads, including thumbstick-driven scrolling and cursor control. \VMDisplayMetalViewController+Pointer\ implements \UIPointerInteraction\ for touchpad-style pointer control and GCMouse integration, and \VMDisplayMetalViewController+Pencil\ manages Apple Pencil-specific gestures like tap-to-right-click. Keyboard input is now handled by \VMDisplayMetalViewController+Keyboard\, which maps HID codes to PS2 scancodes for the software keyboard and physical external keyboards. Finally, \VMDisplayMetalViewController+Touch\ consolidates all touch gesture recognizers (pan, tap, pinch, swipe) and mouse type configurations, separating them from the main view controller to reduce complexity.

Platform/iOS/Display · high confidence

Remap Caps Lock to F20 during VM input capture

On macOS, the Caps Lock key is now remapped to F20 at the HID layer while the VM has input focus. This ensures that guests using Caps Lock as a held modifier (such as screen readers) receive the key release event, which macOS normally suppresses for the locking modifier. The remap is applied when capture starts and restored when it ends, with a recovery mechanism to strip stale mappings if the application crashes.

Platform/macOS/Display · high confidence

Removal of legacy AppDelegate implementation

The standard iOS application delegate file (AppDelegate.m) has been removed from the UTM app. This cleanup eliminates the default boilerplate methods for handling application lifecycle events (such as launch, background, and termination), indicating a shift in how the application manages its entry point and state, likely towards a more modern SwiftUI or Scene-based architecture.

UTM · high confidence

Removed legacy LaunchScreen and Main storyboards

The app no longer uses the previous \LaunchScreen.storyboard\ and \Main.storyboard\ files for its user interface. This removal indicates a migration away from Interface Builder-based layout definitions in these specific files, likely towards programmatic UI construction or a different storyboard architecture.

UTM/Base.lproj · high confidence

UTM project migrated to modern Xcode build system and Swift

The UTM project configuration has been updated to the latest Xcode object version (55), reflecting a comprehensive migration from the legacy Objective-C storyboard and view controller architecture to a modern Swift and SwiftUI-based interface. This change introduces a wide array of new Swift source files for configuration, display, and management (such as UTMConfigurationHostNetwork, VMNavigationListView, and VMDisplayTerminalViewController) while removing older Objective-C components. It also integrates new dependencies like ZIPFoundation and SwiftTerm, and adds support for new platforms and features including visionOS, remote sessions, and snapshot management.

UTM.xcodeproj · high confidence

Updated Korean localization strings and pluralization rules

The Korean language pack has been refreshed with new and revised translations for configuration options, error messages, and UI elements across the application. This includes specific updates for legacy QEMU configuration support, virtualization settings, and remote connection views. Additionally, a new localization dictionary file has been added to properly handle pluralization for core count displays in Korean.

Platform/ko.lproj · high confidence

Updated Korean translations for the VM display window

The Korean (ko) localization for the VM display window has been updated, adding translations for toolbar items such as Shared Folder, Capture Input, Windows, Resize Console, Drives, and USB, as well as tooltips and labels for power controls and the main window title.

Platform/macOS/Display/ko.lproj · high confidence

Updated Simplified Chinese localization for iOS settings

The Simplified Chinese (zh-Hans) strings file for the iOS Settings bundle has been updated and expanded, providing translations for various input device options (such as Apple Pencil, gamepad, and touchpad), gesture controls, and system preferences like graphics and idle settings.

Platform/iOS/Settings.bundle/zh-Hans.lproj · high confidence

Updated Simplified Chinese translations for the VM display window toolbar

The Simplified Chinese (zh-Hans) localization for the virtual machine display window has been updated. This change provides translations for toolbar items and controls, including labels and tooltips for 'Send Key', 'Shared Folder', 'Drives', 'Capture Input', 'Displays', 'Power', 'USB Devices', and 'Resize Console', as well as the window title and segmented power control states (shutdown, start/pause, restart).

Platform/macOS/Display/zh-Hans.lproj · high confidence

Updated Traditional Chinese (zh-Hant) localization

The Traditional Chinese (zh-Hant) language pack has been refreshed with new translations and corrections. This update includes a new Localizable.stringsdict file to properly handle pluralization for core counts (e.g., "%lld Cores"), and updates to Localizable.strings covering UI elements, error messages, and configuration options to ensure accurate and consistent terminology across the application.

Platform/zh-Hant.lproj · high confidence

Updated Traditional Chinese (zh-Hant) translations for VM display toolbar and controls

The Traditional Chinese (zh-Hant) localization file for the VM display window has been updated to include translations for toolbar items such as Shared Folder, Drives, Capture Input, Windows, USB, and Resize Console, as well as tooltips and labels for the segmented power control (shutdown, start/pause, restart) and the main window title.

Platform/macOS/Display/zh-Hant.lproj · high confidence

macOS app lifecycle and quit behavior is now configurable

The macOS application now offers granular control over how it handles quitting when virtual machines are running. Users can choose between saving the VM state or requesting a graceful power-down from the guest OS via the new "Running VMs on quit" setting in the Application preferences. Additionally, a new option allows the app to remain running in the background after the last window is closed, and users can opt out of the quit confirmation dialog entirely.

Platform/macOS · high confidence

macOS: QEMU execution now runs in a sandboxed XPC helper service

On macOS, QEMU virtual machines are no longer launched directly by the main application process. Instead, a new sandboxed XPC service (QEMUHelper) handles the QEMU process lifecycle, including launching via NSTask, managing security-scoped bookmarks for disk images, and handling termination (with SIGKILL fallback). This architectural change improves security by isolating the QEMU process and enables features like persistent drive bookmarks and app-group socket sharing, while requiring the helper to hold an active token to prevent idle termination.

QEMUHelper · high confidence

visionOS: Introduce ornamental toolbar and plain window style

The visionOS app now uses a plain window style and features an ornamental toolbar attached to the top of the VM session window. This toolbar provides controls for power operations (Power Off, Force Kill, Pause, Play, Restart), display zoom, USB and drive menus, and keyboard toggling. It supports collapsing to hide controls and expanding to show them, and integrates with VisionKeyboardKit for keyboard input handling.

Platform/visionOS · high confidence

Fixes

Added localized bundle name strings for German and Latin American Spanish

The QEMULauncher now includes localized InfoPlist.strings files for German (de.lproj) and Latin American Spanish (es-419.lproj), explicitly setting the bundle name to "QEMULauncher" in these languages to ensure correct display in the system UI.

QEMULauncher/de.lproj, QEMULauncher/es-419.lproj · high confidence

Fixes audio recording delays, crashes, and device switching on macOS/iOS

Updates GStreamer patches to resolve audio recording issues: a clock-reset fix prevents long silence delays when audio caps change, and a ringbuffer error-handling fix stops crashes when the audio source encounters errors. Additionally, patches enable automatic detection and re-binding when the system's default audio device changes, ensuring audio continues to work if the user switches headphones or speakers.

patches · high confidence

Dependencies

Updated Swift Package Manager dependencies

The project's Swift Package Manager lockfile (Package.resolved) has been updated to resolve specific versions and revisions for its dependencies. This includes updates to AltKit (0.0.2), CocoaSpice (main branch), QEMUKit (main branch), SwiftTerm (main branch), ZIPFoundation (0.9.20), and others, ensuring the build uses the latest pinned commits and versions for these libraries.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 48 → 39 (-9.0)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 95 → 85 (-9.7)
  • Architecture 93 → 85 (-7.8)
  • Maturity 59 → 63 (+4.7)
  • Readiness 33 → 28 (-4.9)
  • Security 42 → 23 (-19.2)
  • Domain Modelling 98 → 84 (-13.9)

Resolved (51)

  • Change coupling: VMDisplayAppleTerminalWindowController.swift ↔ VMDisplayQemuTerminalWindowController.swift (Platform/macOS/Display/VMDisplayAppleTerminalWindowController.swift)
  • Change coupling: VMWizardOSLinuxView.swift ↔ VMWizardOSMacView.swift (Platform/Shared/VMWizardOSLinuxView.swift)
  • Change coupling: VMWizardOSLinuxView.swift ↔ VMWizardOSOtherView.swift (Platform/Shared/VMWizardOSLinuxView.swift)
  • Change coupling: VMWizardOSLinuxView.swift ↔ VMWizardOSWindowsView.swift (Platform/Shared/VMWizardOSLinuxView.swift)
  • Change coupling: VMWizardOSLinuxView.swift ↔ VMWizardSharingView.swift (Platform/Shared/VMWizardOSLinuxView.swift)
  • Change coupling: VMWizardOSMacView.swift ↔ VMWizardOSOtherView.swift (Platform/Shared/VMWizardOSMacView.swift)
  • Change coupling: VMWizardOSMacView.swift ↔ VMWizardOSWindowsView.swift (Platform/Shared/VMWizardOSMacView.swift)
  • Change coupling: VMWizardOSOtherView.swift ↔ VMWizardOSWindowsView.swift (Platform/Shared/VMWizardOSOtherView.swift)
  • Change coupling: VMWizardOSOtherView.swift ↔ VMWizardSharingView.swift (Platform/Shared/VMWizardOSOtherView.swift)
  • Change coupling: VMWizardOSWindowsView.swift ↔ VMWizardSharingView.swift (Platform/Shared/VMWizardOSWindowsView.swift)
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Further sole-owners (lower concentration)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 31 more

New (293)

  • AppDelegate.handleTerminateAfterPowerDown (cognitive 43) (Platform/macOS/AppDelegate.swift)
  • AppDelegate.handleTerminateAfterPowerDown (cyclomatic 19) (Platform/macOS/AppDelegate.swift)
  • Boundary-crossing change coupling: UTMAppleConfiguration.swift ↔ VMConfigAppleVirtualizationView.swift (Configuration/UTMAppleConfiguration.swift)
  • CPUFlagsOptions.body (cognitive 16) (Platform/Shared/VMConfigSystemView.swift)
  • Change coupling clique: VMWizardOSLinuxView.swift, VMWizardOSMacView.swift, VMWizardOSOtherView.swift, VMWizardOSView.swift, VMWizardOSWindowsView.swift (Platform/Shared/VMWizardOSLinuxView.swift)
  • Change coupling: VMAppleSettingsView.swift ↔ VMQEMUSettingsView.swift (Platform/macOS/VMAppleSettingsView.swift)
  • Change coupling: VMContextMenuModifier.swift ↔ VMToolbarModifier.swift (Platform/Shared/VMContextMenuModifier.swift)
  • Change coupling: VMWizardState.swift ↔ VMConfigAppleVirtualizationView.swift (Platform/Shared/VMWizardState.swift)
  • ClassTooLong: UTMAppleVirtualMachine (Services/UTMAppleVirtualMachine.swift)
  • ContentView.body (cognitive 21) (Platform/Shared/ContentView.swift)
  • ContentView.body (cyclomatic 17) (Platform/Shared/ContentView.swift)
  • Details.body (cognitive 27) (Platform/Shared/VMDetailsView.swift)
  • Details.body (cyclomatic 18) (Platform/Shared/VMDetailsView.swift)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (Configuration/UTMAppleConfiguration.swift)
  • Duplicated block (10 lines × 2) (Intents/UTMInputIntent.swift)
  • Duplicated block (10 lines × 2) (Platform/Shared/VMConfigSerialView.swift)
  • Duplicated block (10 lines × 2) (Scripting/UTMScriptingGuestFileImpl.swift)
  • Duplicated block (10 lines × 2) (Services/UTMAppleVirtualMachine.swift)
  • Duplicated block (10 lines × 3) (Scripting/UTMScriptingGuestFileImpl.swift)
  • …and 273 more

Changes since last survey

  • 103 commits — 92 feature/other, 11 fixes

By area

  • (repo) — 33 commits
  • Platform/iOS — 12 commits
  • Platform/macOS — 8 commits
  • Platform/Shared — 6 commits
  • Scripting/UTM.sdef — 6 commits
  • (root) — 5 commits
  • Configuration/UTMAppleConfiguration.swift — 4 commits
  • Platform/UTMDownloadVMTask.swift — 3 commits
  • Services/UTMQemuSystem.m — 3 commits
  • Configuration/UTMQemuConfiguration+Arguments.swift — 2 commits
  • Platform/zh-HK.lproj — 2 commits
  • Platform/zh-Hans.lproj — 2 commits
  • Configuration/UTMAppleConfigurationDrive.swift — 1 commit
  • Configuration/UTMConfigurationDrive.swift — 1 commit
  • Configuration/UTMQemuConfigurationDisplay.swift — 1 commit
  • Configuration/UTMSnapshotManifest.swift — 1 commit
  • Icons/msdos.png — 1 commit
  • Platform/de.lproj — 1 commit
  • QEMULauncher/Bootstrap.c — 1 commit
  • Scripting/UTMScriptingRegistryEntryImpl.swift — 1 commit

Notable commits

  • fix: Fix translation placeholder for German (de)
  • fix: Fix translations for zh-Hans
  • fix: Merge pull request #7805 from michaelbnewman/fix-readme-links
  • fix: Merge pull request #7840 from lprazdnik/fix/caps-lock-release
  • fix: Merge pull request #7853 from evan314159/fix-spice-gtk-coreaudio-hang
  • fix: Merge pull request #7854 from lprazdnik/fix/browse-button-accessibility
  • fix: Merge pull request #7856 from atkinsam/fix/apple-scripting-shared-dir
  • fix: Merge pull request #7860 from LayerTM/fix/utmctl-entitlement-unsigned
  • fix: Merge pull request #7873 from utmapp/fix/ios27
  • fix: scripting: fix shared directory access for Apple Virtualization VMs
  • fix: spice-gtk: fix macOS audio deadlock hang under memory pressure
  • change: Add MS-DOS logo
  • change: Add more translations for zh-Hans & zh-HK (#7887)
  • change: Merge branch 'utmapp:main' into l10n
  • change: Merge pull request #7802 from changanmoon/l10n
  • change: Merge pull request #7806 from sigitkusuma/apple-explain-newer-guest-install-failure
  • change: Merge pull request #7829 from synrest/upstream/graceful-quit
  • change: Merge pull request #7832 from naveenrajm7/feature/full-vm-snapshots
  • change: Merge pull request #7837 from lprazdnik/feature/command-option-swap
  • change: Merge pull request #7844 from utmapp/download-vm-zip-traversal
  • …and 83 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

utmapp/UTM was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 22 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8bc7a0ba7efef7c9951f6a592cbd7fa0edff2894 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1b85ed16f44.