---
title: VZVirtualMachineConfiguration
framework: virtualization
role: symbol
role_heading: Class
path: virtualization/vzvirtualmachineconfiguration
---

# VZVirtualMachineConfiguration

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

## Declaration

```swift
class VZVirtualMachineConfiguration
```

## Mentioned in

Creating and Running a Linux Virtual Machine Installing macOS on a Virtual Machine

## Overview

Overview Use a 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 framework page. You create and configure VZVirtualMachineConfiguration objects directly. After validating the configuration object, use it to initialize the VZVirtualMachine object that manages the virtual environment. The smallest valid configuration includes a value for the 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() method to determine whether a VM can successfully support your configuration. A configuration object is invalid if your app doesn’t have the com.apple.security.virtualization entitlement. For more information on using VZVirtualMachineConfiguration, see Installing macOS on a Virtual Machine and Creating and Running a Linux Virtual Machine.

## Topics

### Configuring the guest system

- [bootLoader](virtualization/vzvirtualmachineconfiguration/bootloader.md)

### Setting the number of CPUs

- [cpuCount](virtualization/vzvirtualmachineconfiguration/cpucount.md)
- [minimumAllowedCPUCount](virtualization/vzvirtualmachineconfiguration/minimumallowedcpucount.md)
- [maximumAllowedCPUCount](virtualization/vzvirtualmachineconfiguration/maximumallowedcpucount.md)

### Sizing the memory partition

- [memorySize](virtualization/vzvirtualmachineconfiguration/memorysize.md)
- [minimumAllowedMemorySize](virtualization/vzvirtualmachineconfiguration/minimumallowedmemorysize.md)
- [maximumAllowedMemorySize](virtualization/vzvirtualmachineconfiguration/maximumallowedmemorysize.md)
- [memoryBalloonDevices](virtualization/vzvirtualmachineconfiguration/memoryballoondevices.md)

### Adding devices to the VM

- [audioDevices](virtualization/vzvirtualmachineconfiguration/audiodevices.md)
- [consoleDevices](virtualization/vzvirtualmachineconfiguration/consoledevices.md)
- [customVirtioDevices](virtualization/vzvirtualmachineconfiguration/customvirtiodevices.md)
- [directorySharingDevices](virtualization/vzvirtualmachineconfiguration/directorysharingdevices.md)
- [entropyDevices](virtualization/vzvirtualmachineconfiguration/entropydevices.md)
- [graphicsDevices](virtualization/vzvirtualmachineconfiguration/graphicsdevices.md)
- [keyboards](virtualization/vzvirtualmachineconfiguration/keyboards.md)
- [networkDevices](virtualization/vzvirtualmachineconfiguration/networkdevices.md)
- [platform](virtualization/vzvirtualmachineconfiguration/platform.md)
- [pointingDevices](virtualization/vzvirtualmachineconfiguration/pointingdevices.md)
- [serialPorts](virtualization/vzvirtualmachineconfiguration/serialports.md)
- [socketDevices](virtualization/vzvirtualmachineconfiguration/socketdevices.md)
- [storageDevices](virtualization/vzvirtualmachineconfiguration/storagedevices.md)
- [usbControllers](virtualization/vzvirtualmachineconfiguration/usbcontrollers.md)
- [customVirtioDevices](virtualization/vzvirtualmachineconfiguration/customvirtiodevices.md)

### Naming the VM

- [label](virtualization/vzvirtualmachineconfiguration/label.md)

### Validating the configuration

- [validate()](virtualization/vzvirtualmachineconfiguration/validate().md)
- [validateSaveRestoreSupport()](virtualization/vzvirtualmachineconfiguration/validatesaverestoresupport().md)

## Relationships

### Inherits From

- [NSObject](objectivec/nsobject-swift.class.md)

### Conforms To

- [CVarArg](swift/cvararg.md)
- [CustomDebugStringConvertible](swift/customdebugstringconvertible.md)
- [CustomStringConvertible](swift/customstringconvertible.md)
- [Equatable](swift/equatable.md)
- [Hashable](swift/hashable.md)
- [NSCopying](foundation/nscopying.md)
- [NSObjectProtocol](objectivec/nsobjectprotocol.md)

## See Also

### Configurations

- [VZVirtualMachineStartOptions](virtualization/vzvirtualmachinestartoptions.md)
- [VZGenericPlatformConfiguration](virtualization/vzgenericplatformconfiguration.md)
- [VZPlatformConfiguration](virtualization/vzplatformconfiguration.md)
