← All reportsPublic report

jesseduffield/lazygit

simple terminal UI for git commands

82k stars Go View on GitHubprofiled 11d ago
Try GitZoid
230PRs this week
3Contributors
0Deps scanned
0Issues found
01 · Repo overview

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

Go

Frameworks

gocui (vendored fork under pkg/gocui)tcell/v3flaggylogrusaferogo-errors

Infrastructure

goreleaser (.goreleaser.yml)DockerfileNix flake/shell.nix/default.nixdevcontainerMakefilejustfile

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.

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.

03 · Security check

Dependencies and code review

0 dependencies scanned

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