Skip to content

Releases: cst8t/gitmun

v0.9.1

Choose a tag to compare

@cst8t cst8t released this 11 Jul 01:05
6e0335b

What's New

Improved Linux terminal selection

  • Linux terminal preferences now use stable terminal IDs such as auto, custom, ghostty, and gnome-terminal.
  • The Settings window shows friendly terminal names while storing normalised IDs in config.
  • Custom Linux terminal commands are now wired through the same terminal registry path as known terminals.
  • Legacy config values such as Auto and GnomeTerminal are normalised when loaded. Empty values fall back
    to auto; unknown IDs are preserved.

Improved commit graph rendering

  • Reworked the experimental commit graph gutter with smoother SVG curves, clearer lane continuity, and
    improved node/connector contrast.
  • Lane-changing curves now blend colours between source and destination lanes.
  • Commit graph rows are hidden cleanly when the graph is turned off.
  • When the commit graph is visible, commit history is fetched in topo order so graph rendering better
    matches repository topology.

Commit history topo-order support

  • Commit history requests now support topo ordering.
  • The Git CLI backend passes --topo-order when requested.
  • The gix backend falls back to the CLI path for topo-ordered history to keep behaviour consistent.

Titlebar UX

  • Fixed truncated repository titles in the titlebar hover popup.
  • When the title is clipped, the popup now shows the full project display name and repository path while
    preserving click-to-copy behaviour.

Fixes

  • Linux terminal labels and launchers now use the terminal registry consistently.
  • Linux custom terminal commands are plumbed correctly through settings and repository “Open in terminal”
    actions.
  • Commit graph connectors now render smoother joins and caps, with gradient strokes for blended curves.
  • Commit graph DOM is no longer rendered when the graph is hidden.
  • Repository title hover detection now checks both the label and its clipping button container.

Developer Notes

  • LinuxTerminalEmulator has been replaced with flexible string IDs: LinuxTerminalId.
  • New constants: LINUX_TERMINAL_AUTO_ID and LINUX_TERMINAL_CUSTOM_ID.
  • get_linux_terminal_options / getLinuxTerminalOptions now return { id, label }.
  • set_linux_terminal_emulator / setLinuxTerminalEmulator now accept a terminal ID.
  • Commit history requests now include Rust topo_order / TypeScript topoOrder.
  • linux-terminal-launch was updated in Cargo.lock.

Full Changelog: v0.9.0...v0.9.1

v0.9.0

Choose a tag to compare

@cst8t cst8t released this 05 Jul 15:23

What's New

Commit patch export

  • New backend and command export_commit_patch_file to export patches built from one or more commits
  • Export supports selecting multiple commits and writes an aggregated patch (oldest → newest)
  • Root (initial) commits are handled correctly and produce new-file hunks
  • Exports include full index object IDs (--full-index) and binary diffs for accurate round-trip application
  • CLI and gix backends return the same patch output

Commit message recovery

  • New API get_commit_message_recovery and TypeScript type CommitMessageRecovery
  • Reads the repository COMMIT_EDITMSG file and returns a cleaned message and timestamp when a draft exists
  • UI now offers a “Restore previous message” action when no draft is present and a recoverable edit message exists
  • Commit box will clear saved drafts after a successful commit and preserve them after failures

SSH signing / allowed signers support

  • New SSH allowed-signers status API get_ssh_allowed_signer_status and operation add_ssh_signing_key_to_allowed_signers
  • CLI and gix backends inspect user.signingkey, user.email, and gpg.ssh.allowedSignersFile to determine:
    • whether setup is needed
    • whether the allowed signers file is configured / exists
    • whether the signing key is present and trusted
  • New types SshAllowedSignerStatus and SshAllowedSignerReason
  • UI repair flows:
    • Log/signature popover can show instructions and add the configured SSH signing key to the allowed signers file
    • Identity panel surfaces allowed-signers state and lets users add the configured signing key
  • Tests for status, adding keys, and edge cases (inline key, private key paired pub file, missing email, configured-but-missing-file)

Patch import: safer 3-way apply and conflict handling

  • Import now supports three-way apply via ImportPatchRequest.three_way
  • Three-way apply is used as a retry path when normal git apply --binary fails
  • Three-way apply blocks when tracked files are dirty and will return a clear error code when blocked
  • Conflict results from 3-way apply are returned as an operation result (so the UI can route to conflict resolution)
  • Tests covering three-way conflicts, blocked conditions, and partial/no-blob patches

