Use case

Run a Mac mini as an always-on VM host

MacVisor turns a Mac mini into a home server for virtual machines. A background service runs each VM in its own process, starts it at login without opening the app, starts it again after a crash, and backs it up on a schedule. With power-failure restart and automatic login on, your VMs come back by themselves after a reboot or a power cut.

  • Apple Silicon Mac (M1 or later)
  • macOS 27 on the Mac
  • Automatic login for unattended reboots

30 days free, no key or payment details. Apple Silicon with macOS 27.

A stylised Mac mini with several headless VMs running on it, fed by a chain of power-failure restart, automatic login and Start at Login.

A Mac mini is quiet, small and frugal, which makes it a good home for the VMs you want running all the time: Home Assistant OS, a Linux box for your services, a router appliance, a macOS VM for builds. MacVisor runs them the way a hypervisor host does. A background service runs the VMs whether or not the app is open, and brings them back after a reboot without anyone at the keyboard.

Guests must be ARM64 builds, because MacVisor doesn't emulate x86. macOS allows two macOS VMs at a time on one Mac.

How MacVisor keeps VMs running

  • A background service owns the VMs. Each VM runs in its own process, so a crash affects only that VM. Closing the app or installing an app update doesn't stop running VMs.
  • Start at Login has the service start a VM at every login, whether or not the app opens. Turn it on in VM Settings → General, or with mvz autostart <vm> on.
  • Headless VMs run with no window. Start one with mvz start <vm> --headless, or turn on Headless in VM Settings → Display so it never has a display. mvz open <vm> shows the window of a VM started without one.

Desktop VM apps are mostly built for someone at the screen. UTM's documentation says its app must stay open while a headless VM runs, and Parallels Desktop 27.1 deprecated its "Start when Mac starts" option.

Set the Mac up for unattended reboots

A VM only comes back after a reboot if every step before it holds. Once any VM is set to start at login, the dashboard shows an Unattended Auto-Start panel that checks each one.

Power-failure restart, FileVault, automatic login, the background service, and per-VM auto-start each gate the one after it.

StepWhere to set itIf it's missing
Restart after power failuresudo pmset autorestart 1The Mac stays off after a power cut
FileVault offSystem Settings → Privacy & SecurityBoot stops at the unlock screen
Automatic loginSystem Settings → Users & GroupsNo login session, so nothing starts
Background serviceLogin Items & Extensions, or the dashboardNo VM starts
Start at LoginVM Settings → General, mvz autostartThat VM stays stopped
No sleep when idleSystem Settings → Energy → Prevent automatic sleeping when the display is off, or sudo pmset -c sleep 0VMs stop until the Mac wakes

MacVisor doesn't keep the Mac awake by itself, so the last row matters on a server.

The network firewall doesn't wait for a login. MacVisor's helper applies the last firewall policy at boot, so guests come up filtered. See Always-on host for the details.

Make a VM a service

mvz autostart homeassistant on        # start at every login; add --window to open its window
mvz ha homeassistant on               # start it again after a crash or a failed start
mvz ha web on --watchdog              # also restart a guest that stops responding
mvz hooks web check set 'curl -fsS -m 10 http://web.mvz/health'   # add --restart once you trust it
  • High availability (VM Settings → General → Startup → High Availability) restarts a VM that crashes, stops with an error or fails to start, with growing waits and at most 10 restarts an hour. It honours stops you ask for, from MacVisor or from inside the guest.
  • VM Watchdog restarts a guest that stopped responding, as the MacVisor Agent reports it, or a QEMU guest agent in appliances that can't run MacVisor's. It needs one of the two, and acts only while high availability is on.
  • A health check is your own command that exits 0 while the VM is healthy. It can tell you when it keeps failing, and restart the VM at most once a day.
  • Hooks run your commands on the Mac after a VM starts or stops, also with the app closed, and give an appliance its own shutdown command.

See High availability, VM Watchdog and health checks and VM hooks.

Logout, restart and updates

What VMs do when the Mac logs out or restarts is one setting for the whole Mac: Settings → General → Logout and Shutdown, or mvz service at-logout.

mvz service at-logout              # show the current choice
mvz service at-logout shutdown     # the default; or suspend

Shut Down VMs asks each guest to shut down, and VMs set to start at login boot fresh next time. Suspend VMs saves their memory and resumes them at login. On a server, shut down is the safer choice. A suspend unplugs passed-through USB devices for a moment, and a saved session doesn't restore after a macOS or MacVisor update, so those VMs start from disk anyway. See When you log out or restart the Mac.

Networks your other devices can reach

