wtmux vs tmux
wtmux is inspired by tmux and aims for a familiar experience on Windows. This page compares the two, highlighting what's shared, what's different, and what's not yet implemented.
Architecture
| Aspect | tmux | wtmux |
|---|---|---|
| Platform | Unix/Linux/macOS | Windows 10 2004+ |
| Language | C | C# (Native AOT) |
| PTY layer | Unix pseudo-terminals | Windows ConPTY API |
| IPC | Unix domain sockets | Named pipes |
| Binary size | ~1 MB (varies) | ~3.5 MB (single file, no runtime) |
| Runtime | None | None (Native AOT) |
Both use a client–server model: a background server manages sessions, and thin clients connect to render output.
Feature Comparison
Supported in wtmux
| Feature | tmux | wtmux | Notes |
|---|---|---|---|
| Sessions (create/list/attach/detach/kill/rename/has/switch-client) | ✅ | ✅ | Same CLI syntax plus prefix $ / ( / ) / L |
destroy-unattached option |
✅ | ✅ | Runtime-settable; destroys only after an attached session becomes unattached |
| Windows (create/switch/rename/kill/last/move/swap/link/unlink/find) | ✅ | ✅ | Same common prefix keys, plus prefix l, prefix f, and prefix . |
| Pane splitting (horizontal/vertical) | ✅ | ✅ | Same key bindings |
| Pane navigation (arrow keys) | ✅ | ✅ | |
| Pane resize | ✅ | ✅ | prefix Ctrl+arrow (1 cell), prefix Alt+arrow (5 cells) |
| Pane zoom | ✅ | ✅ | prefix z |
| Pane rearrangement | ✅ | ✅ | swap-pane, rotate-window, last-pane, break-pane, join-pane, and move-pane; default prefix !, prefix ;, prefix Ctrl+o |
| Predefined pane layouts | ✅ | ✅ | select-layout supports tiled/even/main layouts; next-layout and prefix Space cycle them |
| Synchronize panes | ✅ | ✅ | synchronize-panes; prefix S toggles the active window |
| Retain/respawn panes | ✅ | ✅ | remain-on-exit, respawn-pane, and respawn-window |
| Window/pane/buffer selection UI | ✅ | ✅ | prefix w (window/pane tree), prefix = (buffers), prefix q (pane numbers) |
| Attached-client chooser | ✅ | Partial | prefix D or choose-client from the attached command prompt lists all attached clients and detaches with Enter or d; HUP and suspend actions remain deferred |
| Copy mode / scrollback | ✅ | ✅ | prefix [; scroll, select, copy, and clear-history |
| Capture and pipe panes | ✅ | ✅ | capture-pane supports visible/scrollback ranges, paste buffers, -p, -J, and best-effort -e; pipe-pane supports -I, -O, and -o |
| Clock mode | ✅ | ✅ | prefix t / clock-mode; any key exits |
| Paste buffers | ✅ | ✅ | prefix ] / prefix =; set-buffer, show-buffer, save-buffer, load-buffer, paste-buffer, list-buffers, delete-buffer, and choose-buffer |
Command-line mode (: prompt) |
✅ | ✅ | prefix : runs any wtmux/tmux command while attached |
| Command sequences and aliases | ✅ | ✅ | Top-level ; command sequences, escaped \;, and command-alias including common supported tmux short aliases |
confirm-before prompts |
✅ | ✅ | Server asks the attached client for y/n confirmation before running the command; prefix x confirms kill-pane |
Scripting / send-keys |
✅ | ✅ | Named keys, C-/M- modifiers, literal text (-l), pane targets |
| On-screen overlays | ✅ | ✅ | display-message including -a, mouse/keyboard-driven display-menu, and ConPTY-backed display-popup |
| Environment variable passing | ✅ | ✅ | set-environment / show-environment; WTMUX / WTMUX_PANE |
| Runtime option query | ✅ | ✅ | show-option / show-options, including -g global option queries |
| Status bar | ✅ | ✅ | Configurable format, colors, position |
| Status format language and inline styles | ✅ | ✅ | Common variables, conditionals/comparisons, substitutions, padding/trimming, #{t:...} time formatting, window/pane loops, and inline #[fg=...,bg=...] styles; session loops remain deferred |
| Mouse support | ✅ | ✅ | Wheel scrollback, click-to-select-pane, right-click paste, pane drag-select, border drag-resize; app passthrough (modes 1000/1002/1003) |
| Config file | ✅ | ✅ | Reads ~/.tmux.conf (subset) |
| Custom key bindings | ✅ | ✅ | bind / unbind, -n / -T root, one-shot named tables via bind -T and switch-client -T, and named mouse keys |
if-shell / run-shell conditionals |
✅ | ✅ | Evaluated synchronously at config load |
| 256-color and truecolor | ✅ | ✅ | |
| Sixel graphics | ✅ | ✅ | Decoded server-side, modeled in pane buffers, and re-emitted for Sixel-capable clients |
| Unicode / wide characters | ✅ | ✅ | CJK, emoji |
| Window title (OSC 0/1/2) | ✅ | ✅ | |
| Automatic window rename | ✅ | ✅ | |
| Activity / silence / bell monitoring | ✅ | ✅ | monitor-activity, monitor-bell, monitor-silence, visual alerts, and #F/#{window_flags} status flags |
| DSC v3 global option resource | ❌ | ✅ | Declarative Windows configuration for global options |
| Plugin system | Plugins via run-shell |
COM + built-in | Different architecture |
Not yet implemented in wtmux
| Feature | tmux | wtmux | Notes |
|---|---|---|---|
| Hooks | ✅ | ❌ | (#6) |
Remaining advanced key bindings (-r, -N, list-keys, send-prefix) |
✅ | Partial | Root and custom one-shot key tables are supported; repeatable bindings, notes/listing, and send-prefix remain (#102) |
Control mode (-CC) |
✅ | ❌ | External terminal integration (#108) |
| Session groups | ✅ | ❌ | Niche tmux feature |
For the full list of tracked feature-parity gaps, see the Feature Compare issues.
Configuration Compatibility
wtmux reads ~/.wtmux.conf or ~/.tmux.conf using a subset of tmux configuration syntax. Supported directives include:
set -g— Global options (prefix, default-shell, mouse, status bar, etc.)bind/unbind— Key bindingsset -g status-left/status-right— Format strings with common variables, conditionals, comparisons, substitutions, padding/trimming, and inline#[fg=...,bg=...]styles; runtimeset-optioncan override these per sessionrun-shell— Execute commands at config load timeif-shell— Conditionally apply config based on a shell command's exit status
Many tmux options are silently ignored if not supported. Complex tmux configs will likely need adaptation.
See configuration.md for the full list of supported options.
Unique to wtmux
- Native AOT compilation — Single-file native binary, no .NET runtime required
- MSIX packaging — Install via Windows execution alias
- COM plugin API — Language-agnostic extensibility with MSIX AppExtension discovery
- Built-in plugins — Prefix highlight, session save/restore included out of the box
- ConPTY integration — Uses the modern Windows pseudo-console API directly
- Host terminal integration — Active-pane working-directory reports (OSC 7/9;9), notification requests (OSC 9), and taskbar progress (OSC 9;4) are forwarded to the host terminal
- Server-modeled Sixel — Graphics are decoded into pane buffers and clipped/repositioned during server-side frame composition
When to Use Which
- Use tmux if you're on Linux/macOS, or need the full tmux feature set — hooks, control mode, and the complete command/key-binding surface.
- Use wtmux if you want a native Windows terminal multiplexer without WSL, prefer Native AOT performance, or want COM-based plugin extensibility.