Back to Blog
Smart Home

HAOS on Unraid: Why (and How) I Run Home Assistant as a VM

1/21/2026
10 min read

I love Docker. I use it for almost everything on my Unraid server. But for Home Assistant? I treat it differently. Here is why I run HAOS as a VM, and how to set it up.

I love Docker. I use it for almost everything on my Unraid server. They all run in containers because it’s efficient and clean.

But for Home Assistant? I treat it differently.

I don’t run Home Assistant in a Docker container. I run the full Home Assistant Operating System (HAOS) as a Virtual Machine (VM) directly on Unraid.

Here is why I do it, and how you can set it up in about 10 minutes.

Why VM over Docker?

If you check the Home Assistant subreddit, this is the #1 debate. "Why waste resources on a VM when Docker is lighter?"

For me, it comes down to two things: Add-ons and USB Passthrough.

When you run the "Container" version of Home Assistant, you lose the Supervisor panel. That means no one-click Add-on store. If I want to run ESPHome, Z-Wave JS UI, or File Editor, I have to set up separate Docker containers for each one and network them together manually.

With a VM, I get the full HAOS experience. I can click "Install" on the Mosquitto Broker add-on, and it just works. Plus, restoring a full backup (including all those add-ons) is a single file upload. When my smart home controls the lights, locks, and garage doors, I want "appliance-like" stability, not a tinkering project.

The Setup

Getting HAOS running on Unraid is actually easier than composing a Docker stack. You just need to download the image and point a VM at it.

  1. Get the Image Go to the Home Assistant installation page and look for the KVM/QEMU image (usually a .qcow2 file). Download that to your desktop.

  2. Prepare the File Unraid needs this file to be in your domains share (or wherever you store vdisks).

    • Create a folder in your isos or domains share called "HomeAssistant".
    • Extract the .qcow2 file from the zip you downloaded.
    • Upload that file to the folder you just made.
  3. Create the VM In Unraid, go to the VMS tab and click Add VM. Select Linux.

Here are the settings I use for a rock-solid instance:

  • CPU Mode: Host Passthrough
  • Logical CPUs: 2 (You rarely need more unless you are compiling ESPHome heavily)
  • Initial Memory: 2048 MB (2GB is plenty for most starts)
  • Max Memory: 4096 MB
  • Machine: i440fx (Q35 works too, but i440fx is often default)
  • BIOS: OVMF
  • Primary vDisk Location: Select "Manual" and point it to the .qcow2 file you uploaded.
  • Network Bridge: br0

Important: Before you click create, uncheck "Start VM after creation." We need to make one tweak.

The USB Passthrough (Zigbee/Z-Wave)

This is the part that scares people, but Unraid makes it simple.

If you have a Zigbee or Z-Wave stick (like the Sonoff 3.0 or a Zooz stick), plug it into your server.

  1. Edit your new Home Assistant VM (switch to "XML View" in the top right if you need to, but the GUI usually handles this now).
  2. At the bottom of the VM template, look for the USB Devices section.
  3. Check the box for your specific stick.

Now, start the VM.

Onboarding

Give it about 2-3 minutes to boot up. Open your browser and go to http://<YOUR-UNRAID-IP>:8123.

You should see the Home Assistant onboarding screen. From here, you can restore a backup or start fresh. Since it's a VM, the IP address will be different from your Unraid server's IP (it gets its own via DHCP), so check your router if homeassistant.local:8123 doesn't work instantly.

Final Thoughts

I have been running this setup for over two years. It has survived Unraid updates, power outages, and my own bad configuration changes.

The best part? If I ever mess up Home Assistant so badly that it won't boot, I don't have to troubleshoot Linux dependencies. I just delete the vdisk, replace it with a fresh copy, and upload my backup. 15 minutes later, the house is back online.

If you have the RAM to spare, skip the Docker container. Treat your smart home like the critical infrastructure it is.