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:

wsl

2. 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.7

Performance 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 localhost inside WSL2 is not localhost on Windows. Bind to 0.0.0.0 and hit the WSL2 IP, or use port forwarding.
  • DNS — if name resolution misbehaves, check /etc/resolv.conf inside the distro; WSL2's DNS is virtual and can go stale after a reboot. wsl --shutdown and 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.