Skip to content

Releases: pirogom/pmux

v0.1.14 - amd64(x64)

Choose a tag to compare

@pirogom pirogom released this 11 Sep 10:20

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)

Choose a tag to compare

@pirogom pirogom released this 01 Sep 04:25

Release Notes - v0.1.13

Bug Fixes

  • Git: Fix CRLF files falsely reported as modified on Windows β€” go-git's
    Worktree.Status() and Add() 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 effective core.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.filemode is ignored)
    • Stage/StageAll: rewrite staged index entries to LF blobs
      (fixupCleanFilter)
    • Tests: CRLF-on-disk clean detection, autocrlf-disabled control, LF blob
      staging

v0.1.12 - amd64(x64)

Choose a tag to compare

@pirogom pirogom released this 29 Aug 10:30

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.
  • 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)

Choose a tag to compare

@pirogom pirogom released this 28 Aug 13:05

What's Changed

πŸ› Bug Fixes & Improvements

  • Git: Ignore core.filemode differences 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 when core. filemode = false.
  • Preserved executable mode flags in the Git index when staging modified files on
    Windows to prevent accidental stripping of +x permissions.

Full Changelog: v0.1.10...v0.1.11

v0.1.10 - amd64(x64)

Choose a tag to compare

@pirogom pirogom released this 26 Aug 08:29

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 (Enter to confirm, Esc to 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.json files

β˜‘ 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.js into 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)

Choose a tag to compare

@pirogom pirogom released this 25 Aug 08:58

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 shows viewport 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-size control 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 in pkg/config so 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-size broadcast 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)

Choose a tag to compare

@pirogom pirogom released this 25 Aug 00:43

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 git executable 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 ~/.ssh keys (with known_hosts verification)
    • HTTPS remotes: Windows Credential Manager (Git Credential Manager) or a ~/.git-credentials file
    • When no credentials are found, the panel explains how to fix it.

✨ 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)

Choose a tag to compare

@pirogom pirogom released this 17 Aug 04:54

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)

Choose a tag to compare

@pirogom pirogom released this 16 Aug 13:33

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)

Choose a tag to compare

@pirogom pirogom released this 16 Aug 07:15

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@host directly into the active pane terminal using your configured client
  • Address book stored encrypted in ~/.pmux/ssh.conf via 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 --log CLI option documented