wtmux vs psmux
Both wtmux and psmux are native Windows terminal multiplexers that bring tmux-like functionality without WSL. This page compares the two projects.
Overview
| Aspect | psmux | wtmux |
|---|---|---|
| Language | Rust | C# (Native AOT) |
| Binary size | Small, single binary | ~3.5 MB, single binary |
| Runtime required | None | None (Native AOT) |
| PTY layer | Windows ConPTY | Bundled official stable Microsoft ConPTY runtime |
| IPC model | Client–server | Client–server |
| License | — | MIT |
| Minimum Windows | Windows 10 | Windows 10 2004+ (build 19041+) |
Installation
| Method | psmux | Terminal Multiplexer for Windows (wtmux) |
|---|---|---|
WinGet via Microsoft Store (msstore) |
Not documented | ✅ winget install --id 9PC5S2F8Z7XX --source msstore |
| WinGet Community Repository | ✅ winget install psmux |
Not available |
| Cargo | ✅ cargo install psmux |
Not available |
| Scoop | ✅ | Not available |
| Chocolatey | ✅ | Not available |
| Microsoft Store | ❌ | ✅ Store listing |
| Standalone binary download | ✅ | Not available |
psmux has broader package manager coverage. Terminal Multiplexer for Windows is currently available only through the Microsoft Store; WinGet's msstore source installs the same Store package, not a community-repository package. See the Store installation guide for requirements and verification.
Feature Comparison
| Feature | psmux | wtmux |
|---|---|---|
| Sessions (create/list/attach/detach) | ✅ | ✅; duplicate creation is rejected before shell launch and generated names remain unique |
| Automatic client environment refresh | Not documented | Whole-client snapshot on create/attach, session-scoped; preserves configured overrides and running processes |
| Windows (create/switch/rename/kill/last/move/swap/link/unlink/find) | ✅ | ✅ |
| Pane splitting | ✅ | ✅ |
| Pane navigation | ✅ | ✅ |
| Pane zoom | ✅ | ✅ |
| Pane rearrangement | ✅ | ✅ |
| Layouts (tiled, even-horizontal, even-vertical, main-horizontal, main-vertical) | ✅ | ✅ |
| Synchronize panes | ✅ | ✅ |
| Retain/respawn panes | ✅ | ✅ |
| Status bar | ✅ | ✅ |
| Status format language | ✅ | ✅ |
| Mouse support | ✅ | ✅ |
| Pane terminal input modes (keypad, bracketed paste, focus reporting) | Partial | ✅ |
| Windows WAM dialog-parent discovery | Not verified | Attached panes use an unambiguous visible terminal owner; detached or ambiguous windows require an application-supported fallback |
Config file (.tmux.conf) |
✅ | ✅ (subset) |
| Custom key bindings | ✅ | ✅ (bind -n, named mouse keys, and one-shot -T tables) |
| 256/truecolor | ✅ | ✅ |
| Per-pane OSC palette/default colors | Not documented | ✅ (OSC 4/10-19 set/query/reset, host consensus, isolated cell colors, active cursor restoration when the original is readable) |
| Sixel graphics | ❌ | ✅ |
| Unicode / wide characters | ✅ | ✅ |
| OSC 8 hyperlinks | ❌ | ✅ |
| Copy mode / clear-history | ✅ | ✅ |
| OSC 52 clipboard writes | ✅ | ✅ (bounded, acknowledged writes from eligible active panes and popup terminals; popups target their owning client; set-clipboard on or default-off application clipboard opt-in with external; off always blocks writes; no queries/readback) |
capture-pane / pipe-pane |
✅ | ✅ |
| Clock mode | ✅ | ✅ |
| Full paste buffer commands | ✅ | ✅ |
Command-line mode (: prompt) |
✅ | ✅ |
| Command sequences and aliases | ✅ | ✅ |
| Confirm-before prompts | ✅ | ✅ |
send-keys scripting |
✅ | ✅ |
| On-screen overlays | ✅ | ✅ (deterministic standalone attached-client targeting; display-popup --pane-directory opts into the underlying pane's reported filesystem CWD, with its launch-directory fallback; literal -d and wait mode remain unsupported) |
Runtime option query (show-option) |
✅ | ✅ |
| Themes | ✅ | Partial (status bar only) |
| Plugin system | ❌ | ✅ (COM + built-in) |
| MSIX AppExtension discovery | ❌ | ✅ (once per new server, bounded optional initialization) |
| DSC v3 global option resource | ❌ | ✅ |
Ships tmux alias |
✅ | ❌ |
wtmux's choose-client support is currently partial: it lists attached clients
and can safely detach the selected client, while HUP and suspend actions remain
deferred.
For differently sized attached terminals, wtmux fits the shared pane layout to the smallest terminal, including linked-window owners, and renders each client's status row independently. Larger clients may have unused space; configurable window-size policies and larger-canvas viewports are not implemented.
psmux's pane terminal input mode support is marked partial: its documentation describes host-native bracketed paste handling, but not propagating application-keypad mode or reporting focus in/out events to panes.
Architecture Differences
Both projects use Windows ConPTY and a client–server architecture. wtmux bundles the official stable Microsoft ConPTY runtime rather than depending on the inbox runtime's VT behavior. Its unpackaged layout includes native helper files, not just the main executable. Key differences:
- Language: psmux is written in Rust with zero-cost abstractions. wtmux is C# compiled with Native AOT — both produce single-file native binaries with no runtime dependency.
- Plugin system: wtmux has built-in plugins and a language-agnostic COM plugin API with bounded automatic discovery of installed MSIX AppExtensions at new-server startup. psmux does not expose a plugin API.
- Packaging: psmux integrates with community package managers (winget, scoop, choco, cargo). wtmux uses MSIX packaging with Windows execution alias and targets the Microsoft Store.
- tmux compatibility: psmux aims for high tmux command compatibility and ships a
tmuxalias. wtmux supports a subset of tmux config syntax but does not alias itself astmux.
Unique to wtmux
- COM plugin API — Language-agnostic extensibility via
[GeneratedComInterface] - MSIX AppExtension contract — Automatic discovery and bounded optional initialization at new-server startup
- Built-in plugins — Prefix highlight included out of the box
- Host terminal integration — Active-pane working-directory reports (OSC 7/9;9), notification requests (OSC 9 and OSC 777
notifywith explicit title/body), and taskbar progress (OSC 9;4) are forwarded to the host terminal - Sixel graphics — Bounded server-side image decoding and placement, re-emitted for Sixel-capable clients
- Policy-gated hyperlinks — OSC 8 links are modeled per-cell and bounded, validated against a configurable scheme/parameter allowlist, namespaced per pane, and independently revalidated by the client before ever reaching the host terminal
- Microsoft Store distribution — MSIX packaging for Store publishing
Unique to psmux
- Broad package manager support — winget, scoop, choco, cargo
tmuxalias — Can be used as a drop-intmuxcommand- Higher tmux compatibility — Supports more tmux commands and options
- Themes — Full theming support
When to Use Which
- Use psmux if you want the highest tmux compatibility on Windows, prefer a community package manager or standalone download, or want full theming.
- Use wtmux if you prefer installing from the Microsoft Store (including through WinGet's
msstoresource), built-in plugins, or COM integrations discovered from installed AppExtensions when a new server starts. Runtime plugin enable/disable and reload callbacks remain unavailable.