Tracking issue for the Windows port. Not required for "done" — owner decision, 2026-08-04: later / best-effort. See architecture decisions §6 and ROADMAP Phase W.
Blocked on
Phase 2 — the HostCore + BrowserEngine extraction (#21) and typed errors (#22). Without that seam, Windows means a third hand-written copy of every command. Do not start before it lands.
Shape of the work
The WKWebView host is never ported. Windows runs the Chromium engine only.
Already portable
Protocol.swift, CLI.swift, AgentRuntime.swift (the injected JS is engine-agnostic), Diagnostics.swift, Flows.swift, CaptureFormats.swift, ScreenshotSeries.swift, MCP/main.swift, and Recording.swift modulo executable discovery.
Interim answer
Docker Desktop / WSL2 with the published image (#41). That is the documented Windows path until this ships.
Exit test
The Linux E2E scenario passes on a Windows runner against the Chromium engine, and winget install headless works.
Blocked on
Phase 2 — the HostCore + BrowserEngine extraction (#21) and typed errors (#22). Without that seam, Windows means a third hand-written copy of every command. Do not start before it lands.
Shape of the work
The WKWebView host is never ported. Windows runs the Chromium engine only.
AF_UNIX+getpeereid/SO_PEERCRED. Windows hasAF_UNIX, but no filesystem mode bits and noSO_PEERCRED, and the stale-socket probe does not map.%LOCALAPPDATA%with ACLs instead of/tmp/headless-<uid>at0700.CreateProcess+CreatePipe+SetHandleInformation. Chromium on Windows takes--remote-debugging-pipehandles viaSTARTUPINFO, not fds 3/4, sospawnChromiumneeds a Win32 rewrite.WaitForMultipleObjectsinstead ofpoll().CREATE_NEWfor theO_EXCLguarantee. Every "0600 in a 0700 dir" claim is POSIX-only today.SIGTERM/SIGINTdispatch sources.;PATH splitting..exeresolution under the same allow-list-not-PATH rule.getuid() != 0root refusal with an elevated-token check.Already portable
Protocol.swift,CLI.swift,AgentRuntime.swift(the injected JS is engine-agnostic),Diagnostics.swift,Flows.swift,CaptureFormats.swift,ScreenshotSeries.swift,MCP/main.swift, andRecording.swiftmodulo executable discovery.Interim answer
Docker Desktop / WSL2 with the published image (#41). That is the documented Windows path until this ships.
Exit test
The Linux E2E scenario passes on a Windows runner against the Chromium engine, and
winget install headlessworks.