Releases: amirlehmam/wmux
v0.8.7
What's new
🖱️ Drag-and-drop files into the terminal (#33)
You can now drag a file from Explorer (or any app) and drop it onto a terminal pane — the file's full path is inserted at the cursor, just like in the old Windows Terminal and the macOS Terminal. Paths containing spaces are automatically quoted, and dropping multiple files inserts all their paths separated by spaces.
The path is inserted via bracketed paste, so it works correctly inside TUIs like Claude Code, vim, etc.
Install: download wmux-0.8.7-win-x64.zip, extract, and run wmux.exe.
After downloading, right-click the zip → Properties → Unblock (or run Get-ChildItem -Recurse | Unblock-File in the extracted folder) to clear the Mark of the Web.
v0.8.6
Addresses the feedback in #32 (thanks @kevmtt!).
🔔 Notification sounds now play (#32.1)
The Sound setting was a no-op — notificationPrefs.sound was never read and resources/sounds/ was empty. wmux now ships a default chime and plays it on every notification (toast / taskbar flash / pane ring), gated on the Sound setting (Default / None).
🪟 wmux browser open no longer spawns a second window (#32.3)
- Added a single-instance lock +
second-instancefocus handler: a straywmux …launch (e.g. whenwmuxon PATH resolves to the GUI exe outside a wmux shell) now focuses the running window instead of opening a new one. NamedWMUX_INSTANCEinstances isolate theiruserData, so dev/prod still run side-by-side. - Rebuilt the shipped CLI (
resources/cli/wmux.js) so it honorsWMUX_PIPEagain (the artifact had drifted behind source).
🚀 Quick-launch profiles in the + dropdown (#32.4)
Configure one-click tab presets next to each pane's +:
- Model:
{ name, icon, type, shell, cwd, startupCommands[], url }. - Global profiles in Settings → Profiles (incl. one-click import of Windows Terminal profiles —
commandline+startingDirectory). - Project profiles via a committed
.wmux.jsonat a workspace root (mirrors cmux'scmux.json). - Terminal profiles auto-
cdand run startup commands; relativecwdresolves against the workspace.
📦 Winget distribution (#32.2)
Added winget manifests + an auto-publish workflow (portable-zip install, no code-signing required). See winget/README.md. Cert/Store trust remains a separate owner decision.
Install: download the zip, extract, right-click → Unblock (or Get-ChildItem -Recurse | Unblock-File), run wmux.exe.
wmux v0.8.5
Fixed
Ghost cursor / stray inverse blocks in TUIs — real root cause (#23, #30)
Buffer-level debugging finally identified the true culprit behind the ghost block-cursor artifacts in Claude Code and other TUIs: the blocks were in the terminal buffer itself, not a rendering bug. Windows' built-in ConPTY layer garbles fast TUI repaints and leaves stale inverse-video cells behind. That's why the renderer-side fixes in 0.8.2 (sync cursor) and 0.8.4 (WebGL) reduced but never fully eliminated the artifacts — every renderer was faithfully painting an already-corrupt buffer.
wmux now uses node-pty's bundled modern conpty.dll (from the Windows Terminal project) instead of the OS-inbox ConPTY, which fixes the repaint diffing at the source. If the bundled dll cannot load, wmux falls back to the inbox ConPTY automatically.
Also in this release:
- Terminal renderer fallbacks (WebGL → Canvas → DOM) now log their reason to the console instead of degrading silently.
Install
Download the zip, right-click → Unblock, extract, run wmux.exe.
Full Changelog: v0.8.4...v0.8.5
wmux v0.8.4
Fixed
-
Terminal rendering: phantom spaces and overwritten text while typing (#30, follow-up to #23)
Typing Chinese (or even plain English) in TUIs like Claude Code could leave a blank cell between wide characters (e.g.确 认) or show stale, overwritten text in the input line — even though the data sent to the app was correct. Root cause: wmux drew terminals with xterm.js's Canvas renderer, which is deprecated upstream and mispaints rows under load (wide-CJK glyphs, stale dirty rows).Visible panes now use the maintained WebGL renderer (same engine as the VS Code terminal). The GPU context is attached only while a pane is on screen and released when hidden, so Chromium's per-process WebGL context limit — the original reason wmux moved to Canvas — is never hit. Canvas (with the v0.8.2 sync-cursor patch) remains as an automatic fallback if WebGL is unavailable or the GPU resets.
Install
Download the zip, then right-click → Properties → Unblock before extracting (Windows Mark-of-the-Web), and run wmux.exe.
Full Changelog: v0.8.3...v0.8.4
v0.8.3
wmux 0.8.3
Merged PRs (browser pane) — thanks @schroldgames
- #24 Remove hardcoded 800px max width on the browser pane (now scales to
windowWidth − 400). - #25 Scope
wmux:browser-navigateevents bysurfaceIdso the right pane navigates. - #26 Persist browser pane width across restarts (auto-save + named sessions).
Bug fixes
- #27 CDP bridge is now ownership-aware: closing one browser pane no longer tears down another open pane's CDP connection, and the pane you click becomes the active CDP target ("focused wins" instead of "last dom-ready wins").
- #28 Added a discoverable dropdown next to the tab-bar + to open a Browser or Markdown surface — no more hidden keyboard shortcut required.
Security
- #29 Hardened the auto-update channel:
- Quarantine window — a release is not auto-downloaded/installed until it has been public for N days (default 3, configurable via
WMUX_MIN_RELEASE_AGE_DAYS), using GitHub's server-sidepublished_at. This denies an attacker the instant fan-out that makes a poisoned release lethal, and gives time to yank a bad build. - No silent install —
autoDownload/autoInstallOnAppQuitare off; installing now requires an explicit user confirmation dialog. - Follow-ups tracked in #29: independent signature verification, Authenticode re-enable, build provenance.
- Quarantine window — a release is not auto-downloaded/installed until it has been public for N days (default 3, configurable via
After downloading: right-click the zip → Unblock (or run Get-ChildItem -Recurse | Unblock-File after extracting) to clear Windows Mark-of-the-Web.
wmux v0.8.2
Fixes
- Terminal cursor now tracks typing under the Canvas renderer (#23). In TUIs like Claude Code the block cursor could lag behind the text you typed. The Canvas renderer repainted the cursor on the blink timer's animation frame, which gets throttled in wmux's busy Electron renderer. The cursor is now repainted synchronously on every move (mirroring the WebGL renderer), so it stays glued to the caret while blinking still works.
After downloading, right-click the zip → Properties → Unblock (or run Get-ChildItem -Recurse | Unblock-File in the extracted folder) to clear Windows' Mark-of-the-Web.
Full Changelog: v0.8.1...v0.8.2
wmux v0.8.1
Fixes
- #19 — Settings now persist across updates. Font family/size, theme, and shortcut customizations used to reset whenever you installed a new version. They lived in renderer
localStorage, which Chromium scopes to the page origin — and because wmux ships as a portable zip extracted to a new folder per version, that origin changed every update and the saved data was orphaned. Settings now live in%APPDATA%\wmux\settings.json(stable across updates). Your existing settings are migrated automatically on first launch. - #20 — Workspaces remember their folder. After
cd-ing into a directory, closing and reopening wmux now reopens that workspace's terminals in the same folder instead of$HOME. The working directory is included in the auto-saved session. - #22 — New startup toggles. Settings (Ctrl+,) now lets you disable the welcome screen (Workspace tab) and the browser panel auto-open on startup (Browser tab).
Also included
- #18 — drop zones no longer block terminal clicks after switching workspaces.
- #21 — tmux copy-mode now writes to the Windows clipboard via OSC 52.
Install: download the zip, right-click → Unblock (or run Get-ChildItem -Recurse | Unblock-File in the extracted folder), then run wmux.exe.
What's Changed
- fix(pane): prevent drop zones from blocking clicks after workspace switch by @schroldgames in #18
- feat(osc52): support tmux clipboard writes via OSC 52 by @schroldgames in #21
New Contributors
- @schroldgames made their first contribution in #18
Full Changelog: v0.8.0...v0.8.1
wmux v0.8.0
wmux 0.8.0 — Official OpenCode compatibility
wmux now works with OpenCode (SST opencode, v1.2.6+) at full parity with its Claude Code integration, via OpenCode's official plugin API.
What's new
- Live activity sidebar for OpenCode — a bundled plugin (auto-installed to
~/.config/opencode/plugin/wmux.js) reports tool use and idle/done state into the same sidebar wmux already uses for Claude. - Tool/hook tracking — OpenCode
tool.execute.afterevents flow into wmux (parity with Claude PostToolUse). - Auto-injected wmux instructions — the wmux CLI usage block is written into
~/.config/opencode/AGENTS.md(marker-delimited, never overwrites your own rules, idempotent). - Orchestration with OpenCode workers —
/wmux:orchestratecan spawnopencode runagents in panes viaWMUX_AGENT_CMD=opencode. - New CLI verb —
wmux agent-activity.
The OpenCode plugin no-ops entirely outside wmux, so it's safe wherever you run opencode.
Install
- Download
wmux-0.8.0-win-x64.zip - Right-click the zip → Properties → Unblock (or
Get-ChildItem -Recurse | Unblock-Fileafter extracting) to clear the Mark-of-the-Web - Extract and run
wmux.exe
🤖 Generated with Claude Code
What's Changed
- feat: official OpenCode compatibility (sidebar, hooks, AGENTS.md, orchestration) by @amirlehmam in #17
Full Changelog: v0.7.22...v0.8.0
wmux v0.7.22
Fixes
-
Mouse wheel scroll now works inside Claude Code (and other full-screen TUIs) over PowerShell, local and SSH (#16).
v0.7.21 intercepted the wheel to always scroll wmux's scrollback, but full-screen apps like Claude Code, vim and less run on the terminal's alternate screen buffer, which has no scrollback — so the wheel did nothing. wmux now only takes over the wheel on the normal buffer; on the alternate buffer it lets the app handle scrolling, so the wheel works again inside Claude.
Install: download the zip, extract, and run wmux.exe. After download, right-click the zip → Properties → Unblock (or run Get-ChildItem -Recurse | Unblock-File) to clear the Mark of the Web.
Full Changelog: v0.7.21...v0.7.22
wmux v0.7.21
Fix: sessions actually persist across restarts (#15)
Thanks to @wanwanzaizai for reporting #15.
What was wrong
The 30s rolling auto-save was writing %APPDATA%\wmux\sessions\session.json correctly the whole time — but the launch path only used that file for window bounds. The renderer only restored named sessions (those saved via the "Save Session" UI), so unless you manually saved, every restart spawned a fresh "Session 1" with new UUIDs. Your previous layout, tabs, and splits looked like they were "reset".
What's fixed
- Workspaces / splits / tabs / shell choice now restore from the auto-saved file on launch. The previously-active workspace stays selected (via
activeIndexsince IDs are regenerated on rehydrate). - Theme, font, cursor style, scrollback, custom color schemes, notification settings, browser prefs, sidebar prefs, and custom keyboard shortcuts are now persisted to
localStorageon every change — so they stick across restarts without ever opening "Save Session". - The Save Session UI still works for explicit named snapshots; it's just no longer required for "I want my setup back".
Install
Download wmux-0.7.21-win-x64.zip, extract, run wmux.exe. After download, right-click the zip → Properties → Unblock to clear Windows Mark-of-the-Web (or run Get-ChildItem -Recurse | Unblock-File in the extracted folder).
Notes
- Terminal scrollback content is still not persisted across restarts (PTYs are killed on quit). Restoring scrollback would require serializing several MB per pane and is out of scope for this fix.
- On version upgrades,
session.jsonis still cleared as a deliberate clean-start policy. Use "Save Session" if you want a layout to survive upgrades.
🤖 Built with Claude Code (Opus 4.7)
Full Changelog: v0.7.20...v0.7.21