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 bindings
  • set -g status-left / status-right — Format strings with common variables, conditionals, comparisons, substitutions, padding/trimming, and inline #[fg=...,bg=...] styles; runtime set-option can override these per session
  • run-shell — Execute commands at config load time
  • if-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.