wtmux vs tmux
Windows Terminal Multiplexer (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) | ✅ | ✅ | Same CLI syntax |
| Windows (create/switch/rename) | ✅ | ✅ | Same prefix keys |
| Pane splitting (horizontal/vertical) | ✅ | ✅ | Same key bindings |
| Pane navigation (arrow keys) | ✅ | ✅ | |
| Pane zoom | ✅ | ✅ | prefix z |
| Status bar | ✅ | ✅ | Configurable format, colors, position |
| Mouse support | ✅ | ✅ | Modes 1000/1002/1003 |
| Config file | ✅ | ✅ | Reads ~/.tmux.conf (subset) |
| Custom key bindings | ✅ | ✅ | bind / unbind |
| 256-color and truecolor | ✅ | ✅ | |
| Unicode / wide characters | ✅ | ✅ | CJK, emoji |
| Window title (OSC 0/1/2) | ✅ | ✅ | |
| Automatic window rename | ✅ | ✅ | |
| Plugin system | Plugins via run-shell |
COM + built-in | Different architecture |
Not yet implemented in wtmux
| Feature | tmux | wtmux | Notes |
|---|---|---|---|
| Copy mode / scrollback | ✅ | ❌ | Planned |
| Pane resize | ✅ | ❌ | |
| Layouts (tiled, even-horizontal, etc.) | ✅ | ❌ | wtmux uses binary tree only |
Command-line mode (: prompt) |
✅ | ❌ | |
Scripting / send-keys |
✅ | ❌ | |
| Hooks | ✅ | ❌ | |
if-shell / run-shell conditionals |
✅ | Partial | run-shell works; if-shell is limited |
| Window/pane selection UI | ✅ | ❌ | |
| Buffer/paste buffers | ✅ | ❌ | |
| Environment variable passing | ✅ | ❌ | |
| SSH / remote sessions | ✅ | ❌ | tmux is commonly used over SSH |
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 a subset of variablesrun-shell— Execute commands at config load time
Many tmux options are silently ignored if not supported. Complex tmux configs will likely need adaptation.
See Configuration 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
- OSC 9 support — Desktop notifications and progress bar sequences
When to Use Which
- Use tmux if you’re on Linux/macOS, need SSH session persistence, rely on copy mode, or need the full tmux feature set.
- Use wtmux if you want a native Windows terminal multiplexer without WSL, prefer Native AOT performance, or want COM-based plugin extensibility.