WSL2 (Windows Subsystem for Linux 2) gives you a real Linux kernel on Windows. Running SnowLuma's Linux container inside it is the alternative route when you don't want native Windows QQ.
This page covers: install WSL2, get Docker running one of two ways, then start the canonical SnowLuma container.
If you already use / plan to use Docker Desktop, it ships WSL2 integration and is simpler — see Windows · Docker Desktop. This page is for people who want to install Docker Engine themselves inside a WSL distro, or who prefer working closer to Linux.
Open PowerShell as administrator and run:
This installs WSL2 plus the default Ubuntu distro. Reboot; on reboot Ubuntu starts for the first time and asks you to create a Linux username and password.
Confirm the version is 2:
Current Ubuntu-on-WSL ships with systemd enabled.
Official docs: https://learn.microsoft.com/windows/wsl/install
After installing Docker Desktop, go to Settings → Resources → WSL Integration and enable integration for your Ubuntu distro. Then the docker command works directly in the Ubuntu terminal, with the engine running on the Docker Desktop side. For install and system requirements, see Windows · Docker Desktop.
Official docs: https://docs.docker.com/desktop/features/wsl/
If you'd rather not install Docker Desktop, install native Docker Engine directly inside the Ubuntu distro. For the official apt repo (deb822 docker.sources format), see https://docs.docker.com/engine/install/ubuntu/.
For local / dev use only, the convenience script also works:
After adding yourself to the group you must reopen the terminal for it to take effect. Start Docker:
Pick Route A or B — don't run both. Docker Desktop's integration and a native dockerd inside the distro will fight each other if both are present.
With Docker ready, run the exact same command from the canonical Docker page in the Ubuntu terminal:
--cap-add=SYS_PTRACE and --security-opt seccomp=unconfined are required — the hook injects via ptrace, which the default seccomp profile blocks.
The full reference — Compose, env vars, volumes, multi-account, first login — all lives in Docker (Linux) deployment and is not repeated here.
WSL2 forwards container-listened ports to the Windows localhost by default, so you can use localhost directly in a Windows browser:
| URL | Purpose |
|---|---|
http://localhost:6081/ |
noVNC (scan QR for QQ) |
http://localhost:5099/ |
SnowLuma WebUI |
http://localhost:3000/ |
OneBot HTTP |
ws://localhost:3001/ |
OneBot WebSocket |
In rare setups localhost forwarding may not work (disabled, or a different networking mode). In that case get the WSL IP with wsl hostname -I and use that IP instead.
Change the VNC / noVNC default password (-e VNC_PASSWD=...), and never expose the noVNC / WebUI / OneBot ports raw on the public internet.
WSL2 is, after all, a Linux environment, so in principle you could run SnowLuma the Linux-manual way without Docker (bring up Xvfb / VNC / noVNC yourself, install linuxqq, grant node the ptrace capability, etc.). But that's clearly more involved — Docker is simpler — so this page recommends the container route.