Releases: fabperso/wimux
Release list
wimux v0.1.0
wimux is a terminal multiplexer built for Windows from the ground up.
tmux and zellij are Unix-first — on Windows they only really live inside
WSL, detached from the native shell. wimux speaks ConPTY, drives PowerShell
natively, and keeps your sessions alive when every client is gone.
This is the first public release. It works, and it has rough edges.
Install
scoop bucket add wimux https://github.com/fabperso/wimux
scoop install wimuxOr grab the installer (wimux-0.1.0-x64-setup.exe) or the portable zip below.
The installer bundles the daemon and starts it for you on first launch —
nothing else to set up.
What's in it
- Persistent, detached sessions. One per-user server owns your sessions and
survives any client closing.wimux new -s dev→ close the window →
wimux attach dev, everything is still running. - Three clients, one server. A lightweight TUI, a native GUI, and a fully
scriptable CLI (send-keys,capture-pane,list-panes) all attach to the
same daemon. - tmux-style muscle memory.
Ctrl-bprefix, splits, windows, zoom, a
vi-style copy mode with search, mouse support. - Browser panes. A pane can embed your dev server's preview — or drive a
real Chromium over CDP:navigate,snapshot(accessibility tree with
stable refs),click,type,eval. - AI sub-agent orchestration.
wimux agentspawns agents into their own
journaled panes;wimux batchfans a task out across isolated git worktrees
so you can compare attempts and keep the winner.
How it's built (the Rust part)
A Cargo workspace of five crates plus a Tauri app:
| Crate | Role |
|---|---|
wimux-protocol |
Wire protocol: serde + postcard, length-framed over Windows named pipes with overlapped I/O (so a client can read and write the same handle concurrently) |
wimux-vt |
Terminal/VT emulation, server-side |
wimux-server |
The daemon: sessions, windows, panes, ConPTY children via portable-pty, and the browser engine (chromiumoxide) |
wimux-client |
Shared attach logic |
wimux-cli |
The wimux binary |
The GUI is Tauri v2 (WebView2 + xterm.js), the TUI is crossterm. The
server is the single source of truth: it emulates the terminals and pumps raw
PTY output to whichever clients are attached.
Three problems from this cycle that were more interesting than expected:
- Display corruption with multiple panes. Splitting a pane sends a burst of
intermediate sizes to the PTY; full-screen TUI apps redraw at each one and
their incremental redraws leave orphaned glyphs behind. Capturing the
server-side VT proved the corruption existed before xterm.js ever saw it —
the fix was to debounce resizes so the PTY only ever sees the settled size. - Typing lag. Every PTY chunk became its own IPC message, flooding the
GUI's single JS thread. Coalescing consecutive same-pane output in the
daemon's pump fixed it. - A lost keystroke. Clicking a non-focusable sidebar item drops document
focus to<body>, and the new pane only gets focus after a server
round-trip — 500 ms during which everything typed vanished. Now a keystroke
with no focused field belongs to the active pane, and keys typed mid-switch
are buffered and replayed into the pane you switched to.
Verifying this release
The binaries are not code-signed (a publicly trusted certificate is a
recurring cost that's hard to justify for a free project), so SmartScreen will
warn on first run. Installing via Scoop avoids that entirely — it verifies the
hash itself.
Every artifact is listed in SHA256SUMS.txt, and each one carries a build
provenance attestation:
gh attestation verify .\wimux-0.1.0-x64-setup.exe --repo fabperso/wimuxKnown limitations
- Windows 10/11, x64 only.
- Embedded browser panes are
<iframe>s: sites that sendX-Frame-Optionsor
a restrictiveframe-ancestorswill refuse to render, and moving a pane in
the layout reloads the page. - Agent orchestration expects the
claudeCLI on yourPATH.
MIT licensed. Feedback and issues very welcome.