jesseduffield/lazygit
simple terminal UI for git commands
How lazygit is put together
lazygit is a terminal UI for git written in Go. main.go bootstraps the app via pkg/app, which validates the installed git version (min 2.32.0), resolves repo paths, optionally initializes or reopens recent repos, and hands control to pkg/gui — a gocui/tcell-based TUI whose controllers drive git operations through pkg/commands (shelling out to the real `git` binary via oscommands). Configuration is layered from YAML user config and app state files in pkg/config; i18n translations live in pkg/i18n; updates are self-managed by pkg/updates. Integration tests run the real TUI against throwaway repos via cmd/integration_test and pkg/integration.
Languages
Frameworks
Infrastructure
Major components
pkg/app
Bootstraps the application: CLI/env arg parsing, build-info merging, temp dir setup, git version validation, repo setup/init, daemon mode dispatch, and error translation.
pkg/gui
The main TUI: panel layout, contexts, controllers, keybindings, side panels, menus, pty handling, and the run/error-handling loop.
pkg/gocui
Vendored fork of the gocui terminal UI library providing views, keybindings, text areas, task management, and the tcell driver.
pkg/commands
Builds and runs git command objects (git.go, git_cmd_obj_builder.go, git_cmd_obj_runner.go), including repo path resolution and direnv loading.
pkg/config
User config, default per-platform config, keybindings, editor presets, GitHub PR cache, validation, and JSON schema generation inputs.
pkg/i18n
Translation sets (English plus other languages referenced by docs) used across all UI strings.
pkg/integration
Integration test harness with CLI and TUI clients that run the real binary against scripted scenarios.
pkg/updates
Self-update checking/updating of the lazygit binary.
A quiet week with a single fix that makes renamed files show up correctly when browsing directories.
5 weeksWeek of 2026-08-17
Week of 2026-08-17latest
A quiet week with a single fix that makes renamed files show up correctly when browsing directories.
Week of 2026-08-10
Conflict handling got smarter (resolved files stay visible, selections stick), startup got faster, and the UI dims when the window loses focus.
Week of 2026-08-03
The biggest week: async rendering was rebuilt to eliminate flicker, scroll glitches, and crashes, plus conflict-marker customization and stash UI fixes.
Week of 2026-07-27
Mouse-driven reordering of commits landed alongside GitHub pull-request check statuses and a rework of the custom pager configuration.
Week of 2026-07-20
Foundational mouse-drag infrastructure was built (range selection, edge auto-scroll, commit dragging) along with Windows crash fixes and input buffering.
Over the past month, lazygit development focused heavily on making the interface feel smoother and more mouse-friendly: drag-and-drop for selecting and reordering commits, flicker-free async diff rendering, and better handling of merge conflicts all landed in quick succession. Alongside the polish, there were meaningful fixes for tricky situations like files moved between directories, repos with unusual git folder layouts, and Windows-specific crashes. Housekeeping work such as dependency bumps, linter upgrades, and documentation tweaks rounded out each week.
Week by week
2026-08-17A quiet week with a single fix that makes renamed files show up correctly when browsing directories.latest1 change
Fix
Show renames involving moved directories
When you select a directory that a file was moved into or out of, the file's rename now shows up in the view instead of being hidden.
2026-08-10Conflict handling got smarter (resolved files stay visible, selections stick), startup got faster, and the UI dims when the window loses focus.6 changes
Feature
Resolved conflict files stay listed
Files whose merge conflicts you've resolved no longer disappear from the list, so you can keep track of what you've done.
Feature
Inactive window styling
The interface now draws itself in a dimmed look when the lazygit window isn't focused, making it obvious which app is active.
Refactor
Faster startup
Changes were made to reduce how long it takes lazygit to launch.
Fix
Selection preserved through conflict resolution
After resolving conflicts, the last file you were working on stays selected instead of the list jumping elsewhere, including auto-selecting the conflicted commit when a rebase pauses.
Fix
Rename display for directory diffs
Diffing a directory that files were renamed into or out of now shows those renames, with collapsed paths for whole moved directories.
Chore
Linter upgrade cleanup
The code linting tool was bumped to v2.12.2 and dozens of small code cleanups were made to satisfy its new warnings.
2026-08-03The biggest week: async rendering was rebuilt to eliminate flicker, scroll glitches, and crashes, plus conflict-marker customization and stash UI fixes.6 changes
Refactor
Rebuilt async rendering pipeline
Diff content is now rendered into an off-screen buffer and swapped in all at once, fixing flickering, scroll jumps, and crashes when views load in the background.
Feature
Custom conflict marker sizes supported
lazygit now respects your repository's configured conflict marker size and recognizes markers without labels, so unusual conflict setups display correctly.
Fix
Smoother stash operations
Stashing now updates the UI in a single coordinated frame rather than in jarring steps, with a waiting indicator while it runs.
Fix
Better scrolling behavior
Views no longer scroll up to fill blank space while content loads, reset sensibly on first paint, and keep their position during background refreshes.
Fix
Repos with external git folders fixed
Several problems were resolved for repositories whose internal git data lives outside the working tree.
Chore
Dependency and tooling bumps
GitHub Actions and library dependencies were updated to newer versions.
2026-07-27Mouse-driven reordering of commits landed alongside GitHub pull-request check statuses and a rework of the custom pager configuration.6 changes
Feature
Drag commits to reorder them
You can now grab commits (or rebase todo entries) with the mouse and drop them into a new position in history.
Feature
GitHub PR check status in branch list
Branches with open pull requests now show the combined pass/fail state of their checks, both in the branches panel and the detail view.
Refactor
Custom pager config reworked
The custom pager setting was redesigned and renamed to 'diff renderer' for clarity.
Fix
Multi-select fix for similarly named files
Selecting multiple files whose names share a common prefix in the commit files panel now works correctly.
Fix
Better trailer wrapping
More types of commit message trailers are excluded from automatic text wrapping so they stay intact.
Chore
Nix dev shell improvements
Project build commands are now available inside the Nix development environment.
2026-07-20Foundational mouse-drag infrastructure was built (range selection, edge auto-scroll, commit dragging) along with Windows crash fixes and input buffering.6 changes
Feature
Range selection by mouse drag
Dragging the mouse across a list now selects a range of items, with auto-scrolling when you drag to the panel's edge.
Feature
Commit drag-and-drop groundwork
Commits can be dragged to new positions with visible insertion points, edge auto-scrolling, and escape-to-cancel support.
Fix
Windows fullscreen crash fixed
Switching to fullscreen mode with a custom pager no longer crashes on Windows due to terminal size limits being clamped properly.
Fix
Clicks survive focus refreshes
Clicking in the commits panel of an unfocused VS Code window now registers correctly instead of being overwritten by stale refreshes.
Feature
External diff context variable
Custom external diff commands can now use a {{diffContext}} template variable to receive the current context setting.
Feature
Input buffering during refreshes
Keypresses are held and UI updates batched while big refreshes run, such as when switching repositories or stashing.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 0 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required