Changelog
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
WTMUXenvironment variable (formatted as<pipe-name>,<server-pid>,<session-id>) and aWTMUX_PANEvariable (%<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.Resizenow 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 indicatorLineFeedandReverseLineFeednow 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-renameis off or after an explicitrename-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
x64andARM64, 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/ARM64app 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.confor~/.tmux.conffor prefix key, keybindings, shell, and status bar settings - Custom key bindings via
bind/unbind, config file inclusion viasource-file, PowerShell scripts viarun-shell - COM-based plugin system with MSIX AppExtension discovery (
com.wtmux.plugincontract) - 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) andDeploy.ps1for loose-file registration