Product documentation for wtmux 0.14.0.

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 tmux alias. wtmux supports a subset of tmux config syntax but does not alias itself as tmux.

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 notify with 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
  • tmux alias — Can be used as a drop-in tmux command
  • 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 msstore source), built-in plugins, or COM integrations discovered from installed AppExtensions when a new server starts. Runtime plugin enable/disable and reload callbacks remain unavailable.