Skip to content

Releases: amirlehmam/wmux

v0.8.7

15 Jun 15:39

Choose a tag to compare

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

15 Jun 09:45

Choose a tag to compare

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-instance focus handler: a stray wmux … launch (e.g. when wmux on PATH resolves to the GUI exe outside a wmux shell) now focuses the running window instead of opening a new one. Named WMUX_INSTANCE instances isolate their userData, so dev/prod still run side-by-side.
  • Rebuilt the shipped CLI (resources/cli/wmux.js) so it honors WMUX_PIPE again (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 profilescommandline + startingDirectory).
  • Project profiles via a committed .wmux.json at a workspace root (mirrors cmux's cmux.json).
  • Terminal profiles auto-cd and run startup commands; relative cwd resolves 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

10 Jun 01:18

Choose a tag to compare

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

09 Jun 19:31

Choose a tag to compare

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

08 Jun 08:09

Choose a tag to compare

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-navigate events by surfaceId so 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-side published_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 installautoDownload/autoInstallOnAppQuit are off; installing now requires an explicit user confirmation dialog.
    • Follow-ups tracked in #29: independent signature verification, Authenticode re-enable, build provenance.

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

05 Jun 14:08

Choose a tag to compare

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 → PropertiesUnblock (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

03 Jun 08:11

Choose a tag to compare

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

Full Changelog: v0.8.0...v0.8.1

wmux v0.8.0

01 Jun 11:35

Choose a tag to compare

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.after events 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:orchestrate can spawn opencode run agents in panes via WMUX_AGENT_CMD=opencode.
  • New CLI verbwmux agent-activity.

The OpenCode plugin no-ops entirely outside wmux, so it's safe wherever you run opencode.

Install

  1. Download wmux-0.8.0-win-x64.zip
  2. Right-click the zip → Properties → Unblock (or Get-ChildItem -Recurse | Unblock-File after extracting) to clear the Mark-of-the-Web
  3. 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

01 Jun 09:51

Choose a tag to compare

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

28 May 09:28

Choose a tag to compare

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 activeIndex since 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 localStorage on 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.json is 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