Skip to content

Releases: TykoDev/wslc-gui

WSL Container GUI for windows beta 0.1.0

Choose a tag to compare

@TykoDev TykoDev released this 14 Jul 04:54

The first public build. A Docker-Desktop-style GUI for WSL containers — one window over the
native wsl.exe and wslc.exe command surface.

The rule it's built on: the app invents no commands. Every button maps to a CLI invocation
Microsoft documents, or one your installed wslc binary proved it supports by printing it in
--help. Nothing is guessed. When it can't do something honestly, it disables the control and
tells you which verb is missing.

Before you install — this is a beta

Be clear-eyed about what has and hasn't been proven:

  • 166 unit tests pass, and CI compiles the exe on a clean Windows runner. But there are no
    integration or E2E tests.
    The executable, the WebView2 window, the system tray, the native
    file dialogs and every real wsl/wslc invocation are verified by hand.
  • Exercised on Windows 10 (19045) with WSL 2.9.3. Windows 11 paths are implemented and gated,
    but far less travelled.
  • wslc's command surface moves between WSL releases. The app probes --help at runtime to
    cope, but a build I've never seen may still surprise it.
  • It really does delete things. Unregistering a distribution destroys its filesystem; WSL
    shutdown kills every running distro. Both are double-gated and ask you to type the name — but
    there is no undo. Export first.

Don't point it at anything you can't afford to lose yet.

Requirements

  • Windows 10 build 19041+ (x64 only — that's Deno's only Windows compile target)
  • WSL 2. The container pages additionally need a WSL release that ships wslc — check with
    wslc version. Without wslc the app still runs, and the Resources and Settings pages work
    fully; Containers/Images/Deploy show an honest "unavailable" state.
  • WebView2 (ships with Edge). If it's missing, the app opens in your browser instead of failing.

Install

Two downloads — pick one:

Download Use when
wslc-gui.exe Normal. Just double-click it. On first launch it fetches two WebView2 DLLs from GitHub (once), then never needs the network again.
wslc-gui-v0.1.0-beta-offline.zip You're offline, air-gapped, or don't want that fetch. Unzip and run — the dll/ folder next to the exe makes launch fully offline from the very first run.

No installer, no runtime dependencies. The exe is self-contained (~79 MB).

What's in it

  • Containers — list, stop, start*, delete*, logs, inspect, exec, prune, with live wslc stats
    (CPU and memory parsed and merged into the table).

  • Deploy — Quick run with a live command preview: the exact wslc run line assembles as
    you type, and that is what gets executed. Plus Stack mode, which compiles a compose subset into
    an ordered plan, shows it before running it, and exports standard docker-compose.yaml. It
    imports docker-compose and Kubernetes manifests and tells you, item by item, what it could
    not honour.

  • Resources — distributions (resize, move, export, import, sparse, unregister), real
    ext4.vhdx paths and sizes read from the registry, container-session disks, swap, volumes*.
    Works with no wslc installed.

  • Images — pull with tag discovery (Docker Hub + OCI v2), inspect, delete*, prune.

  • Settings — a guided .wslconfig editor: every documented key with its description and
    default, Windows-11-only keys disabled with the reason shown, and a timestamped backup taken
    before every write.

  • System tray — minimize-to-tray, and Stop / Restart WSL from the context menu.

  • Capability-gated. container start/rm, explicit pull, image rm, the volume
    lifecycle and run --entrypoint exist in the WSL container API but aren't documented CLI verbs.
    The app enables them only when wslc --help on your machine actually lists them. If a button
    is greyed out, hover it — it names the verb your build is missing. That's not a bug; it's the app
    refusing to run a command it can't prove exists.

Known limitations

Honest list. None of these are bugs — they're the boundaries of what wslc can do, or of what
this build has earned the right to claim.

  • wslc cannot build images. A compose service with build: and no image: is rejected.
  • Private registries aren't supported. Tag discovery is anonymous; public repos only.
  • wslc volume prune only removes anonymous volumes — that's wslc's own semantics, not a
    limitation of this app. Unused named volumes survive.
  • Volumes have no size column. wslc volume inspect reports neither a size nor a mountpoint,
    so a per-volume byte count cannot be obtained — and is not invented. Those bytes are already
    counted in the Resources "Container storage" tile.
  • Container logs are a snapshot, not a follow. Exec is one command per run, not an interactive TTY.
  • The app can't report its own version yet. If you file a bug, please say you were on Beta 0.1.
  • Windows x64 only. No 32-bit, no ARM64.
  • It runs a loopback HTTP server on 127.0.0.1 to talk to its own UI. Every request needs a
    256-bit token generated fresh each launch, foreign origins are rejected, and only four binaries
    (wsl, wslc, reg, explorer) can ever be spawned. The reasoning is in the
    security model.

The most useful things you can report

  • Parsing bugs. wsl.exe/wslc.exe output varies by version, locale and host, and I can't
    test them all. If a distro name, container table or version pill renders wrong, paste the raw
    command output
    — it becomes a test fixture and the fix is usually immediate.
  • Your wslc --help, if you're on a WSL version I haven't seen (also container, image,
    run and volume --help). The capability model is built directly on that output.
  • Anything the app claims that isn't true. That's the one bug class this project can't tolerate.

Open an issue — the bug template asks for
the capability probe, which answers most "why is that greyed out?" questions outright.
Security issues: privately, please.


📖 Documentation ·
🏗 Architecture ·
🔒 Security model ·
📝 Changelog

Licensed GPL-3.0. Not affiliated with Microsoft or Docker.