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 wtmux
WinGet winget install psmux ❌ (planned)
Cargo cargo install psmux
Scoop
Chocolatey
Microsoft Store ✅ (MSIX packaged)
MSIX sideload
Standalone binary

psmux has broader package manager coverage. wtmux is distributed through the Microsoft Store using MSIX packaging with execution alias registration; MSIX sideloading and standalone execution are both supported by that same packaging, but the Microsoft Store is currently wtmux's only publicly supported way to acquire it — there is no separate public sideload package or standalone-binary download today.

Feature Comparison

Feature psmux wtmux
Sessions (create/list/attach/detach)
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
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; 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 ✅ (menu/popup overlays support standalone invocation with deterministic attached-client targeting)
Runtime option query (show-option)
Themes Partial (status bar only)
Plugin system ✅ (COM + built-in)
MSIX AppExtension discovery Not yet enabled at server startup
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. Automatic discovery of installed MSIX AppExtensions is not yet enabled. 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 — Packaging metadata for plugins; automatic discovery is planned
  • 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 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 installing via winget/scoop/choco, or want full theming.
  • Use wtmux if you want MSIX packaging or built-in plugins. Its COM contracts support future third-party integrations, but installing an AppExtension does not yet load it automatically.