Windows Virtual Machines
VirtualProg runs Windows 11 ARM64 as a virtual machine on Apple silicon Macs. This page covers everything specific to Windows VMs โ requirements, creating a VM, installing Guest Tools, display, networking, Prism, and day-to-day operation.
๐ธ Screenshot:
โ Requirements
| Requirement | Details |
|---|---|
| Mac | Apple silicon (M1 or later). Intel Macs are not supported for Windows VMs. |
| Windows | A Windows ARM64 installer .iso file: Windows 11, or Windows Server 2025. |
| Disk | Dynamic or fixed, as for macOS and Linux VMs. Dynamic disks can shrink when Windows frees space. |
| Drivers and agent | The VirtualProgTools disc, attached from the toolbar with Install Guest Tools. |
๐ก The Windows option appears in the OS pickers only on Macs that support Windows VMs.
โ Create a Windows VM
Before you create the VM, get the installer ready. In the Image Catalog, under ISO, download Windows 11: VirtualProg gets Microsoft's official Windows 11 ARM64 ISO in English (about 8.5 GB) straight from Microsoft. You can also pick it in the boot image list when you create the VM. You need a Windows licence to activate Windows.
๐ก Windows Setup lets you choose your country and keyboard layout, and you can add another display language later in Settings > Time & language > Language & region. For an installer in another language, or if Microsoft refuses the download, get the ISO from Microsoft's download page and add it to the Image Catalog: click +, choose Local File, enter a display name, select ISO, then click Choose File and pick the downloaded
.iso.
Then create the VM:
- Click Quick Create in the Control Center, or โ for the full configuration wizard.
- Enter a Name and select Windows as the OS.
- Select Windows 11, or the
.isoyou added, as the boot image. - Set Processors, Memory (MB), and Disk Size (GB). See CPU & Memory for guidance.
- Optionally turn on Unattended Install (see below).
- Click Create, then start the VM and follow Windows Setup.
After Windows Setup, install the drivers and the VirtualProg agent with Guest Tools.
๐ก Already have Windows in Parallels Desktop? Import it instead.
๐ช Unattended Install
Unattended Install is available for Windows 11 and Windows Server 2025. Quick Create tells them apart from the ISO and shows which one, with its account, next to the toggle. Server 2025 needs the Standard (Desktop Experience) edition on the ISO; the install selects it by name.
With Unattended Install, Windows installs by itself: no Setup pages, no product key, no Microsoft account sign-in, and Guest Tools are installed at the first sign-in, after which Windows restarts once by itself. Start the VM and let setup finish; installation may take a while.
| What | How it's set up |
|---|---|
| ๐ช Edition | Windows 11 Pro, or Windows Server 2025 Standard (Desktop Experience). Neither is activated: activate it with your licence in Settings > System > Activation |
| ๐ค Account | Windows 11: a local administrator named after your Mac account. Server 2025: Administrator. No password, signs in automatically |
| ๐ฅ๏ธ Server Manager | Server 2025 only: doesn't open at sign-in. Open it from the Start menu; its Manage > Server Manager Properties turn the automatic start back on |
| ๐ Language | The installer's language; keyboard and time zone follow your Mac |
| ๐ฝ Disk | The VM's first disk is erased and used for Windows |
On the Mac, an Installing... floating panel shows a live screen preview until the VirtualProg agent connects. Cancel powers off the VM without deleting it; setup may be incomplete. During the install the VM has two extra USB drives, the answer file and VirtualProgTools; they are removed shortly after Guest Tools are installed. The VM can't be suspended until then.
๐ก For another user name, a password, or no automatic sign-in, use Provisioning in the VM's configuration before the first start (also in the web dashboard, the iOS and Android apps, and
vpvm config provisioning). The tab disappears once Windows is installed. Server 2025 always uses the Administrator account; its password and automatic sign-in still apply.๐ก The VM needs internet access during the install for WinFsp (Shared Folders).
Remotely, turn on Unattended Install in Quick Create in the web dashboard or the iOS and
Android apps, or add --unattended to vpvm create.
You can also create Windows VMs remotely:
- Web dashboard โ choose Windows as the OS and Windows 11, Windows Server 2025, or Windows as the distro in Create VM.
- iOS and Android apps โ see Create a VM.
- Command line โ use
--os windows, for example:
vpvm images get windows11
vpvm create "Windows 11" --os windows --cpu 4 --memory 8192 --disk 96 --image windows11 --unattended
See Command Line for all vpvm create options.
๐งฐ Install Guest Tools
VirtualProg includes the VirtualProgTools disc with the VirtIO drivers and the VirtualProg agent. It is not attached to new VMs automatically.
- โถ๏ธ Start the VM and wait for the Windows desktop.
- ๐ฟ Click Attach Disks in the VM window toolbar and choose Install Guest Tools.
- ๐ In Windows, open the VirtualProgTools drive in File Explorer.
- ๐ Double-click
install.cmdand allow the administrator prompt. - ๐ Windows restarts 15 seconds after the installer finishes, to start the drivers cleanly. Press any key in its window to restart straight away.
The installer turns off Windows' Fast Startup, so Shut down stops Windows fully and changes to the VM's settings, such as 3D Acceleration or DirectX 12, take effect at the next start.
๐ก Away from the Mac, choose Install Guest Tools in the web dashboard's VM details or remote screen toolbar, in the iOS or Android app's VM details or Live Screen โขโขโข menu, or run
vpvm guest-tools <vm>. While the drive is attached, Eject Guest Tools takes its place and removes the drive again, as doesvpvm guest-tools <vm> --eject.
install.cmd installs everything in one step:
| Step | What it installs |
|---|---|
| ๐งฉ VirtIO drivers | Display, network, memory balloon, serial, shared folders (VirtIO-FS), and VirtIO disks |
| ๐ฅ๏ธ Display resize service | Auto Resolution support, in C:\Program Files\VioGpu |
| ๐ฆ WinFsp | Downloaded from the WinFsp project for Shared Folders |
| ๐ Shared folder service | Mounts shared folders as Z: when Windows starts |
| ๐ค VirtualProg agent | Clipboard Sharing and Prism; starts when you sign in |
Each step shows OK, SKIP, or FAIL. Details of every step are saved to
%TEMP%\VirtualProgGuestTools.log. To open it, press Win + R, enter
%TEMP%\VirtualProgGuestTools.log, and press Enter.
๐ก WinFsp is downloaded during installation, so the VM needs internet access. If it is offline, WinFsp and the shared folder service are skipped. Run
install.cmdagain once the VM is online.๐ก Run
install.cmdagain at any time, for example after a VirtualProg update. It replaces the previous installation.๐ฎ With 3D Acceleration on,
install.cmdinstalls the 3D display driver instead of the standard one; see 3D Acceleration.
To remove the disc, use โ๏ธ Eject Disk in the toolbar.
Install the agent manually
โ ๏ธ Skip this if you ran
install.cmd. It already installed the agent.
The agent provides Clipboard Sharing and Prism. To install it on its own:
- VirtIO Serial driver โ in Device Manager, right-click the PCI Simple Communications
Controller under Other devices, choose Update driver, and select the
vioserial\w11\ARM64folder on the VirtualProgTools drive, the same way as the display driver. The agent talks to your Mac through this device. - Agent โ run
VirtualProgAgent\install.cmdfrom the VirtualProgTools drive and allow the administrator prompt. A message confirms the install.
The agent starts with Windows from now on. To remove it, run uninstall.cmd from the same folder.
๐ Update Guest Tools
When a VirtualProg update brings newer Guest Tools, the agent reports the older version when it connects, and Install Guest Tools reads Update Guest Tools.
- โ๏ธ With Auto Update Guest Tools on (the default, in the VM's Security configuration), VirtualProg updates them by itself.
- โ With it off, an alert offers Update or Later. Later leaves Update Guest Tools in the toolbar, Prism's Devices menu, and the web, iOS and Android apps.
An update attaches the VirtualProgTools drive and runs install.cmd in a window you can
watch. It closes by itself, and the drive is ejected when the new agent connects. The screen may
flicker and shared folders reconnect. At the end the window asks whether to restart Windows to
finish the update. Without an answer within 60 seconds Windows keeps running, and VirtualProg
says Restart Windows to finish in a notification and the VM log until it restarts. Only a
display driver change (3D Acceleration) restarts Windows by
itself.
๐ก Guest Tools from before this feature cannot update themselves: Update Guest Tools only attaches the drive, and you run
install.cmdonce by hand.
๐ฅ๏ธ Display and Resolutions
Windows VMs offer your Mac monitor's resolutions, the same list used for macOS and Linux VMs. Choose the resolution in the VM's Display configuration.
Until the VirtIO GPU driver (viogpudo) is installed, Windows draws through the firmware
display, which supports only a few standard modes such as 1920 ร 1080, 1024 ร 768 and
800 ร 600. Other resolutions can look garbled or tiled until the driver is loaded. Install
the display driver after Windows Setup to use every resolution.
With Auto Resolution selected in the Display configuration, Windows follows the size of the VM window, as macOS and Linux VMs do. Resize the window, enter full screen, or pick a size from the ๐ฅ๏ธ Set Display Resolution button in the toolbar. The web viewer and the iOS and Android apps offer the same resolution picker and Fit to Window / Fit to Screen. Windows needs the display driver and the resize service below.
โจ HiDPI (Retina)
With HiDPI (Retina) turned on in the Display configuration, Windows uses every pixel of a Retina screen, so text and icons are as sharp as in Mac apps. A window that is 1440 ร 900 on screen gives Windows 2880 ร 1800 pixels, and the VirtualProg agent sets Windows to 200% scaling so everything keeps its size. Moving the window between a Retina and a non-Retina screen switches automatically. Prism uses the same setting.
Windows' display driver tops out at about 4096 ร 2160 pixels, so a window larger than about 2048 ร 1080 can't get twice its size. It gets the most that fits instead, at 175%, 150% or 125% scaling: a 2560 ร 1440 window gives Windows 3840 ร 2160 at 150%. Text is still sharper than without HiDPI, though not as crisp as at 200%.
โ ๏ธ Install the display driver with
install.cmdbefore turning HiDPI on. Without it, Windows can't use the larger resolution and the desktop is shown garbled.๐ก Turn HiDPI off if Windows feels slow on your Mac: four times the pixels take more work to draw. After turning it off, or without the agent, set the scale yourself in Settings > System > Display > Scale.
๐ฑ๏ธ Mouse Pointer
With the standard display driver from the Guest Tools, Windows hands its pointer to VirtualProg: the Mac pointer takes the Windows pointer's shape over the VM screen and moves without delay.
Without it, Windows draws the pointer into the screen picture, and it follows the Mac pointer a little behind. That is the case with the 3D display driver, before the Guest Tools are installed, and over text with Windows' standard text pointer. Click the Mac pointer button in the toolbar to hide the Mac pointer and keep only Windows' pointer; press โโ (Control-Command) to show it again.
๐ฎ 3D Acceleration (Experimental)
With 3D Acceleration turned on, Windows apps and games can use DirectX 11 and OpenGL, drawn by your Mac's GPU through Metal. It needs macOS 26 or later on the Mac and the 3D display driver in Windows, which the Guest Tools install for you.
โ ๏ธ 3D Acceleration is an experimental feature. You may see a black screen or a frozen Windows, especially while switching display drivers, and not all games are supported: some run slowly, show graphics errors, or do not start. Try it in a spare VM or create a checkpoint first.
โ๏ธ Standard or 3D display driver?
| ๐ฅ๏ธ Standard (3D Acceleration off) | ๐ฎ 3D (3D Acceleration on) | |
|---|---|---|
| DirectX and OpenGL | Software only | On the Mac's GPU (DirectX 11, OpenGL; DirectX 12 with DirectX 12 on) |
| Auto Resolution and HiDPI | Fit the window exactly | Nearest standard resolution |
| Mouse pointer | Moves with the Mac pointer | Drawn by Windows, a little behind (Mouse Pointer) |
| Suspend | โ Yes | โ No, shut down instead |
| Stability | Recommended | Experimental |
Keep the standard driver unless you need 3D: it fits the window exactly and supports Suspend.
๐ Switch drivers
The display driver follows the 3D Acceleration setting:
- โป Shut down Windows, turn 3D Acceleration on or off in the Display configuration, and start the VM.
- ๐ When the agent connects, VirtualProg sees that Windows has the other driver and treats it like out-of-date Guest Tools: with Auto Update Guest Tools on, the update runs by itself; otherwise choose Update in the alert or Update Guest Tools in the toolbar. See Update Guest Tools.
- โณ A console window shows the installation. The driver changes at the end; the screen may stay black for up to a minute and the desktop may not respond until Windows restarts, which it does by itself straight away. Do not stop or restart the VM.
- โ
With 3D on,
dxdiagshows Red Hat VirtIO GPU 3D controller with Direct3D Acceleration enabled.
New Windows installations, including Unattended Install, get the matching
driver straight away, and running install.cmd by hand does the same.
๐ก If Windows still has the other driver after the switch, VirtualProg does not try again at every start: it shows Display Driver Not Changed and logs it. The log in Windows is
%TEMP%\VirtualProgGuestTools.log.๐ก The
viogpu3dfolder of the VirtualProgTools drive keepsinstall.cmdanduninstall.cmdto switch by hand.uninstall.cmdalso turns 3D Acceleration off for the VM.
๐น๏ธ DirectX 12 (D3DMetal)
With DirectX 12 turned on as well, in the Display configuration, Windows apps and games can also use DirectX 12 (feature level 12_1), drawn by Apple's D3DMetal instead of the built-in DirectX 11 translation. It takes effect at the next start of the VM, and needs no change in Windows: the same 3D display driver does both.
โ ๏ธ DirectX 12 slows down the whole VM, not just games. D3DMetal is built for Intel Macs, so on Apple silicon it runs under Rosetta translation. With DirectX 12 on, everything Windows draws goes through it, including the desktop and DirectX 11 apps, and this takes CPU time away from the VM. Benchmarks, app launches and shutdown are noticeably slower. Turn it on only for apps or games that need DirectX 12, and keep it off otherwise.
- DirectX 12 needs Rosetta and D3DMetal, which is part of Apple's Game Porting Toolkit and is not included with VirtualProg. Set it up once in Settings > Windows > DirectX 12, or with Set Upโฆ under the switch. Without them the VM starts with DirectX 11 only, and the log says why.
- DirectX 11 apps and the Windows desktop then run on D3DMetal too. OpenGL is not affected.
dxdiagshows feature levels up to 12_1. DirectX 12 Ultimate (12_2: ray tracing, mesh shaders) is not available.
โ ๏ธ Limitations
- A VM with 3D Acceleration on cannot be suspended; shut it down instead.
- Auto Resolution and HiDPI pick the nearest standard resolution instead of the exact window size.
- The 3D driver has no hardware pointer, so Windows draws the pointer and it follows the Mac pointer a little behind.
- DirectX 12 needs the DirectX 12 setting; without it, apps that need DirectX 12 do not start.
- Prism gives Windows one monitor only, whatever the Monitors setting: Windows apps stay on one Mac screen.
๐ ๏ธ If it goes wrong
If Device Manager shows Microsoft Basic Display Adapter, or a Video Controller with a
yellow mark, a driver switch did not finish. Choose Update Guest Tools in the toolbar to run it
again. The logs are %TEMP%\VirtualProgGuestTools.log, and %TEMP%\VirtualProg3D.log for the
scripts in the viogpu3d folder.
๐งฉ Install the Display Driver
โ ๏ธ Skip this section if you ran
install.cmdfrom Install Guest Tools. It already installed the display driver and the resize service.
To install the VirtIO GPU display driver manually from the VirtualProgTools drive:
- Finish Windows Setup and sign in to the desktop.
- Right-click Start and choose Device Manager.
- Expand Other devices, right-click Video Controller, and choose Update driver.
- Choose Browse my computer for drivers, click Browseโฆ, select the VirtualProgTools drive
(for example
D:), open theviogpudo\w11\ARM64folder, and click Next. - Allow the installation if Windows asks. The screen may flicker briefly; the adapter then appears as Red Hat VirtIO GPU DOD Controller.
- Restart Windows if prompted. You can now pick any of your Mac monitor's resolutions in Settings > System > Display > Display resolution.
For a pointer that moves without delay (see Mouse Pointer), turn on the driver's hardware pointer in an administrator PowerShell, then restart Windows:
Get-PnpDevice -PresentOnly | ? InstanceId -like 'PCI\VEN_1AF4&DEV_1050*' | % {
$key = (Get-PnpDeviceProperty -InstanceId $_.InstanceId -KeyName DEVPKEY_Device_Driver).Data
Set-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Class\$key" HWCursor 1 -Type DWord }
Install the Resize Service
For Auto Resolution, Windows also needs the VioGpu Resolution Service, which ships with the display driver on the same disc. It switches Windows to the size VirtualProg asks for.
- Copy the
viogpudo\w11\ARM64folder from the VirtualProgTools drive to a permanent place, for exampleC:\Program Files\VioGpu. The service keeps running from there, also after the disc is ejected. -
Open PowerShell as administrator in that folder and run:
-
.\vgpusrv.exe statusshows whether it runs. It starts with Windows from now on. To remove it, run.\vgpusrv.exe -u.
๐ Networking
Windows VMs have one extra network setting, Adapter: USB (NCM), the default, uses
Windows' built-in driver; VirtIO (PCI) needs the NetKVM driver, which install.cmd installs.
To install it manually, use the NetKVM\w11\ARM64 folder on the VirtualProgTools drive, the
same way as the display driver.
๐ก After changing a Windows VM's MAC address, disable and re-enable the network adapter in Windows so that it uses the new address.
๐ก Windows Firewall blocks most incoming connections. To reach a forwarded port, such as Remote Desktop (3389), allow the app or port in Windows Security > Firewall & network protection.
See Network for all network options.
๐ IP Address and SSH
While a Windows VM runs, its IP address is shown in the VM list, the web dashboard, the iOS and
Android apps, Network Topology, and vpvm info. The SSH terminal in the web dashboard and the
mobile apps works too, once Windows' built-in OpenSSH Server is turned on:
- In Windows, open Settings > System > Optional features, select View features, and add OpenSSH Server.
-
In PowerShell run as administrator, start the server and make it start with Windows:
-
Sign in with your Windows user name and password. Save them in the VM's SSH configuration so you aren't asked each time.
๐ง Memory Balloon
With Memory Balloon on in the VM's CPU & Memory configuration, you can lower or raise the
memory available to a running Windows VM, as for Linux VMs โ from the ๐ง button in the VM
window toolbar, the VM list's context menu, the web dashboard, the iOS and Android apps, or
vpvm balloon. The setting applies the next time the VM starts.
Windows needs the VirtIO Balloon driver, which install.cmd installs. To install it manually, in
Device Manager right-click the PCI Device under Other devices, choose Update driver,
and select the Balloon\w11\ARM64 folder on the VirtualProgTools drive, the same way as the
display driver. Until the driver is installed, changing the balloon has no effect.
๐ก Not sure which device is which? Open the device's Properties > Details > Hardware Ids:
DEV_1002is the Memory Balloon andDEV_1003is the VirtIO Serial device used by the agent.๐ก Unlike Linux, Windows' Task Manager keeps showing the full configured memory. The memory the balloon takes back appears as In use inside Windows, while the Mac gets it back.
๐ Clipboard Sharing
With Share Clipboard on in the VM's Security configuration, you can copy and paste text and images between your Mac and Windows in both directions. The setting applies the next time the VM starts.
Files
With Copy/Paste Files also on (off by default), copy files and folders in Finder and paste them in Explorer, on the Windows desktop or in any Windows app that accepts pasted files; or copy them in Explorer and paste them in Finder, Mail and other Mac apps. It works in Prism and in the VM window. With it off, Mac files paste in Windows as their names, and files copied in Explorer stay in Windows; dragging files in Prism still works.
- Mac to Windows: nothing is copied until you paste; then Windows reads the files straight
from the Mac and shows its own copy progress, with Cancel. Paste in Explorer, on the desktop, or
in apps that take files pasted from Explorer; apps that only accept files from disk can't paste
them. Names Windows doesn't allow (such as ones with
:or?) are left out; see the VM's log. - Windows to Mac: with Copy and Paste Files from Windows set up once in Settings โ Windows, the files go on the Mac clipboard as soon as you copy them in Explorer, and nothing is copied until you paste. Finder then copies them from Windows with its own progress and Cancel, with no size limit. Paste while the VM is running; paste in Finder, Mail, or any Mac app that takes files.
- Without that setup, the files are copied to the Mac as soon as you copy them in Explorer, with a Copying to Mac panel for large files. Paste once the panel is gone. Files over 1 GB in total are not copied: drag them out of a Prism window or use a shared folder instead.
- Cut in Explorer pastes on the Mac as a copy; the file stays in Windows.
- Hidden files in folders are left out, as when dragging files.
Clipboard sharing is built into the VirtualProg agent, so there is nothing else to download. Install
the agent once with install.cmd, as described in Install Guest Tools; copy
and paste starts working as soon as the agent is running.
๐ก If copy and paste stops working, check that the agent is running: open Task Manager in Windows and look for VirtualProgAgent on the Details tab. If it is missing, run
install.cmdfrom the VirtualProgTools drive again.
๐ Time Sync
With Time Sync on in the VM's Security configuration, Windows' clock follows your Mac's. It is off by default and applies the next time the VM starts.
- โฑ๏ธ Windows starts with the right time, even without internet, when its time zone matches the Mac's; otherwise the agent corrects it a few seconds after you sign in.
- โฏ๏ธ After a pause, a suspend, or your Mac sleeping, the clock catches up within a minute.
- ๐ Windows keeps its own time zone: only the time is set, so a Windows VM in another time zone still shows its local time correctly.
- โ A time you set by hand in Windows is put back within a minute. Turn Time Sync off to keep a different time.
Time Sync needs the VirtualProg agent: run install.cmd from the VirtualProgTools drive, as
described in Install Guest Tools.
๐ Share Battery %
With Share Battery % on in the VM's Security configuration, Windows shows a battery in the taskbar that follows the Mac: its charge percentage and whether it is charging or on AC power. It is off by default and applies the next time the VM starts.
- ๐ Windows follows the Mac within about 10 seconds: percentage, charging, plugged in or on battery, and the time remaining.
- ๐ฅ๏ธ On a desktop Mac, Windows shows the battery as plugged in at 100%.
- ๐ Windows may hibernate or shut down when the Mac's battery runs low. Keep the setting off if that is not wanted.
๐จ๏ธ Share Mac's Printer
With Share Mac's Printer on in the VM's Security configuration, Windows gets one printer, Mac Printer (VirtualProg). It is off by default and applies the next time the VM starts.
- ๐จ๏ธ Print from any Windows app to Mac Printer (VirtualProg) and the Mac's print dialog opens with a preview: pick any Mac printer, copies, pages, or Save as PDF.
- ๐ Paper size, orientation and colour come from Windows; settings only one printer model has, such as trays or stapling, are chosen in the Mac's dialog.
- ๐ Several jobs open the dialog one after another.
- ๐ซ Turn the setting off and the printer is removed from Windows the next time the VM starts.
Share Mac's Printer needs the VirtualProg agent: run install.cmd from the VirtualProgTools
drive, as described in Install Guest Tools. It uses Windows' own
Microsoft Print to PDF driver, which Windows 11 includes.
๐ Share Notifications
With Share Notifications on in the VM's Security configuration, Windows' notifications appear in the Mac's Notification Center, under the app and VM they came from. It is off by default and applies the next time the VM starts.
- ๐ New notifications show within about a second; ones already in Windows when the VM starts are not repeated.
- ๐ Click a notification to open its app in Windows. Dismiss it on the Mac and it is removed in Windows too, and the other way round.
- ๐ท In Prism the Mac's notification replaces Windows' own pop-up. In the VM window, Windows' pop-up shows while the window is in front, and the Mac's while you work elsewhere.
- ๐ Focus, sounds and notification history follow your Mac's Notification settings.
Share Notifications needs the VirtualProg agent: run install.cmd from the VirtualProgTools
drive, as described in Install Guest Tools. If Windows does not allow
apps to read its notifications, VirtualProg says so once: turn on Settings โ Privacy &
security โ Notifications โ Allow apps to access your notifications in Windows, and
notifications start within a few seconds.
๐ USB Devices
With USB Passthrough turned on in Settings (macOS 27 Golden Gate or later), you can attach USB
devices connected to your Mac to a running Windows VM, as for macOS and Linux VMs. Use the USB
Devices button in the VM window, the VM's context menu, the Virtual Machine menu, the web
dashboard, the iOS and Android apps, or vpvm usb. Windows installs its own driver for the
device. While a device is attached, your Mac can't use it; detach it, or unplug it, to give it back.
๐ก USB webcams, microphones, speakers and headsets work, including a webcam's built-in microphone; Windows may take a few seconds to show the picture or start recording. To use the Mac's own camera, use the Camera setting. USB 3 drives use the standard USB mass-storage protocol in Windows.
To connect devices every time the VM starts, check them in the USB tab of the VM's configuration. Windows Setup can't install onto a disk connected as a USB device; choose Connect as โ SATA Disk to install Windows on a USB disk. A SATA disk stays connected until the VM shuts down, and the VM can't be suspended while it is connected.
๐ท Camera
Windows apps such as Teams, Zoom, and the Camera app can use your Mac's camera. Turn on Enable Camera in the Camera tab of the VM's configuration while the VM is shut down, then start it. Windows finds VirtualProg Camera and uses its own driver; nothing needs to be installed.
Use picks the camera: Mac's Preferred Camera (default) follows the camera macOS chooses, such as an iPhone with Continuity Camera when it is nearby, or you can pick one camera. While the VM runs, the camera button in the VM window's toolbar, or Devices โ Camera in the Prism menu, switches to another Mac camera until the VM stops. The Mac's camera turns on only while a Windows app uses it. Windows apps can choose 640ร480, 1280ร720, or 1920ร1080 at 30 frames per second.
When you start the VM from the Mac app, VirtualProg asks for camera access, as it does for the microphone; you can also grant it in Permissions. If access is denied, Windows gets a black picture; allow it in System Settings โ Privacy & Security โ Camera.
๐ Sound
Windows plays through the Mac's default output and records from its default microphone. To use other devices, such as a USB headset for calls while the Mac keeps its speakers, choose the Microphone and Speakers in the Sound tab while the VM is shut down. While the VM runs, the speaker button in the VM window's toolbar, or Devices โ Sound in the Prism menu, switches them until the VM stops.
๐ฝ Disks and CD/DVD
- Windows VMs support dynamic and fixed disks. You can add more disks in the Disk configuration.
- Each disk has an Interface. See Disk interfaces below.
- Add ISO images under CD/DVD. The Guest Tools disc is attached from the toolbar, not saved in the VM.
- ๐ Hot-plug CD/DVD and disks while running: use the ๐ฟ Attach Disks toolbar button. No restart is needed. Windows sees each device as a USB mass-storage drive.
- ISO: attaches as a read-only CD/DVD.
- IMG / ASIF: attaches as a disk image, read/write. Raw
.imgand Apple sparse.asif(dynamic) disks are both supported. The format is detected automatically from the file. - โ๏ธ Eject Disk: removes a device you attached this session. The eject is immediate, like pulling a USB drive without Safely Remove. Unsaved guest writes can be lost, so close files and flush first.
- Attaching a second CD/DVD can take a few seconds while Windows enumerates it and mounts the volume. This is normal.
- Attached disks are session-only and are cleared when the VM stops.
- Windows shows each attached device as Virtual Prog CD/DVD USB Device (or Virtual Prog Disk USB Device) in Device Manager.
- Explorer may need F5 to show new media after a replug.
๐ Disk interfaces
| Interface | Driver | Best for |
|---|---|---|
| NVMe (default) | Built into Windows | Everyday use; fast, and Windows always finds the disk. |
| VirtIO | VirtIO Storage, on the Guest Tools disc | The fastest, especially for heavy parallel work such as builds and databases. |
| SATA | Built into Windows | Compatibility only; CD/DVD drives and network block devices always use it. |
Measured with CrystalDiskMark on an M5 Mac (MB/s, read / write):
| Test | VirtIO | NVMe | SATA |
|---|---|---|---|
| Sequential 1 MB, 8 at once | 15400 / 17983 | 12565 / 9553 | 5289 / 4486 |
| Sequential 1 MB, one at a time | 11564 / 6493 | 6793 / 5241 | 5244 / 5124 |
| Random 4 KB, 32 at once | 231 / 229 | 162 / 262 | 153 / 147 |
| Random 4 KB, one at a time | 126 / 130 | 112 / 84 | 130 / 116 |
The test file (1 GB) fits in the Mac's memory, which caches disk images, so sequential speeds can exceed the Mac's SSD. Large transfers that don't fit run at the speed of the SSD.
NVMe is the default because it is fast and needs no driver, so Windows always finds its disk. Changing between NVMe and SATA needs nothing more than the setting.
Switch an installed Windows to VirtIO
Windows can only start from a VirtIO disk once it has set up the VirtIO Storage driver, so give it a VirtIO disk to set it up first:
- Install the Guest Tools, if they are not installed yet.
- Shut down Windows. In the Disk configuration, add a small disk (1 GB is enough) with Interface set to VirtIO.
- Start Windows, sign in, and wait a minute while it sets up the new disk.
- Shut down. Set the Windows disk's Interface to VirtIO and remove the small disk.
- Start the VM.
If Windows doesn't start, set the Interface back to NVMe; it starts as before.
Install Windows onto a VirtIO disk yourself
Unattended Install loads the driver by itself. When you install Windows yourself, give Windows Setup the driver from the Guest Tools disc:
- When you create the VM, set the disk's Interface to VirtIO.
- Start the VM. Windows Setup finds no disk under Select location to install Windows 11.
- Click Attach Disks in the VM window toolbar and choose Install Guest Tools. Windows now has the VirtualProgTools CD/DVD drive.
- In Windows Setup, click Load driver, then Browse. Open the VirtualProgTools drive,
select the folder
viostor\w11\ARM64and click OK. - Select Red Hat VirtIO SCSI controller and click Next. The disk appears; continue Setup.
- After Setup, install the Guest Tools.
๐ Shrink Image on Trim
A dynamic disk grows as Windows writes to it, but by default its file on the Mac does not shrink when you delete files in Windows. Shrink on Trim lets the disk file give that space back. It is set per disk in the Disk configuration, and is on by default for dynamic disks of new Windows VMs and for disks you add. Existing disks keep their setting.
How to use it
- New disks have Shrink on Trim on already. For an older disk, shut down the VM, open its Disk configuration, and turn it on. The option appears only for dynamic disks of Windows VMs.
- Start Windows and delete files as usual. Empty the Recycle Bin, because files in it still occupy space.
- Optionally send TRIM so Windows reports the free space right away, with
Optimize-Volume -DriveLetter C -ReTrimin PowerShell (as Administrator). Use only TRIM. Do not defragment; see the warning below. - Shut Windows down from the Start menu. VirtualProg compacts the disk file when the VM stops, so the final size is visible after a clean shutdown.
What to expect
- Space is released as Windows trims it, and the disk file is compacted when the VM stops.
- Shutdown can take longer after you delete a lot of data. Compaction moves the data that remains into the freed space, so after deleting tens or hundreds of gigabytes the VM may stay in the stopping state for a while before it closes. Let it finish. It always completes the whole job, so the file is fully shrunk afterwards.
- In Finder, Get Info shows two sizes. Size is the file's length and On Disk is the space it really uses. Watch On Disk.
- It works with Checkpoints and Linked Clones. Only the newest layer, the one Windows is writing to, shrinks. Earlier checkpoints are never changed.
- Space Windows trimmed while Shrink on Trim was off is also given back when the VM stops.
- Windows must send trim for any of this to happen. NTFS volumes do. FAT and exFAT volumes do not, so they never release space. Use Compact Disk for those.
Never defragment a VM that has checkpoints or linked clones. Defragmentation moves blocks of data to make files contiguous. Each moved block counts as a change and is written into the checkpoint's delta file. No new data is created, but that delta file can grow very large and fill the host disk. Use TRIM only:
Optimize-Volume -ReTrim, or the ReTrim option of Defragment and Optimize Drives, which does not move files. Shrink on Trim then reclaims the space without moving data.
Safety
- Force Stop is safe. If a VM is stopped before compaction finishes, nothing is lost and the disk is cleaned up the next time the VM starts.
- Turn the option off at any time. The disk keeps working and keeps its current size.
๐๏ธ Compact Disk
Windows never trims FAT32 and exFAT volumes, so the space of files deleted there stays in the disk file. Compact Disk frees it with the VM shut down. VirtualProg reads which clusters the disk's NTFS, FAT32 and exFAT volumes don't use, frees them in the disk file, and shrinks the file. It works whether or not Shrink on Trim is on.
- Delete the files in Windows and empty the Recycle Bin.
- Shut Windows down from the Start menu.
- Open the VM's Disk configuration and click Compact Diskโฆ, then Compact. When it is done, a message shows the disk file's size before and after, as Finder shows it, with the On Disk size in brackets.
What it changes
- Only space that holds no data: what no volume uses, and space Windows trimmed but keeps reserved, such as the hibernation file of Fast Startup. Files stay as they are.
- Only the newest layer of a disk with Checkpoints or a Linked Clone. Earlier checkpoints are never changed. A disk that linked clones depend on can't be compacted.
- A volume that was not shut down cleanly is left alone, and the result message says so. Start Windows, let it check the volume, and shut it down again.
- NTFS volumes are compacted only if Windows shut itself down (from the Start menu or the app's Shut Down) since the disk last changed. After a Force Stop, start Windows and shut it down again.
- If Windows is hibernated (Fast Startup or Hibernate), nothing is compacted, because Windows still has the volumes open. Turn off Fast Startup, or use Restart and then Shut down.
- BitLocker volumes, Storage Spaces and dynamic (spanned) Windows disks are not read.
Also available as vpvm config disk compact and in the web dashboard, iOS and Android apps.
โป Start, Shut Down, and Restart
| Action | Behavior |
|---|---|
| Start | Boots the VM and opens its window (or runs it headless if configured). |
| Shutdown | Sends a power-button request, so Windows shuts down normally. |
| Restart | Shuts Windows down and starts it again, returning to the normal window or Prism. |
| Stop | Stops the VM immediately. Unsaved work in Windows is lost. |
| Pause / Resume | Freezes the VM in memory and continues it later, as for macOS and Linux VMs. With Time Sync on, Windows' clock catches up on resume. |
| Suspend | Saves the VM's state to disk and stops it. Start (shown as Resume) continues where Windows left off. |
๐ก Shutting down or restarting from inside Windows (Start > Power) works the same way; the VM window closes when Windows has finished shutting down.
Pause and Suspend work from the VM window, the VM list, the menus, the web dashboard, the iOS
and Android apps, and vpvm pause / vpvm suspend. Mac Sleep, Mac Shutdown, VM
Close, Inactivity, and Battery % in Startup & Shutdown can pause or suspend a Windows
VM too; a VM paused by Mac Sleep resumes when the Mac wakes. Shutdown, Restart, and Stop also
work on a paused VM.
Floating Power Panels
On the Mac, Windows VMs show a compact status panel during power actions, in both the normal window and Prism. It temporarily hides the VM window, follows the app's light or dark theme, and does not stay above other apps. Headless VMs do not show a panel.
When available, the screen preview updates while Windows is running and shows the last captured frame when paused or suspended. Click the preview or the top-right expand button to open the full VM window, for example to answer a prompt blocking shutdown. After 90 seconds, a pending shutdown shows an attention message; VirtualProg does not force-stop it.
Paused and Suspended panels remain until you resume. Resume continues the VM; the close button only hides the panel. You can still resume from the Control Center.
Suspend
Suspending writes the VM's memory and device state next to its disks, so it takes a few seconds per GB of memory. A suspended VM keeps its disks, UEFI settings, and TPM state exactly as they were, so its configuration, snapshots, and checkpoints cannot be changed until you resume it.
- ๐ USB devices passed through to the VM, and disk images or ISOs you attached while it ran, are disconnected before the VM is saved and connected again when it resumes. Windows sees them unplugged and plugged in again, so eject USB drives in Windows first if they have unsaved work. A device no longer plugged into the Mac, or in use by another VM, stays disconnected.
- ๐ With Time Sync on, Windows' clock is set to the Mac's time when the VM continues. Without it, Windows corrects it the next time it syncs with an internet time server.
- A VM with 3D Acceleration on cannot be suspended.
- If the saved state cannot be restored (for example after an update that changed the virtual hardware), VirtualProg tells you, discards it, and starts Windows normally.
๐งญ Checkpoints and Linked Clones
Checkpoints and Linked Clones work for Windows VMs as they do for macOS and Linux VMs, on dynamic and fixed disks (macOS 27 or later). Stop the VM first.
A Windows checkpoint also keeps the VM's UEFI settings and TPM state as they were. Restoring a checkpoint puts them back with the disk, and a linked clone starts with the ones from its fork point.
๐ก A linked clone is an exact copy of Windows, with the same computer name. If it joins the same network as its parent, rename it in Windows (Settings > System > About).
๐ Sharing Files with Windows
Windows VMs can use Shared Folders from the VM configuration. You can also add or remove folders while the VM is running, and drag files into them. The folders are served by VirtIO-FS and are available inside Windows through WinFsp. For setup steps, see Windows Shared Folders.
You can also use Windows' built-in network sharing. Either option works while the VM is running and on the default NAT network.
๐ Share a Mac Folder with Windows
On the Mac, open System Settings > General > Sharing, turn on File Sharing, and click the
(i) button. Under Shared Folders, click +, choose the folder you want to share, and
give your Mac user Read & Write access. In Windows, open File Explorer, right-click
This PC, choose Map network drive, and enter \\192.168.64.1\FolderName, replacing
FolderName with the shared folder's name and 192.168.64.1 with your Mac's address on the VM's
network if it differs. Sign in with your Mac user name and password, and tick Reconnect at
sign-in to keep the drive available.
๐ช Share a Windows Folder with the Mac
In Windows, right-click the folder you want to share, choose Properties > Sharing > Share...
(or Advanced Sharing and tick Share this folder), add your Windows user with Read/Write
permission, and click Share. Make sure the network is set to Private under Settings >
Network & internet, and that File and Printer Sharing is allowed in Windows Security >
Firewall & network protection. Then find the VM's IP address in VirtualProg, or run ipconfig
in Windows. On the Mac, choose Finder > Go > Connect to Server (โK), enter
smb://<windows-ip>/ShareName, and sign in with your Windows user name and password.
๐ท Prism
Prism shows each Windows app in its own Mac window, with no Windows desktop around it. Windows work with Mission Control and window switching like Mac windows, and you can drag files between them and Finder both ways.
Set up (once)
Run install.cmd from Install Guest Tools. It installs the agent.
Enable Prism is on by default for new VMs; for an older VM, turn it on in the VM's
configuration under Prism and restart the VM.
Use Prism
- Click the Prism button in the VM window toolbar (it appears once the agent is connected). The VM window hides and your Windows apps open as Mac windows.
- A menu bar icon lists your Applications (type to search, press Return to open the first match), Start Menu, Power (Restart, Shut Down, Stop, Pause or Resume, Suspend), Devices (Install Guest Tools, attach or eject disks, shared folders, USB), Memory Balloon, Configure VM, and Exit Prism. The Dock menu has a shorter list: Applications, Windows, Start Menu, Power, Configure VM and Exit Prism.
- The Mac menu bar is named after the Windows app in front. Its Quit (Cmd+Q) closes that app's windows, as their close buttons would, and Hide (Cmd+H) minimizes them. To quit VirtualProg, click a VirtualProg window first or use the Dock.
- Prism sets the Windows resolution to fit your Mac screen while it is on, and restores it on exit.
- Power actions temporarily leave Prism and show a floating panel. After a restart or resume, or a cancelled shutdown, the VM returns to Prism. Expanding the panel does not change that choice; Exit Prism returns to the normal VM window instead.
Settings
| Setting | Effect |
|---|---|
| Enable Prism | On by default. Turns the feature on for this VM. Needs the agent in Windows. |
| Mac Window Frames | Gives windows a Mac title bar with close, minimize, and zoom buttons. |
| Hide Windows Taskbar | Hides the Windows taskbar while Prism is on. It returns when you exit. |
| Left Cmd as Ctrl | On by default. In Prism windows, Left Cmd works as Ctrl, so Cmd+C, Cmd+V, Cmd+Z and similar shortcuts work in Windows apps. Right Cmd stays the Windows key. Turn it off to use Left Cmd as the Windows key. Cmd+Q, Cmd+H and Cmd+M still go to the Mac menus: Quit and Hide act on the Windows app in front. |
| Start in Prism | Enters Prism as soon as the agent connects after the VM starts. |
| Monitors | Prism gives Windows one monitor per Mac screen, up to this many (1 to 4). Automatic (the default) allows as many as the Mac screens connected when the VM starts; to add a screen later, restart the VM or pick a number. Takes effect at the next start, once the Guest Tools are installed; a VM with 3D Acceleration gets one monitor. |
Good to know
- The green button takes the window to macOS full screen; Option-click it to zoom instead.
- Overlapping Windows apps can show each other's pixels. Click a window to bring it forward.
- With several Mac screens, Windows gets a monitor for each, arranged left to right like your screens (up to the Monitors setting). Drag a Windows app to another screen, or use Window > Move to another display when it has a Mac title bar, and Windows moves it to that monitor. A screen beyond the Monitors setting has no Windows monitor: apps moved there go back to the screen they came from.
- With 3D Acceleration on, Windows gets one monitor only, so Windows apps stay on one Mac screen.
- Prism uses one Dock icon (VirtualProg) for all Windows apps.
- ๐ Windows' notification pop-ups float at the bottom right of your Mac screen, above other apps. With Share Notifications on, they show in the Mac's Notification Center instead.
- Drag files or folders from Finder onto a Prism window. They are copied to
Downloads\VirtualProgin Windows: a file opens in that window's app, and a folder opens in Explorer with everything in it (hidden files and symbolic links are skipped). - ๐ค Drag files or folders from Explorer in a Prism window out to Finder, the Desktop or any Mac
app that takes files. They are copied from Windows when you drop them, with a progress panel and
Cancel; hidden and system files in folders (like
desktop.ini) are skipped. Files must be real files on a Windows disk: items inside a zip folder or an email attachment can't be dragged out.
๐ซ Not Available for Windows VMs
| Feature | Notes |
|---|---|
| Serial Ports | Not offered in the Windows configuration. |
