# Windows setup
open-forge itself is OS-agnostic — the AI coding tool runs on your machine, and every deploy ultimately runs in Docker/Podman on Linux (either a cloud VM, WSL2, Docker Desktop's VM, or a bare-metal Linux box).
**For Windows, we strongly recommend WSL2.** Native Windows + Docker Desktop works for pure-Docker recipes, but anything that expects `bash`, `curl | sh`, or POSIX paths (most of them) is smoother from inside WSL2.
---
## Option A — WSL2 (recommended)
### 1. Install WSL2
Open **PowerShell as Administrator** and run:
```powershell
wsl --install
```
Reboot when prompted. By default this installs Ubuntu. If WSL was already installed and you want a fresh Ubuntu:
```powershell
wsl --install -d Ubuntu
wsl --set-default-version 2
```
Verify:
```powershell
wsl --status
wsl -l -v # should show Ubuntu, VERSION 2
```
### 2. Install Docker Desktop (with WSL2 backend)
- Download:
- During setup, keep **"Use WSL 2 based engine"** enabled.
- After install: Docker Desktop → **Settings → Resources → WSL Integration** → enable your Ubuntu distro.
### 3. Install your AI coding tool inside WSL2
Open the Ubuntu shell (`wsl` from PowerShell, or launch "Ubuntu" from the Start menu) and install one of:
- **Claude Code**: `curl -fsSL https://claude.ai/install.sh | bash`
- **Codex CLI**: `npm i -g @openai/codex`
- **Aider**: `pip install aider-chat`
- **Cursor / Continue.dev**: Install on Windows; point their integrated terminal at WSL.
### 4. Verify
Inside WSL2:
```sh
docker --version
docker run hello-world
git --version
curl --version
```
All four should succeed. If `docker` complains about "Cannot connect to the Docker daemon", re-check step 2 (WSL integration).
### 5. Install open-forge
In Claude Code (or equivalent):
```
/plugin marketplace add zhangqi444/open-forge
/plugin install open-forge@open-forge
```
Or for other platforms, follow [`docs/platforms/`](platforms/).
---
## Option B — Native Windows + Docker Desktop (no WSL)
Works for deploys that are *only* Docker (no shell scripts, no `curl | sh` steps). Many recipes will still work because Docker Desktop abstracts the Linux VM, but some (native-binary installs, Ansible-style scripts) expect a real POSIX shell.
1. Install Docker Desktop —
2. Enable **Hyper-V** OR the **WSL2 backend** (the installer will ask).
3. Install Git for Windows — — includes **Git Bash** which provides a minimal POSIX shell.
4. Install your AI coding tool (Claude Code, Cursor, etc.) per its Windows instructions.
5. Run all open-forge commands from **Git Bash**, not CMD or PowerShell.
6. Verify: `docker --version && docker run hello-world`.
If you hit "command not found: curl" or shell-script errors, switch to Option A (WSL2).
---
## Version requirements
- **Windows 10** build 19041+ or **Windows 11** (any) — required for WSL2
- **WSL kernel** 5.10.16.3 or newer (`wsl --update` to refresh)
- **Docker Desktop** 4.x or newer
- **Git** 2.30+
- **Node.js** 20+ (if using npm-distributed AI coding tools)
---
## Troubleshooting
### "Cannot connect to the Docker daemon"
- Docker Desktop is not running → start it.
- If running inside WSL2: Docker Desktop → Settings → Resources → WSL Integration → enable your distro → restart WSL (`wsl --shutdown` from PowerShell, then re-open terminal).
### "`curl: (7) Failed to connect to 127.0.0.1 port 7890`" or `gh`/`git` clone fails with a proxy error
Git was configured (often by earlier tooling) to use a local HTTP proxy that is no longer running. This is a common Windows gotcha — see issue [#27](https://github.com/zhangqi444/open-forge/issues/27).
Check whether a stale proxy is configured:
```sh
git config --global --get http.proxy
git config --global --get https.proxy
```
If a proxy is configured and its endpoint is not available, either **bypass** for one command:
```sh
git -c http.proxy= -c https.proxy= clone
```
…or **unset** the proxy for the session / permanently:
```sh
# Temporarily
git config --global --unset http.proxy
git config --global --unset https.proxy
# Or for one shell session
export HTTP_PROXY= HTTPS_PROXY=
```
Then retry your fork / clone. Same check applies to `gh` — it inherits Git's proxy settings.
### `gh auth login` fails with "device flow" timeout on corporate networks
Often the same proxy root cause. Run the proxy check above.
### WSL2 Ubuntu terminal is slow / `PATH` shows Windows entries
Windows `PATH` entries bleed into WSL by default (every directory!). Edit `/etc/wsl.conf` inside WSL:
```ini
[interop]
appendWindowsPath = false
```
Then `wsl --shutdown` and reopen.
### Line endings mangle shell scripts (`^M: command not found`)
Git for Windows defaults to `core.autocrlf=true`. In WSL2, set:
```sh
git config --global core.autocrlf input
```
For existing checkouts with bad line endings, run `dos2unix ` or `find . -type f -exec dos2unix {} +`.
### Ports 80 / 443 already in use
Docker Desktop won't bind them if IIS, Skype (old), or another service is listening. On Windows, run `netstat -ano | findstr :80` to find the PID and stop the offending service.
---
## See also
- [Platform-specific guides](platforms/) — Codex, Cursor, Aider, Continue.dev
- Main [README](../README.md)
- [Docker Desktop docs](https://docs.docker.com/desktop/windows/)
- [WSL2 docs](https://learn.microsoft.com/windows/wsl/)