Run WebMux on Windows with WSL 2
WebMux does not run natively on Windows; it runs inside a WSL 2 distribution. On the Windows side, the tray app installs, starts, monitors and stops it, and the console client lets you start agents and attach to sessions from PowerShell or Windows Terminal. Phones and browsers reach the same sessions through WebMux as usual. The installer and tray menus are in Chinese, so menu items below are quoted as they appear, with an English gloss.
Prerequisites
- Windows 10 22H2 or later, or Windows 11 (amd64 / arm64). No administrator rights needed.
- WSL 2 from the Microsoft Store: the tray relies on wsl.exe --version, --exec, --cd and WSL_UTF8, which the older built-in WSL lacks. Run wsl --update in PowerShell to upgrade.
- At least one installed distribution. Without one, the tray status line shows “未检测到 WSL 发行版” (no WSL distribution detected).
Downloads
These files come from v0.10.2. Pick amd64 or arm64 to match your Windows architecture.
- Download
webmux-setup-windows-amd64.exe
Windows installer · x86-64 · 16.2 MiB
- Download
webmux-setup-windows-arm64.exe
Windows installer · ARM64 · 15.0 MiB
- Download
webmux-tray-windows-amd64.exe
Windows tray · x86-64 · 7.7 MiB
- Download
webmux-tray-windows-arm64.exe
Windows tray · ARM64 · 7.0 MiB
- Download
webmux-windows-amd64.exe
Console client · x86-64 · 6.6 MiB
- Download
webmux-windows-arm64.exe
Console client · ARM64 · 6.0 MiB
What the installer and tray do
Installer
- Installs for the current user
- No administrator rights. Default folder %LOCALAPPDATA%\Programs\WebMux\, with a “WebMux” Start menu entry and an uninstall entry in Apps & features.
- Starts the tray when you sign in
- “开机后自动启动 WebMux” (start WebMux at sign-in) is checked by default and writes the same startup entry as the tray's “登录时自动启动” (start at login) option.
- Bundles the matching server
- The installer places the Linux server for your architecture in the tray's download cache. It never touches WSL itself; on first use, choose “安装 WSL 中的 webmux” (install webmux in WSL) in the tray menu.
- Unsigned
- Windows SmartScreen may block it; choose “More info → Run anyway”. On an architecture mismatch the installer names the right package and exits without writing any files.
Tray
- Installs or upgrades webmux in WSL
- Fetches the Linux binary matching the tray version and the distribution's architecture, and uses it only if its SHA-256 matches the digest built into the tray. Falls back to the ghfast.top and gh-proxy.com mirrors when GitHub does not respond. It never installs in the background.
- Start, stop and restart
- Either tray-managed (running webmux serve in the distribution) or as a systemd user service, chosen automatically by default. Unexpected exits trigger a notification and a back-off restart.
- Status and diagnostics
- The menu status line shows whether WebMux is running, version mismatches and localhost forwarding problems. Instances you start by hand inside WSL appear as external, and the tray never stops them.
- Remote access
- In the default NAT networking mode, the “远程访问” (remote access) submenu can forward a Windows host address (Tailscale addresses first) to WebMux. Forwarding needs a healthy service with a token and stops when the tray exits.
- Public tunnel (Cloudflare)
- Turns on or off without a restart and without touching sessions. Each time, the tray asks you to confirm the risk and requires a WebMux token of at least 43 characters.
- Copy token and links
- The token is read from WSL only when you click. Copies stay out of Windows clipboard history and cloud clipboard, and are cleared after 60 seconds if unchanged.
Console client
webmux-windows-<arch>.exe brings run, attach, ls, open, status and version to PowerShell and Windows Terminal; the sessions run in WebMux inside WSL. Put it on your PATH and rename it to webmux.exe:
webmux run -- claude # create a session here and attach; Ctrl+] detaches
webmux ls # list sessions
webmux attach <ID> # rejoin the same running process
webmux open <ID> --browser # open the session link (no token in it) - Each connection goes through wsl.exe --exec webmux bridge to the local API, so no token is needed and WSL localhost forwarding or networking mode does not matter.
- The service must already be running in WSL (tray or webmux serve); the client does not start it.
- Without --cwd, the current directory is translated to a WSL path (C:\work → /mnt/c/work). For paths that cannot be translated, such as network shares, pass --cwd.
- While attached, Ctrl+C goes to the session and Ctrl+] detaches. Windows Terminal is recommended.
- Windows environment variables are not copied into WSL; only variables you list with --env are sent. PowerShell re-parses quotes, so use single quotes to pass $, ; and similar characters literally.
Upgrade and uninstall
- Upgrade the tray: run the new installer. It asks the running tray to quit as with “仅退出托盘” (quit tray only), so WebMux and its sessions keep running, then replaces the files and starts the new tray.
- Upgrade webmux in WSL: choose “安装 / 升级 WSL 中的 webmux” (install / upgrade webmux in WSL) in the tray menu. The running process keeps the old version until it restarts, and restarting ends every terminal session, so let your agents finish first.
- Uninstall: remove WebMux in Apps & features. This closes the tray and deletes the program, shortcuts and bundled server, but keeps tray settings (%APPDATA%\WebMux), tray logs (%LOCALAPPDATA%\WebMux) and webmux inside WSL. A running WebMux is not stopped; run webmux stop in WSL if needed.
Silent install and uninstall use /S (default options, including start at sign-in):
webmux-setup-windows-amd64.exe /S
"%LOCALAPPDATA%\Programs\WebMux\uninstall.exe" /S Troubleshooting
These guides are in Chinese.
- The tray reports “未检测到 WSL 发行版” (no WSL distribution detected)
- WebMux works in WSL but the localhost link fails on Windows
- Your phone cannot reach WebMux running in WSL
- WebMux started by the tray cannot find an agent command
- How copying the token and the clipboard behave
- Console client path translation and quoting
WebMux exposes a shell to the network as your user, listening on 0.0.0.0:7681 by default. For local use, listen on 127.0.0.1; for remote access, bind to a trusted VPN such as Tailscale or WireGuard. Do not expose it to the internet unless you deliberately use a tunnel and accept that the token is the only barrier. It is not a process sandbox, and restarting the service ends every terminal session. Read the security model