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 Windows ConPTY
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 .\Deploy.ps1
Standalone binary

psmux has broader package manager coverage. wtmux is distributed through the Microsoft Store using MSIX packaging with execution alias registration.

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
Config file (.tmux.conf) ✅ (subset)
Custom key bindings ✅ (bind -n, named mouse keys, and one-shot -T tables)
256/truecolor
Sixel graphics
Unicode / wide characters
Copy mode / clear-history
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
Runtime option query (show-option)
Themes Partial (status bar only)
Plugin system ✅ (COM + built-in)
MSIX AppExtension discovery
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.

Architecture Differences

Both projects use the Windows ConPTY API and a client–server architecture. 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 a COM-based plugin API with MSIX AppExtension discovery, allowing language-agnostic plugins. 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 discovery — Plugins discovered through Windows app extensions
  • Built-in plugins — Prefix highlight, session save/restore included
  • 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
  • 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 a COM-based plugin system, MSIX packaging, or plan to extend the multiplexer with third-party plugins via AppExtension.