Windows (WSL2)
On Windows, the story is WSL2. kapsl is a Linux binary, and WSL2 is a real Linux environment, so a container runtime inside the distro — Podman, or Docker Desktop with WSL2 integration — just works. There is no native Windows runtime today: a native --runtime wsl is unexplored on the roadmap, and nothing on the Windows side needs installing beyond WSL2 itself.
Requirements
- Windows 10 (version 2004+) or Windows 11, 64-bit
- WSL2 enabled
- A container runtime inside the distro (Podman is the default path)
- ~1 GB of RAM (WSL2 reserves this for the VM)
1. Install WSL2
wsl --install
This installs WSL2 with the default distro (Ubuntu). Then:
wsl --set-default-version 2
wsl --update
wsl --shutdown
Restart your machine, then open Ubuntu:
wsl2. Install Podman inside WSL2
Inside the distro (not PowerShell):
sudo apt update
sudo apt install -y podman
Inside WSL2 you run rootless Podman directly in the distro — there is no podman machine (that is the macOS story, covered in Installation).
3. Install kapsl
Still inside the distro:
curl -fsSL https://kapsl.sh/install | sh
Or from source (see Installation for the canonical path):
git clone <the kapsl repository>
cd kapsl
cargo build --release
sudo cp target/release/kapsl /usr/local/bin/4. Run a tool
$ kapsl python --version
Python 3.14.7Performance note: /mnt/c
Files under /mnt/c (Windows' C: drive) are significantly slower than files inside the Linux filesystem. This is a WSL2 boundary-crossing cost, not a kapsl cost. For project work, keep the working tree inside WSL2:
mkdir -p ~/projects && cd ~/projects
If you must work on Windows-side files, the overhead is per file access, so batchy tools (builds, scans) feel it more than line-at-a-time tools.
Network
WSL2 uses its own network namespace with NAT. Outbound works by default; the usual caveats apply:
- localhost ports — a server the tool starts on
localhostinside WSL2 is notlocalhoston Windows. Bind to0.0.0.0and hit the WSL2 IP, or use port forwarding. - DNS — if name resolution misbehaves, check
/etc/resolv.confinside the distro; WSL2's DNS is virtual and can go stale after a reboot.wsl --shutdownand re-entry usually fixes it. - slirp4netns — rootless Podman inside WSL2 uses slirp4netns for container networking. This is normal; first-run slowness there is network setup, not a hang.
Memory
WSL2 caps itself at a share of the host's RAM by default. If large builds run out of memory, cap it explicitly in %UserProfile%\.wslconfig:
[wsl2]
memory=8GB
Then wsl --shutdown and re-enter.