Repository navigation
Releases: pirogom/pmux
Release list
v0.1.14 - amd64(x64)
What's Changed
Features
- Infinite commit history β The Git sidebar now paginates the commit log with anchor-based pagination instead of a fixed 30-commit limit. Scroll to the bottom or press Load more to browse the full history; merge side branches are preserved and pages stay stable as new commits arrive.
- Line numbers in the diff viewer β Diff previews and commit details now show real source line numbers (old/new) in a sticky gutter. The backend emits proper hunk headers, so numbering reflects actual file lines rather than the modified excerpt.
Maintenance
- Upgraded Wails to v2.15.0 and regenerated the runtime bindings.
v0.1.13 - adm64(x64)
Release Notes - v0.1.13
Bug Fixes
-
Git: Fix CRLF files falsely reported as modified on Windows β go-git's
Worktree.Status()andAdd()hash worktree files raw and do not implement
core.autocrlf. With autocrlf enabled, files checked out with CRLF never
matched the LF blobs in the index, so tracked files stayed "Modified" forever
and staging stored CRLF blobs that diverged from official git.Changes:
- Add
autocrlf.go: resolve effectivecore.autocrlf(local/global/system),
binary detection via NUL heuristic, CRLFβLF clean filter, and
git-equivalent worktree blob hashing GetStatus: re-verify flagged paths when autocrlf is enabled (not only when
core.filemodeis ignored)Stage/StageAll: rewrite staged index entries to LF blobs
(fixupCleanFilter)- Tests: CRLF-on-disk clean detection, autocrlf-disabled control, LF blob
staging
- Add
v0.1.12 - amd64(x64)
v0.1.12
β¨ New Features
-
π Notes (Per-Workdir Memo): Added a Notes popup, opened from the π button in the top toolbar, for writing memos tied to the active pane's working directory.
- Multiple notes per working directory, stored as JSON under
~/.pmux/note/(same storage pattern as Todo). - A default note is always present: opening Notes on a workdir with no notes auto-creates one, and deleting all notes always leaves one empty note behind.
- Powered by the Quill v2 rich text editor with a WYSIWYG toolbar: font size, headings (H1βH6), bold / italic / underline / strikethrough, text & background colors, ordered / bullet lists, alignment, blockquote, code block, link, and clear formatting.
- Notes auto-save ~0.5s after you stop typing and when the popup is closed.
- Multiple notes per working directory, stored as JSON under
-
Text Selection & Copy in Git Views: Text in the Git sidebar (History list, changes list, operation output) and in the diff / commit popup viewers can now be selected, dragged, and copied (Ctrl+C / right-click). Copied diff content preserves line breaks.
-
Multiline Todo Items: Todo item editing now supports line breaks β press Shift + Enter to insert a newline (Enter still commits the edit).
π¨ UI / UX Improvements
- SHUTDOWN button: The sidebar's shutdown button was changed from a β icon to a clear SHUTDOWN label with red styling, avoiding confusion with other close (β) buttons.
- Todo popup close behavior: The Todo List popup now closes only via its β button (removed click-outside and Escape-to-close behavior).
π Documentation
- README (English & Korean) updated with the Notes feature guide and tech stack (Quill v2).
v0.1.11 - amd64(x64)
What's Changed
π Bug Fixes & Improvements
- Git: Ignore
core.filemodedifferences and preserve executable permissions on
Windows - Fixed an issue where clean files with executable (
+x) permissions (e.g. scripts
created on Linux/macOS) were falsely reported as modified on Windows whencore. filemode = false. - Preserved executable mode flags in the Git index when staging modified files on
Windows to prevent accidental stripping of+xpermissions.
Full Changelog: v0.1.10...v0.1.11
v0.1.10 - amd64(x64)
v0.1.10 Release Notes
β¨ New Features
π Profile Folders & Drag-and-Drop Organization
Organize profiles into folders right from the PROFILES sidebar tree:
- Create folders with the π Add Folder button β a tree root item is added and inline rename mode starts immediately
- Drag & drop profiles onto folders to make them sub-items, or drag profiles/folders to freely reorder them
- Move out of folders by dropping onto root-level profiles or the empty area below the list
- Rename in place β double-click a folder name (
Enterto confirm,Escto cancel) - Safe deletion β deleting a folder automatically moves all profiles inside back to the root list
- Folders expand/collapse with per-folder state preserved across restarts
- Fully backward compatible with existing
config.jsonfiles
β Per-Workdir Todo List
- Todo panel scoped to the active pane's working directory
- Add/delete todos and drag to reorder, persisted per workdir
π οΈ Refactors & Fixes
- Refactored frontend β split monolithic
main.jsinto feature modules (profiles.js,workspace.js,git.js,todo.js, ...) - Fixed the Add Folder button toggling the PROFILES section collapse
- Frontend now falls back to the local process config for folders when the background daemon is stale
π Full Changelog
01102a2 feat(todo): add per-workdir todo list with drag reorder and delete-all
6505b15 refactor(frontend): split monolithic main.js into feature modules
fbf0990 feat(profile): add profile folders with drag-and-drop organization
de4cbcd docs: document profile folders in README
v0.1.9 - amd64(x64)
pmux v0.1.9 Release Notes
π― Highlights
- tmux-style multi-client viewport sizing β multiple clients attached to
the same session now keep their own window sizes without constantly
redrawing the terminal for everyone. - Git dashboard popup viewers with diff minimap β commit details and
per-file diffs open in dedicated popup windows with line-level syntax
highlighting and a minimap band for change navigation. - Open Work Folder β open the active pane's working directory in the OS
file manager from the workspace toolbar.
πͺ Multi-Client Terminal Sizing (tmux model)
Previously, every client resize request resized the single ConPTY, so when
clients with different window sizes attached to the same session, the
terminal was redrawn over and over based on whichever client was active.
This release implements tmux's window-size largest semantics:
- Each pane keeps one canonical terminal size = the largest attached
client. The ConPTY is resized only when the canonical size changes
(a larger client attaches/resizes, or the largest client leaves). - Each client reports its own viewport size and renders the shared
screen as a top-left anchored viewport when its window is smaller
than the canonical size (a badge showsviewport WxH / CxR). - Switching focus between clients of different sizes no longer triggers a
redraw; only genuine canonical-size changes repaint the terminal. - A newly attached client always propagates its real viewport size to the
server (with retries), and clients that have not reported a size yet can
never collapse the session's terminal size. - New
pane-sizecontrol frames are sent before history replay on attach
and broadcast to all clients whenever the canonical size changes.
π Bug Fixes
- ConPTY resize actually happens now β the canonical-size bookkeeping
previously short-circuited the debounced resize call, leaving the real
terminal stuck at its old size until a manual refresh. - Tests can no longer overwrite your real config β removed the global
config-directory cache inpkg/configso test runs can never write test
data into~/.pmux/config.json, regardless of test order. - Canonical size can no longer collapse to zero when a client that has not
reported its viewport yet is attached.
π§ͺ Testing
- New canonical-size policy tests: largest-client growth/shrink, detach
re-sizing, invalid-resize guards,pane-sizebroadcast ordering, and a
regression test asserting the real ConPTY is resized end-to-end.
Full Changelog: v0.1.8...v0.1.9
v0.1.8 - amd64(x64)
Release Notes β pmux v0.1.8
Release date: 2026-08-25
π¦ What's New
pmux v0.1.8 introduces a fully self-contained Git dashboard and a much more pleasant diff-reading experience.
π Integrated Git Dashboard (pure Go)
- The Git integration is now 100% pure Go (go-git) β no system
gitexecutable required. - Branch status, working-tree changes, staging state, commit history, branch switching, staging/unstaging, commits, and Fetch/Pull/Push all run through the embedded library.
- push/pull reuse existing credentials:
- SSH remotes: OpenSSH Authentication Agent or
~/.sshkeys (withknown_hostsverification) - HTTPS remotes: Windows Credential Manager (Git Credential Manager) or a
~/.git-credentialsfile - When no credentials are found, the panel explains how to fix it.
- SSH remotes: OpenSSH Authentication Agent or
β¨ Highlighted Diff Viewer in a Popup
- Diff previews open in a separate popup modal instead of the sidebar β close with β,
Esc, or clicking the backdrop. - Line-level syntax highlighting: added lines, removed lines, hunk headers, and file metadata are color-coded.
π Commit Detail View
- Clicking a commit hash in the History list opens the popup with:
- Full commit metadata (hash, author, date, message)
- The complete diff against its parent (empty tree for root commits)
β±οΈ Configurable Refresh Interval
- The Git panel refresh interval (1β10s) is now persisted in the config and restored on startup.
- Changes are synchronized in real time across all connected clients.
π Bug Fixes
- Git refresh interval now applies correctly:
- Saved value is restored on launch (previously always reset to the default 3s)
- Changes from other clients update the timer immediately
π Documentation
- README (EN/KR) updated to cover the popup diff viewer, commit detail view, refresh interval, and the pure-Go architecture.
β οΈ Known Limitations
- Submodule change detection and Git LFS support are limited in go-git.
Full Changelog: v0.1.7...v0.1.8
v0.1.7 - amd64(x64)
Release Notes - v0.1.7
π Improvements & Bug Fixes
Terminal Emulation & Reconnection Stability
β’ ANSI & UTF-8 Buffer Sanitization:
β’ Implemented automatic sanitization for RingBuffer history when buffer wrap-around occurs, preventing broken UTF-8 sequences and fragmented leading ANSI escape
sequences from corrupting the terminal display.
β’ Terminal Query Stripping from History Replay:
β’ Filtered historical terminal query sequences (such as DSR \x1b[6n, DA \x1b[c, OSC 10/11/4 color queries, and DECRQM) from the history replay buffer to avoid
triggering duplicate query responses on client reconnection.
β’ ConPTY Clean Viewport Repainting:
β’ Added trigger for ConPTY ForceRedraw upon WebSocket connection and reconnection, ensuring the active viewport is painted cleanly without visual artifacts.
β’ Query Auto-Response Suppression (Frontend):
β’ Added client-side filtering in xterm.js during history playback and initial rendering to prevent automatic terminal query responses (such as CPR / cursor position
reports) from leaking into ConPTY stdin as unintended input.
ββββββ
π¦ What's Changed
β’ fix(terminal): prevent ANSI corruption and suppress query response leak on client reconnect by @pirogom in 4d85a29 https://github.
com/pirogom/pmux/commit/4d85a2922f6efd38dfd879ef9360b46b575eb610
Full Changelog: v0.1.6...v0.1.7
v0.1.6 - amd64(x64)
Release v0.1.6
π Highlights & Overview
v0.1.6 brings major stability, concurrency, and performance improvements to the terminal backend and WebSocket
communication pipeline. This release addresses real-world edge cases when working with modern interactive AI CLI agents
(such as Opencode, Claude Code, Aider, and Gemini CLI) and complex TUI applications (Vim, Lazygit, Htop), including rapid
typing, dynamic prompt expansions, heavy scrolling through multi-line conversation histories, power management resume, and
multi-session switching.
ββββββ
π οΈ Key Improvements & Fixes
1. Asynchronous Terminal Input Pipeline & WebSocket Resilience
β’ Non-blocking Input Queue (Pane.WriteInput): Decoupled the WebSocket receiver loop from OS PTY pipe writes using an
asynchronous channel queue (inCh, 1024 capacity) and a dedicated worker loop.
β’ Ping/Pong Heartbeat Protection: Prevents child process stdin backpressure or TUI layout recalculation locks from stalling
the WebSocket read loop and dropping connections.
β’ Frontend Input Micro-batching: Implemented an imperceptible ~4ms micro-batching buffer in xterm.js to bundle rapid
keystroke bursts and long pastes, drastically reducing WebSocket framing overhead.
2. ConPTY Win32 Concurrency Serialization & Session Switching Reflows
β’ Thread-safe Win32 ConPTY Operations: Added resizeMu sync.Mutex inside the Windows ConPTY host to strictly serialize
Resize and ForceRedraw calls, eliminating race conditions and pipe crashes when rapidly switching between active sessions.
β’ Debounced ForceRedraw: Applied a 35ms debouncing timer to consolidate rapid redraw requests into a single safe screen
refresh.
β’ Streamlined Frontend Reflow: Replaced multi-staged setTimeout reflow cascades with a single requestAnimationFrame pass,
eliminating redundant redraw message bursts.
3. Active VT Mode Synchronization across Multi-Clients & Display Wake
β’ VTModeTracker Engine: Implemented real-time tracking of active DECSET/DECRST terminal modes (?1049h Alternate Screen
Buffer, ?1000h/?1002h/?1006h SGR Mouse Tracking, ?2004h Bracketed Paste).
β’ Mode Preamble Injection: When a new window or browser client attaches to an already-running TUI session, active mode
preambles are automatically injected before history replay, ensuring immediate mouse wheel scrolling and click support.
β’ Display Wake & Reconnect Preservation: Removed disruptive term.reset() calls on connection restore and added WebGL
context loss handling (onContextLoss) to keep TUI mouse tracking intact after display sleep/wake cycles.
4. Binary WebSocket Terminal Stream & Scroll Resilience
β’ Binary Stream Conversion (websocket.MessageBinary): Switched /ws/pane/{id} terminal streams from text to binary WebSocket
frames.
β’ UTF-8 Buffer Split Protection: Prevents WebSocket protocol errors (1007: Invalid UTF-8) caused by multi-byte characters
(Korean, Box-drawing borders, emojis, and ANSI styling) split across 64KB read boundaries during high-throughput TUI
scrolling.
β’ Expanded Writer Pump Capacity: Increased channel buffer to 1024 chunks and frame coalescing limit to 128KB, delivering
silky-smooth scrolling through thousands of lines of past TUI history without backpressure.
v0.1.5 - amd64(x64)
v0.1.5
β¨ New Features
SSH Manager with Encrypted Address Book
- Per-pane extension toolbar (visible while holding Ctrl) with a dedicated SSH icon for quick access
- SSH Manager modal with configurable SSH client path and an address book (name, description, host, account)
- One-click connect β types
ssh user@hostdirectly into the active pane terminal using your configured client - Address book stored encrypted in
~/.pmux/ssh.confvia Windows DPAPI (no key embedded in source) with a versioned schema - Password-protected Export/Import (
*.pmuxssh, scrypt + AES-256-GCM) to migrate your setup between machines
π Bug Fixes
- SSH address book edits/deletes are now auto-persisted immediately β the manual Save button was removed
- SSH client path auto-saves when changed or selected via browse dialog
- SSH config load/save/export/import now falls back to the daemon HTTP API when Wails bindings are unavailable
- SSH toolbar icon is now imported via Vite so it's properly bundled in production builds
- Fixed z-index of stacked modals (confirm, address editor, password prompt) so they render above the SSH Manager
π Documentation
- README: Windows OpenSSH installation recommendation and
--logCLI option documented