The Default MacVisor Network and NAT are reachable only from the Mac. For services the rest of your home uses:

  • Bridge the VM to the Mac's Ethernet port, so it's a device on your LAN with an address from your router: VM Settings → Network, or mvz set <vm> --network bridged:en0 (networksetup -listallhardwareports names the Mac's interfaces).
  • Use a custom network with DHCP reservations, a network port forward that other devices reach, and a firewall that the Mac enforces with its own packet filter, outside the guests.
  • Reach VMs by name from the Mac: ssh web.mvz or curl http://web.mvz:8080 follows the VM when its address changes.
mvz networks create services
mvz set web --network services
mvz networks firewall services on --outbound deny --allow out:udp:53 --allow out:tcp:443

The firewall filters IPv4 only. See Networking, Custom networks and Network firewall.

USB radios and drives

A VM can take a USB device from the Mac, such as a Zigbee or Z-Wave radio or a USB disk. Remember it once and MacVisor attaches it whenever the VM runs, window or not, and again after you unplug and plug it in.

mvz usb list homeassistant
mvz usb attach homeassistant 10c4:ea60      # attach now, and at every start
mvz usb remember homeassistant "ZWA-2"      # remember while the VM is stopped

In the app, click USB in the VM window's toolbar. The first time, macOS may ask on the Mac's screen whether to allow the accessory for MacVisor VM. On a Mac you reach over SSH, answer it over Screen Sharing. While a VM has a device, the Mac can't use it. See USB devices.

Backups and snapshots

Snapshots live inside the VM's package, so they don't protect you from losing the drive. Time Machine leaves VMs out. MacVisor's own backups copy the whole VM to another drive or a share, daily or weekly, also while it runs.

mvz set homeassistant --backup-to /Volumes/T7/Backups    # daily at 03:00, keeps the newest 7
mvz set web --auto-snapshots daily                        # disk-only snapshots while it runs
mvz backups list homeassistant

The same settings are in VM Settings → Backup. See Backups and Automatic snapshots.

Manage it over SSH

Over SSH, mvz covers creating and running VMs, snapshots, clones, networks, firewall rules and licensing. In an SSH session on the Mac:

mvz license trial                  # start the free trial, or:
mvz license activate               # prompts for your key
mvz list
mvz console router                 # a Linux or FreeBSD VM's serial console; Control-] detaches

These still need someone at the Mac or Screen Sharing: approving the background service, the network helper and Local Network access the first time, a VM's display, the app-only features such as VLAN interfaces and network port forwards, and restoring a suspended session, which needs an unlocked screen. See Managing a Mac you aren't sitting at.

Limits

  • A logged-in session. The background service runs per user, while that user is logged in. An unattended host needs automatic login.
  • No remote console yet. There's no web console, VNC or remote API. Use SSH and Screen Sharing.
  • USB prompts on the Mac's screen. macOS may ask before handing a device to a VM.
  • Memory can't be overcommitted. vCPUs can be shared out, memory can't. The dashboard compares what you've assigned with what the Mac has.
  • A sleeping Mac freezes its VMs. Keep the host awake in its energy settings.

When MacVisor isn't the right choice

  • You need VMs running before anyone logs in, or with FileVault on through a reboot. MacVisor needs a user session. A dedicated hypervisor such as Proxmox VE on a small x86 PC boots straight into its VMs.
  • You need x86 guests. Apple Silicon runs ARM64 guests only. Again, an x86 box fits better.
  • You want a web dashboard to manage the host from a browser. MacVisor is managed from its app, Screen Sharing and mvz over SSH today.

If those don't apply, download MacVisor and use the free 30-day trial on the Mac mini. A one-time Pro license keeps it running after that.

FAQ

Common questions

More in the documentation and known limitations.

Do MacVisor VMs keep running when the app is closed?

Yes. MacVisor's background service owns the VMs and runs each one in its own process, so closing the app, quitting it or updating it doesn't stop them. A VM set to Start at Login is started at every login whether or not the app opens.

Will my VMs come back after a power cut?

Yes, when every step of the chain is set: the Mac restarts after a power failure (sudo pmset autorestart 1), FileVault is off so the boot doesn't stop at the unlock screen, automatic login is on, the background service is allowed, and each VM has Start at Login on. The dashboard's Unattended Auto-Start panel checks each step.

Can I run MacVisor on a Mac mini with no display attached?

Yes. VMs can run headless, and over SSH the mvz command line creates and runs VMs, takes snapshots, manages networks and firewall rules, and activates the license. First-run approvals, a VM's display and macOS's USB accessory prompt need someone at the Mac or a Screen Sharing session.

Does an always-on host work with FileVault on?

MacVisor runs with FileVault on, but an unattended reboot then stops at FileVault's unlock screen. Nobody logs in, so no VM starts until someone unlocks the Mac. Choose based on who can physically reach the Mac.

Can a VM on the Mac mini use a Zigbee or Z-Wave USB stick?

Yes. Pass the device through and remember it, and MacVisor attaches it whenever the VM runs, including after a start at login with no window, and again after the stick is unplugged and plugged back in. Audio devices and webcams can't be passed through.

Is there a web console or remote API for a headless Mac?

Not yet. Reach the Mac over SSH for mvz and the serial console of Linux and FreeBSD VMs, and use macOS Screen Sharing when you need a VM's display.

Which MacVisor license do I need for a home server?

Any of them. Every license has every single-Mac feature, including the background service, high availability, backups and the network firewall. A one-time Pro license covers one or two Macs, and the free 30-day trial has everything.

Run your Mac like a virtualization host.

macOS, Windows 11, Linux and FreeBSD VMs that keep running with the app closed, with snapshots, networks, backups and the mvz command line.