File tree, unversioned items and staging improvements

  • New unversioned “items” representation with file vs directory kinds (shows directories like assets/)
  • Untracked directory rows can be selected and staged as a unit
  • File tree compaction and default expand/collapse heuristics for large sections:
    • Avoid expanding huge folders by default; allow manual expansion
    • Selecting a compacted folder selects its descendants
  • Large root-level lists are virtualized to keep UI responsive and allow scrolling to later rows
  • Folder rows show "new" badge for directories introduced by the patch/untracked content
  • Better handling of submodules in status and unversioned item filtering

Staging and operation feedback

  • Introduced delayed operation feedback:
    • Inline small banner after 500ms for quick operations
    • Popup status overlay after 2500ms for long-running operations
  • Staging operations (stage/unstage/all) are tracked with an operation lock so bulk actions are disabled while busy
  • Visual inline feedback for staging operations in both staging view and centre panel
  • Staging UI: selection, bulk actions, and virtualized lists handle large selections and files with spaces robustly

Commit box and draft UX

  • Commit message drafts are saved per-repository while typing and restored on revisit
  • Merge messages and amend interplay handled correctly (merge messages not overwritten by drafts)
  • Offer to restore COMMIT_EDITMSG content when no local draft exists (and it's different from the latest commit message)
  • Commit API updated to allow async result (commit handler can return false to indicate failure and keep draft)
  • Clear drafts only on confirmed successful commit

Log and refs UI improvements

  • Commit ref chips layout refined:
    • Prominent ref line for selected/checkout commits, inline meta refs for others
    • Priority ordering of refs (HEAD, local branches, upstream, remotes, tags)
    • Overflow handling with descriptive “N more refs” tooltips
  • Signature popover:
    • Copy actions for signer and fingerprint
    • Repair flow button for SSH signing (adds configured key to allowed signers if available)
    • Explanatory text for SSH allowed-signers status
  • Context menu additions: export commit patch(s) from a single commit or a multi-selection

API, TypeScript and wiring

  • New API endpoints and TypeScript functions:
    • exportCommitPatchFile / exportCommitPatchFile TS binding
    • getCommitMessageRecovery TS binding
    • getSshAllowedSignerStatus and addSshSigningKeyToAllowedSigners TS bindings
    • openMicrosoftStoreUpdatePage replaces older request method for MS Store flow
  • Backend: many repo command functions made async / moved to background threads to avoid blocking the Tauri main thread (e.g., commit_changes, stage_files, unstage_*, stage_all)
  • New internal CLI handler helpers for:
    • resolving SSH signing keys (supports inline key:: prefix, file, or key.pub suffix)
    • default and resolved allowed signers paths
    • robust commit-hash validation and building commit-based patches
    • safer three-way patch apply with status inspection
    • full-index patch generation for single-commit export

Configuration & migration

  • Removed or ignored legacy enableUpdateWithMSStoreFlow manual config keys during migration; config persists but the old key is ignored in the new config shape
  • New settings types and defaults updated to reflect store flow changes

Microsoft Store / update flow

  • Microsoft Store update flow simplified:
    • New action opens the Microsoft Store update page (open_microsoft_store_update_page) instead of attempting a direct in-process Store install
    • Local test harness simplified to three modes (available / mandatory / none)
    • Update dialog copy and state reflect “Store opened” and the new open-flow states

Tests and quality

  • Large suite updates and new tests:
    • CLI and gix handler behaviour (export/import/ssh allowed signers, commit recovery)
    • Staging view virtualization, large-list behaviour, compact folder selection, inline feedback timing
    • Commit box draft saving, recovery, and commit-clear behaviour
    • Identity panel allowed-signers repair flow and prompts
    • Log view: ref layout, signature repair flow, export commit patches

Fixes

  • Patch export now includes full-index object IDs for accurate patches suitable for three-way application
  • Fixed multiple UI race conditions and long-running work on the UI thread by moving heavy operations to background threads
  • Fixed unversioned paths handling to show directory entries and avoid losing folder selections
  • Improved detection and filtering of submodule entries from unversioned lists and repo status
  • Fixed staging selection and bulk operations to disable during active staging operations
  • Fixed commit draft lifecycle and ensured drafts are preserved after failed commits and cleared on success
  • Fixed signature popover copying and improved repair UX for SSH signing keys
  • Fixed Microsoft Store update flow to avoid unsupported in-process flows and present the Store page cleanly
  • Fixed a number of edge-case patch import and three-way-apply failure modes with clearer error codes
  • Various test fixes and added coverage for new features and regression scenarios

Full Changelog: v0.8.1...v0.9.0

v0.8.1

Choose a tag to compare

@cst8t cst8t released this 01 Jul 02:16

What's New

Repository Display Names

  • New command get_repo_display_name to read repository description as display name
  • Displays custom project names in the titlebar when configured
  • Falls back to repository folder name when no custom description is set
  • Automatically fetches display names for recently used repositories
  • Supports Git submodule .git file format with gitdir: references

Titlebar Enhancements

  • New disclosure tooltips for truncated repository and branch names
  • Interactive tooltips showing full details when labels overflow
  • Branch name tooltip displays full branch name when truncated
  • Repository tooltip displays both custom display name and full path when truncated
  • Better visual feedback for copy affordance with "Click to copy path" hint
  • Improved layout with cleaner repository name display

Commit Message Processing

  • New commit_message.rs module for parsing and processing commit bodies
  • Separates commit prose body from metadata trailers
  • Trailers are properly identified as contiguous Key: value pairs at message end
  • Empty lines between prose and trailers are handled correctly
  • Message body is now returned in CommitDetails for display in the UI
  • Both CLI and gix backends return identical body and trailer parsing

File Tree Compaction

  • Uninterrupted single-directory chains are now compacted in the file tree
  • Reduces visual depth for deeply nested single-folder paths
  • Shows full compacted path in folder labels (e.g., game/assets/graphics/100/en/symbols)
  • Only compacts when a directory contains only one subdirectory
  • Maintains proper layout and selection semantics

Repository State Monitoring Improvements

  • Better handling of Git lock files (.lock) - now ignored in file watch events
  • .git/objects/ directory writes are filtered out from state refreshes
  • Uses GIT_OPTIONAL_LOCKS=0 environment variable for status and numstat operations
  • More precise path filtering logic for relevant Git state changes
  • Reduces unnecessary refreshes during fetch operations

UI Improvements

  • File striping calculations now account for visible rows only
  • Striping restarts independently for staged and unstaged sections
  • Folder rows are no longer striped to maintain visual hierarchy
  • Commit details popover properly scrolls when content exceeds viewport height
  • Better handling of popover positioning near screen edges
  • Popover stays within viewport bounds with minimum 8px margin

Build and Dependencies

  • Updated esbuild from 0.28.0 to 0.28.1
  • Updated Vite from 8.0.8 to 8.1.0
  • Updated Rolldown from 1.0.0-rc.15 to 1.1.3
  • Updated postcss from 8.5.13 to 8.5.16
  • Updated nanoid from 3.3.11 to 3.3.15
  • Updated undici from 7.24.6 to 7.28.0
  • Updated tinyglobby from 0.2.15 to 0.2.17
  • Updated @napi-rs/wasm-runtime from 1.1.3 to 1.1.6
  • Updated @oxc-project/types from 0.124.0 to 0.137.0

Permissions and API Updates

  • Updated Tauri permissions schema to include new Opener plugin capabilities
  • New App permission allow-supports-multiple-windows
  • New Window permissions allow-activity-name and allow-scene-identifier
  • New Tray permission allow-set-icon-with-as-template
  • Dialog deprecated permissions allow-ask and allow-confirm marked as deprecated
  • Full Opener plugin scope support with URL and path configurations

TypeScript and API Additions

  • Added CommitDetails.body field to represent prose message content
  • New TypeScript utils for repository display name handling
  • Enhanced titlebar component tests for disclosure functionality
  • New diff panel tests for commit details display

Package Configuration

  • Added allowScripts configuration for esbuild

Fixes

  • Fixed commit trailers parsing to properly separate prose from metadata
  • Fixed file striping to not apply to folder rows
  • Fixed popover positioning to avoid going off-screen
  • Fixed file tree rendering to preserve striping consistency across sections
  • Improved Git lock file filtering for more reliable state monitoring
  • Better handling of concurrent Git operations with optional lock control

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

v0.8.0

Choose a tag to compare

@cst8t cst8t released this 17 Jun 23:30

What's New

Commit Graph Visualisation

  • New experimental commit graph feature with visual lane representation
  • Shows commit ancestry relationships with coloured lanes and connecting lines
  • Includes commit node markers and parent relationship connectors
  • Graph can be toggled on/off with toolbar button (experimental feature behind setting)
  • Properly handles merge commits with multiple parents
  • Smart lane allocation to keep main parent on primary lane

Commit Reference Decorations

  • Displays branch names (local and remote) and tags directly on commit rows
  • Shows HEAD and upstream markers inline with commit metadata
  • Compact display with ellipsis for long ref names and a "+N more" indicator
  • Different styling for local branches (green), remote branches (accent), and tags (yellow)

Commit Navigation

  • Arrow key support for moving between commits in the log
  • Arrow Up/Down keys select adjacent commits with automatic scroll reveal
  • Focus management for keyboard-only navigation
  • Keyboard-accessible commit selection

Pagination and Performance

  • Explicit "Load more commits" button instead of automatic end-reached loading
  • Better error handling for failed page loads with retry capability
  • Shows loading state and error messages for pagination
  • Auto-reveals newly loaded commit when appending next page
  • Reduced verification batch size to 20 commits for better UX

Commit Verification Improvements

  • GPG keyserver verification (experimental): automatically fetch missing GPG keys from configured keyservers
  • SSH signature priority: SSH signatures verify before GPG signatures that may need keyserver lookup
  • Better verification state tracking with request IDs to handle out-of-order responses
  • Verification retries on failure with one automatic retry per batch
  • Only retries within visible range, background verification for loaded commits
  • Settings for enabling/disabling GPG keyserver verification

File Tree and Staging

  • Collapsible folder structure in staged/unstaged file lists
  • Folder selection toggles all descendant files
  • Indeterminate checkbox state for partially selected folders
  • Independent folder expansion state for staged versus unstaged sections
  • Cumulative statistics (additions/deletions) for folders

UI Improvements

  • Better left sidebar collapse/expand UI with improved hover state and accessibility
  • Enhanced titlebar layout with better text truncation for long branch names and repo paths
  • Improved upstream dialog with branch filtering and scrollable list
  • Fixed branch selection UI with keyboard support
  • Better visibility of branch pill with title attribute

Focus Management

  • Window focus detection to defer expensive operations when unfocused
  • Automatic refresh when window regains focus with pending changes
  • Reduces unnecessary git operations when app is backgrounded

Settings

  • New "Experimental" settings section
  • Commit graph button toggle (off by default)
  • GPG keyserver verification toggle (off by default) in Git section
  • Signature settings change event for coordinated verification updates

Localisation

  • New translations for commit graph UI
  • Translations for folder selection and staging operations
  • Translations for load more button and pagination states
  • Upstream dialog filtering and branch list translations

Fixes

  • Panel layout toggle width corrected to 24px
  • Better handling of concurrent refresh and load more operations
  • Improved error messages with more context in pagination failures
  • Fixed verification result ordering issues with concurrent requests
  • Proper deduplication of commits when pagination overlaps
  • Settings sync events for signature verification changes
  • Window focus event listeners with proper cleanup

Full Changelog: v0.7.1...v0.8.0

v0.7.1

Choose a tag to compare

@cst8t cst8t released this 07 Jun 15:16

What’s New

Panel Layout Refactoring

  • Renamed the pane layout system to panel layout for consistency with the app’s terminology
  • Improved left panel minimum width handling, now set to 260px, with better visibility constraints
  • Enhanced the panel resizing algorithm to maintain usable minimum sizes for all panels
  • Fixed panel drag constraints to prevent the left panel from being dragged below its minimum width
  • Corrected persisted layouts that become too narrow during window resize operations

Testing and Quality

  • Expanded panel layout test coverage with new test cases for minimum width constraints
  • Added tests for left panel drag correction and usable centre panel constraints
  • Improved test assertions for edge cases in panel resizing

Dependencies

  • Updated the linux-terminal-launch dependency to the latest commit

Other Improvements

  • Git initialisation now targets the main branch by default in test configurations
  • Code consistency improvements across layout management utilities

Fixes

  • Simplified and corrected panel layout clamping logic
  • Improved handling of extreme window sizes and panel width constraints
  • Improved minimum panel width enforcement during manual splitter drags

Full Changelog: v0.7.0...v0.7.1

v0.7.0

Choose a tag to compare

@cst8t cst8t released this 06 Jun 23:16

What's New

CLI Enhancements

  • Modern command-line interface with intuitive subcommands
    • gitmun open <path> - Open repositories
    • gitmun clone - Clone with flexible options
    • gitmun init - Initialize new repositories
  • Shell completions for bash, zsh, fish, and PowerShell
  • Window routing with --reuse-window and --new-window options

Linux Terminal Support

  • Choose your preferred terminal emulator (Konsole, GNOME Terminal, Alacritty, WezTerm, and more)
  • Custom terminal command support with configurable launch options
  • Auto-detection of installed terminals

Commit Message Improvements

  • Split subject/body interface with improved editing experience
  • Resizable commit box with saved height preferences
  • Keyboard shortcuts (Cmd/Ctrl+Enter) for quick commits
  • Better support for multi-line messages and trailers

Error Handling

  • Persistent error toasts with dismiss button
  • Configurable error message auto-close delay
  • Improved error messages with actionable suggestions
  • Better detection of unmerged branch deletion attempts

Reset Operations

  • Hard reset support to discard tracked changes

Dependencies

  • Updated Vitest 4.1.0, Esbuild 0.28.0, Chai 6.2.2
  • Loading skeletons for settings pages
  • Improved test coverage

Fixes

  • Commit message preservation for special characters and formatting
  • Multi-line commit message handling with proper whitespace
  • Unmerged branch deletion error messages
  • Configuration persistence across sessions
  • Various UI/UX improvements and stability fixes

Full Changelog: v0.6.4...v0.7.0

v0.6.4

Choose a tag to compare

@cst8t cst8t released this 28 May 18:42

What's Changed

Patch File Management

  • Import and export patch files with flexible scope options (staged, unstaged, all, or selected)
  • Selective file export with checkboxes for staged and unstaged changes
  • Full support for untracked files in patches

Git Mailmap Support

  • Commit author and committer identities now respect .mailmap files

UI/UX Improvements

  • "More" dropdown menu in titlebar for advanced operations
  • Recent repositories quick access in empty state (up to 5 repos)
  • Improved search bar styling and accessibility
  • Better keyboard navigation and focus handling

Backend Improvements

  • Added save dialog capability
  • Enhanced path validation for patch operations
  • Binary patch support

Full Changelog: v0.6.2...v0.6.4

v0.6.2

Choose a tag to compare

@cst8t cst8t released this 24 May 15:17

What's Changed

Microsoft Store Update Progress Tracking (experimental, disabled by default)

  • Real-time download and install progress display for Microsoft Store updates
  • Queue status monitoring with detailed extended state information
  • Distinction between download and install phases
  • Better error reporting for Microsoft Store issues
  • Application restart registration for MSIX installations

Commit Log Enhancements

  • Multi-select commits with Ctrl+Click (or Cmd+Click on macOS) and Shift+Click
  • Copy commit hash, short hash, subject, or full details from context menu
  • Support for bulk copy operations on selected commits
  • Context menu changes based on single vs. multiple selection

Pane Layout Improvements

  • Refactored pane layout calculation into reusable utilities
  • Improved ratio-based resizing to preserve splitter positions across window resizes
  • Consistent pane layout clamping logic

UI/UX Improvements

  • Copy repository path button in titlebar with "Copied" feedback
  • Better Linux WebKit text input handling in sub-windows
  • Improved AppImage rendering fallback for X11 with hardware renderer
  • Settings help text improvements for diff/merge tool configuration

Linux & Platform Improvements

  • AppImage force software renderer detection for X11 environments

Internal Changes

  • Updated Windows API bindings for better recovery and UI handling
  • Improved Microsoft Store queue item status tracking
  • Better test coverage for update flow and pane layout

Full Changelog: v0.6.0...v0.6.2

v0.6.0

Choose a tag to compare

@cst8t cst8t released this 22 May 17:15

What's Changed

Open in File Manager, Terminal, or Git Bash

  • New "Open in..." button to launch repository in File Explorer, Finder, Terminal, or Git Bash directly

Improved Error Interpretation & Guidance

  • Git errors now categorized with clear summaries and suggested actions
  • Network, authentication, merge conflicts, and upstream issues display helpful guidance
  • Localized action labels in Result Log

Enhanced Push Failure Handling

  • Network errors and authentication failures display in toasts with actionable advice
  • Force-with-lease support for rebased branches

Linux & Package Improvements

  • AppImage builds now available through OBS alongside DEB and RPM packages
  • Improved Flatpak environment variable handling

UI/UX Improvements

  • Responsive titlebar that hides labels on narrow windows
  • Warning icon for push rejection dialogs
  • Result Log shows expandable details for Git errors
  • Updated About window website link (gitmun.org now live)

Dependencies

  • Updated to gix 0.83.0 with improved diff and merge handling
  • Git output locked to machine locale for consistency

Full Changelog: v0.5.4...v0.6.0

v0.5.4

Choose a tag to compare

@cst8t cst8t released this 17 May 23:57

Fix files not being un-stageable on a new repo while doing first commit
Fix issue with GTK dialogue hanging when opening existing repo with native file picker (switching to using xdg portal over native gtk in tauri-dialog)

Full Changelog: v0.5.3...v0.5.4