Changelog

All notable changes to wtmux are documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.0] - 2026-08-11

Added

  • Shells spawned inside wtmux now get a WTMUX environment variable (formatted as <pipe-name>,<server-pid>,<session-id>) and a WTMUX_PANE variable (%<pane-id>), so tools, scripts, and shell prompts can detect a wtmux session — mirroring tmux’s $TMUX/$TMUX_PANE. Inherited environment variables are preserved

Changed

  • The Store MSIX now packages the Native AOT output (self-contained ~3.6 MB native binary), reducing the package from ~103 MB to ~1.6 MB. Build with dotnet publish -p:PublishAppxPackage=true (requires the MSVC toolchain for AOT linking)

Security

  • Hardened the control named pipe against cross-user squatting: the pipe name is now scoped to the current user’s SID, the server applies a restrictive DACL granting access only to the current user and SYSTEM, and the client verifies the pipe endpoint’s owner before trusting it (refusing to attach to a spoofed server)
  • The client now connects with Identification-level impersonation so a spoofed server cannot impersonate the user
  • Defense in depth: server frames are sanitized before being written to the terminal, dropping dangerous escape sequences (OSC 52 clipboard, OSC 8 hyperlinks, DCS/APC/PM/SOS strings, and response-eliciting CSI queries) that a compromised server could otherwise inject

Fixed

  • Fixed a crash (IndexOutOfRangeException) when exiting an alternate-screen application (vim, less, etc.) after the terminal had been resized. TerminalBuffer.Resize now also resizes the saved main-screen grid and clamps the saved cursor/scroll region, so switching back to the main screen no longer indexes a stale, wrongly-sized buffer
  • #{prefix_highlight} no longer hard-codes ^B; it is now owned by the built-in plugin and renders the actual configured prefix key (e.g. ^A), no longer shadowing the plugin/config indicator
  • LineFeed and ReverseLineFeed now clear the pending auto-wrap flag, so a line feed after a glyph filled the last column no longer inserts an extra blank line before the next character
  • Windows are no longer auto-renamed when automatic-rename is off or after an explicit rename-window, and only the active pane’s title drives automatic renaming (previously any pane’s title change overwrote the window name)

[0.2.0] - 2026-08-04

Added

  • Build platforms for x64 and ARM64, each producing a self-contained build (the .NET and Windows App SDK runtimes are bundled with the app)

Changed

  • MSIX packaging now produces a self-contained x64/ARM64 app bundle
  • App now displays as “Windows TMUX”, and its MSIX package is associated with the Microsoft Store listing

[0.1.0] - 2026-05-10

Added

  • Client–server architecture with background server process and thin client connections over named pipes
  • Session management — create, list, attach, detach, and kill sessions
  • Window management — multiple windows per session with switching by number or next/previous
  • Pane splitting — horizontal and vertical splits with binary-tree layout engine
  • Pane navigation with arrow keys and zoom (fullscreen toggle)
  • VT100/xterm terminal emulator — cursor movement, SGR attributes (256 + truecolor), scroll regions, alternate screen, origin mode
  • OSC sequence support — window title (OSC 0/1/2), working directory (OSC 7), desktop notifications and progress bar (OSC 9)
  • Full UTF-8 decoding with wide character (CJK/emoji) support and correct cursor advancement
  • Mouse tracking passthrough (modes 1000/1002/1003, SGR encoding)
  • Configurable status bar with format string expansion, colors, and top/bottom positioning
  • tmux-compatible config file parser — reads ~/.wtmux.conf or ~/.tmux.conf for prefix key, keybindings, shell, and status bar settings
  • Custom key bindings via bind/unbind, config file inclusion via source-file, PowerShell scripts via run-shell
  • COM-based plugin system with MSIX AppExtension discovery (com.wtmux.plugin contract)
  • Built-in prefix highlight plugin (#{prefix_highlight}) and session save/restore
  • Conditional format variables (#{?client_prefix,yes,no})
  • Native AOT compilation — single-file ~3.5 MB binary, no runtime required
  • MSIX packaging with execution alias (wtmux.exe) and Deploy.ps1 for loose-file registration