Releases: cst8t/gitmun
Release list
v0.9.1
What's New
Improved Linux terminal selection
- Linux terminal preferences now use stable terminal IDs such as
auto,custom,ghostty, andgnome-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
AutoandGnomeTerminalare normalised when loaded. Empty values fall back
toauto; 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-orderwhen 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
LinuxTerminalEmulatorhas been replaced with flexible string IDs:LinuxTerminalId.- New constants:
LINUX_TERMINAL_AUTO_IDandLINUX_TERMINAL_CUSTOM_ID. get_linux_terminal_options/getLinuxTerminalOptionsnow return{ id, label }.set_linux_terminal_emulator/setLinuxTerminalEmulatornow accept a terminal ID.- Commit history requests now include Rust
topo_order/ TypeScripttopoOrder. linux-terminal-launchwas updated inCargo.lock.
Full Changelog: v0.9.0...v0.9.1
v0.9.0
What's New
Commit patch export
- New backend and command
export_commit_patch_fileto 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_recoveryand TypeScript typeCommitMessageRecovery - Reads the repository
COMMIT_EDITMSGfile 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_statusand operationadd_ssh_signing_key_to_allowed_signers - CLI and gix backends inspect
user.signingkey,user.email, andgpg.ssh.allowedSignersFileto determine:- whether setup is needed
- whether the allowed signers file is configured / exists
- whether the signing key is present and trusted
- New types
SshAllowedSignerStatusandSshAllowedSignerReason - 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 --binaryfails - 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_EDITMSGcontent 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/exportCommitPatchFileTS bindinggetCommitMessageRecoveryTS bindinggetSshAllowedSignerStatusandaddSshSigningKeyToAllowedSignersTS bindingsopenMicrosoftStoreUpdatePagereplaces 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
enableUpdateWithMSStoreFlowmanual 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
- New action opens the Microsoft Store update page (
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
What's New
Repository Display Names
- New command
get_repo_display_nameto 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
.gitfile format withgitdir: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.rsmodule for parsing and processing commit bodies - Separates commit prose body from metadata trailers
- Trailers are properly identified as contiguous
Key: valuepairs at message end - Empty lines between prose and trailers are handled correctly
- Message body is now returned in
CommitDetailsfor 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=0environment 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-nameandallow-scene-identifier - New Tray permission
allow-set-icon-with-as-template - Dialog deprecated permissions
allow-askandallow-confirmmarked as deprecated - Full Opener plugin scope support with URL and path configurations
TypeScript and API Additions
- Added
CommitDetails.bodyfield 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
allowScriptsconfiguration 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
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
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
What's New
CLI Enhancements
- Modern command-line interface with intuitive subcommands
gitmun open <path>- Open repositoriesgitmun clone- Clone with flexible optionsgitmun init- Initialize new repositories
- Shell completions for bash, zsh, fish, and PowerShell
- Window routing with
--reuse-windowand--new-windowoptions
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
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
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
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
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