<!--
{
  "availability" : [
    "macOS: 11.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Virtualization",
  "identifier" : "/documentation/Virtualization/VZVirtualMachineConfiguration",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Virtualization"
    ],
    "preciseIdentifier" : "c:objc(cs)VZVirtualMachineConfiguration"
  },
  "title" : "VZVirtualMachineConfiguration"
}
-->

# VZVirtualMachineConfiguration

The environment attributes and list of devices to use during the configuration of macOS or Linux VMs.

```
class VZVirtualMachineConfiguration
```

## Overview

Use a [`VZVirtualMachineConfiguration`](/documentation/Virtualization/VZVirtualMachineConfiguration) object to configure the environment for a macOS or Linux VM. This configuration object contains information about the VM environment, including the devices that the VM exposes to the guest operating system. For example, use the configuration object to specify the network interfaces and storage devices that the operating system may access. For more information on the devices that macOS and Linux guests can support, see the Devices section on the [`Virtualization`](/documentation/Virtualization) framework page.

You create and configure [`VZVirtualMachineConfiguration`](/documentation/Virtualization/VZVirtualMachineConfiguration) objects directly. After validating the configuration object, use it to initialize the [`VZVirtualMachine`](/documentation/Virtualization/VZVirtualMachine) object that manages the virtual environment. The smallest valid configuration includes a value for the [`bootLoader`](/documentation/Virtualization/VZVirtualMachineConfiguration/bootLoader) property; you can also include more devices in the configuration depending on the needs of your app, such as graphics devices, shared directories, and so on. When you finish configuring the object, call the [`validate()`](/documentation/Virtualization/VZVirtualMachineConfiguration/validate()) method to determine whether a VM can successfully support your configuration. A configuration object is invalid if your app doesn’t have the <doc://com.apple.documentation/documentation/BundleResources/Entitlements/com.apple.security.virtualization> entitlement.

For more information on using `VZVirtualMachineConfiguration`, see [Installing macOS on a Virtual Machine](/documentation/Virtualization/installing-macos-on-a-virtual-machine) and [Creating and Running a Linux Virtual Machine](/documentation/Virtualization/creating-and-running-a-linux-virtual-machine).

## Topics

### Configuring the guest system

[`bootLoader`](/documentation/Virtualization/VZVirtualMachineConfiguration/bootLoader)

The guest system to boot when the VM starts.

### Setting the number of CPUs

[`cpuCount`](/documentation/Virtualization/VZVirtualMachineConfiguration/cpuCount)

The number of CPUs you make available to the guest operating system.

[`minimumAllowedCPUCount`](/documentation/Virtualization/VZVirtualMachineConfiguration/minimumAllowedCPUCount)

The minimum number of CPUs you may configure for the VM.

[`maximumAllowedCPUCount`](/documentation/Virtualization/VZVirtualMachineConfiguration/maximumAllowedCPUCount)

The maximum number of CPUs you may configure for the VM.

### Sizing the memory partition

[`memorySize`](/documentation/Virtualization/VZVirtualMachineConfiguration/memorySize)

The amount of physical memory the guest operating system recognizes.

[`minimumAllowedMemorySize`](/documentation/Virtualization/VZVirtualMachineConfiguration/minimumAllowedMemorySize)

The minimum amount of memory that you may configure for the VM.

[`maximumAllowedMemorySize`](/documentation/Virtualization/VZVirtualMachineConfiguration/maximumAllowedMemorySize)

The maximum amount of memory that you may configure for the VM.

[`memoryBalloonDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/memoryBalloonDevices)

An array that you configure with a memory balloon device, used to update the memory in the VM.

### Adding devices to the VM

[`audioDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/audioDevices)

The list of audio devices.

[`consoleDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/consoleDevices)

The array of console devices that you expose to the guest operating system.

[`customVirtioDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/customVirtioDevices)

The array of custom virtio devices that you expose to the guest operating system.

[`directorySharingDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/directorySharingDevices)

The list of directory sharing devices.

[`entropyDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/entropyDevices)

The array of randomization devices that you expose to the guest operating system.

[`graphicsDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/graphicsDevices)

The list of graphics devices.

[`keyboards`](/documentation/Virtualization/VZVirtualMachineConfiguration/keyboards)

The list of keyboards.

[`networkDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/networkDevices)

The array of network devices that you expose to the guest operating system.

[`platform`](/documentation/Virtualization/VZVirtualMachineConfiguration/platform)

The hardware platform to use.

[`pointingDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/pointingDevices)

The list of pointing devices.

[`serialPorts`](/documentation/Virtualization/VZVirtualMachineConfiguration/serialPorts)

The array of serial ports that you expose to the guest operating system.

[`socketDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/socketDevices)

The socket device that you use to implement port-based communication with the guest operating system.

[`storageDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/storageDevices)

The array of storage devices that you expose to the guest operating system.

[`usbControllers`](/documentation/Virtualization/VZVirtualMachineConfiguration/usbControllers)

The list of configured USB controllers for the VM.

[`customVirtioDevices`](/documentation/Virtualization/VZVirtualMachineConfiguration/customVirtioDevices)

The array of custom virtio devices that you expose to the guest operating system.

### Naming the VM

[`label`](/documentation/Virtualization/VZVirtualMachineConfiguration/label)

An optional label for the virtual machine.

### Validating the configuration

[`validate()`](/documentation/Virtualization/VZVirtualMachineConfiguration/validate())

Validates the current configuration settings and reports any issues that might prevent the successful initialization of the VM.

[`validateSaveRestoreSupport()`](/documentation/Virtualization/VZVirtualMachineConfiguration/validateSaveRestoreSupport())

Determines whether the framework can save or restore the VM’s current configuration.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)