Quick start — WSL2 (experimental)

Danger: Experimental and unsupported

Windows is out of scope for hal0 v1. hal0 can detect that it is
running under WSL2, but nothing in the installer, pre-flight, or doctor
accommodates or works around WSL’s limitations. Expect CPU-only
inference and a fair amount of manual setup. Use this path for
experimentation only — for real hardware acceleration run hal0 on
bare metal or in a
Proxmox.

What to expect

WSL2 runs a real Linux kernel, so the hal0 control plane, podman, and CPU
inference can work — but the accelerator story does not translate:

Capability Under WSL2
CPU inference Works (via the cpu-llm profile).
systemd Required by hal0, but off by default in WSL — you must enable it (below) or pre-flight fails.
ROCm Unavailable — WSL2 exposes no /dev/kfd.
Vulkan (iGPU) WSL2 presents the GPU through Microsoft’s /dev/dxg, not the native /dev/dri/renderD128 + /dev/kfd nodes hal0’s slots expect. Untested; do not rely on it.
XDNA NPU / FastFlowLM Unavailable — no /dev/accel/accel0 passthrough exists under WSL.

In practice, plan for a CPU-only appliance.

1. Enable systemd

hal0’s pre-flight fails hard if systemctl is not on PATH, and WSL2 does
not run systemd unless you opt in. Add this to /etc/wsl.conf inside your
distro (requires WSL ≥ 0.67.6):

# /etc/wsl.conf
[boot]
systemd=true

Then restart the distro from Windows (PowerShell):

wsl --shutdown

Reopen the distro and confirm systemd is up:

systemctl is-system-running   # "running" or "degraded" is fine; a hard error is not

2. Install prerequisites

sudo apt-get update && sudo apt-get install -y python3-venv python3-pip

hal0 needs Python ≥ 3.12 (Ubuntu 24.04 under WSL ships 3.12), the venv
module, and a container runtime (the installer auto-installs podman).

3. Install hal0

curl -fsSL https://hal0.dev/install.sh | sudo bash

The bootstrap and installer run exactly as on bare metal — verify the
tarball, install podman, build the venv, write systemd units, and start
hal0-api on port 8080. Because no GPU/NPU nodes are available, the
hardware probe falls back to CPU and the cpu device is seeded with the
cpu-llm chat profile, so you still get a working primary chat slot.

Note: Ports and reachability

hal0-api binds 0.0.0.0:8080 and OpenWebUI :3001. From Windows,
http://localhost:8080 is usually forwarded automatically by WSL2’s
localhost proxy. If not, use the distro’s IP from ip addr.

4. Verify

hal0 status
hal0 doctor

If hal0 doctor reports a systemd failure, re-check step 1 — that is the
most common WSL stumbling block. GPU/NPU checks will show nothing, which
is expected on this platform.

Next