jesseduffield/lazydocker
62.5
Adequate · 24 September 2026
9.7k
lines of production code
Go
primary language
5
measurements over time
What this system is
Lazydocker is a terminal-based user interface for Docker and Docker Compose, providing a modular, panel-driven experience for managing containers, images, and services. The system supports multi-language localization, automated documentation generation, and cross-platform configuration. It features a robust background task manager for safe cancellation and structured logging, alongside utilities for SSH tunneling and platform-specific defaults.
Features
Add translation audit script
A new Go script, get\_required\_translations.go, has been added to the scripts/translations directory. This utility scans the application's i18n translation sets and outputs a list of missing or empty translation strings for each language, helping identify gaps in localization coverage.
scripts/translations · high confidence
Added cheatsheet generation and validation scripts
A new Go script has been added to the repository to automate the generation and validation of cheatsheets. Users and developers can now run the 'generate' command to create cheatsheets or the 'check' command to verify that existing cheatsheets are up to date, facilitating automated CI checks for consistency.
scripts/cheatsheet · medium confidence
Automated Linux installation and update script
A new shell script, install\_update\_linux.sh, is added to automate downloading and installing the latest version of lazydocker for Linux. The script detects the system architecture (mapping i386, armv6, armv7, and aarch64 to their respective binary variants) and installs the binary to a configurable directory (defaulting to $HOME/.local/bin).
scripts · high confidence
Automated generation and CI validation of keybindings cheatsheets
The \pkg/cheatsheet\ package now provides tooling to automatically generate Markdown keybindings cheatsheets for each supported language and validates that the generated files in \docs/keybindings\ are up to date. The \generate.go\ file contains the logic to iterate over all translation sets, collect global and view-specific keybindings (including a new 'networks' section), and write formatted Markdown files. The \validate.go\ file implements a \Check\ function that regenerates the cheatsheets into a temporary directory and compares them against the committed versions, failing the CI if they are out of date. This ensures the documentation stays in sync with the application's current keybindings.
pkg/cheatsheet · high confidence
Expanded language support with new translations
The application now supports Chinese, Dutch, Polish, Portuguese, Spanish, and Turkish in addition to existing languages. Users can configure their preferred language via the \gui.language\ config option, or the app will automatically detect the system language. All UI strings, status messages, and confirmation prompts are now localized for these new languages.
pkg/i18n · high confidence
Initial CI configuration for Go builds and documentation updates
The project introduces a new CircleCI configuration that establishes a build matrix testing against Go 1.17 and the latest Go version, utilizing a shared environment with vendor mode enabled. The pipeline includes steps for code formatting checks, running tests, and compiling binaries for multiple platforms including Linux, FreeBSD, and Windows. Additionally, a release workflow is defined to trigger on version tags, which installs Snapcraft dependencies, runs GoReleaser, and automatically updates documentation by running a script that generates cheatsheets and commits changes to the master branch.
.circleci · high confidence
Initial release of Lazydocker with Docker-based build and CLI interface
This change introduces the initial version of Lazydocker, a terminal UI for Docker and Docker Compose. The release includes a new Dockerfile that builds the Go application and bundles the Docker CLI binary into a minimal 'scratch' image, providing a lightweight containerized experience. The application's entry point (main.go) is established with a full command-line interface using the flaggy library, supporting flags for configuration, debugging, and compose file selection. Additionally, the repository is initialized with essential project files including a MIT license, code of conduct, contributing guidelines, and a .gitignore configuration.
(repo-wide) · high confidence
Introduce App struct and error mapping for Docker socket access
Added a new App struct in pkg/app/app.go that bootstraps the application, initializing components like the GUI, Docker command handler, and translation set. The App struct also includes a KnownError method that maps raw Docker permission denied errors to user-friendly messages, preventing panics on Unix connection failures.
pkg/app · high confidence
New string formatting and table rendering utilities
Added new utility functions for string manipulation and display, including ColoredString and ColoredYamlString for applying terminal colors (supporting light theme defaults), WithPadding for alignment, and RenderTable for generating formatted text tables. These utilities also handle line normalization and placeholder resolution, with corresponding tests added to ensure correct behavior.
pkg/utils · high confidence
Refactor Docker command layer with new structs and SSH tunneling support
The \pkg/commands\ package was restructured to use dedicated structs for Docker entities (Container, Service, Image, Volume, Network, Project) and a central \DockerCommand\ interface. This refactor introduces a new \SSHHandler\ that automatically creates an SSH tunnel when the \DOCKER\_HOST\ environment variable uses the \ssh://\ scheme, allowing the client to connect to remote Docker daemons over SSH. The \DockerCommand\ now manages a \Closers\ list to ensure SSH tunnels are properly cleaned up. Additionally, the codebase adds new files for OS command execution, error handling, and platform-specific defaults, while removing the previous monolithic command structure.
pkg/commands · high confidence
Behavioural changes
Complete config schema overhaul and platform-specific defaults
The application's configuration system has been completely rewritten, introducing a new \UserConfig\ struct with granular settings for the GUI (e.g., \screenMode\, \border\ styles, \language\), logs, command templates, and custom commands. This change also introduces platform-specific default configurations for opening files and links (using \xdg-open\ on Linux, \open\ on macOS, and \start\ on Windows), and adds unit tests to verify the new configuration loading and persistence logic.
pkg/config · high confidence
Major GUI refactoring and new panel system
The terminal UI has been significantly refactored to use a new \panels\ package for list-based views, introducing a more modular architecture for the containers, images, services, and other side panels. This change brings consistent filtering, sorting, and tabbed main-view support across all list panels. Additionally, the application now supports a view stack for navigation, allowing users to return to the previous panel after using subcommands or confirmation prompts. The layout engine has been updated to use a new \boxlayout\ system, enabling more flexible window arrangements and responsive resizing. A new \appStatusManager\ provides a consistent way to display waiting statuses and loader animations during background tasks.
pkg/gui · high confidence
New task management system with safe cancellation and periodic task support
The application now uses a new TaskManager and Task system in pkg/tasks to handle background operations. This change introduces safe cancellation of running tasks to prevent orphan processes and includes a NewTickerTask helper for periodic tasks. The implementation uses context-based cancellation and mutexes to ensure thread-safety and proper cleanup, addressing previous issues with CPU usage and deadlocks.
pkg/tasks · medium confidence
Replace custom logging with structured logrus logger
The logging subsystem has been refactored to use the logrus library for structured logging. The new implementation distinguishes between development and production environments: in development, logs are written to a file (development.log) with debug-level verbosity, while in production, logs are discarded and only error-level messages are retained. The logger is configured to output JSON format and includes metadata fields for debug status, version, commit, and build date. This change removes the previous unconditional logging profile and associated configuration, streamlining the logging behavior.
pkg/log · high confidence
Updated Microsoft go-winio vendor package
The \github.com/Microsoft/go-winio\ package in the vendor directory has been updated. This change includes the addition of new files such as \.gitattributes\, \.gitignore\, \.golangci.yml\, \README.md\, \SECURITY.md\, and various Go source files (e.g., \backup.go\, \ea.go\, \file.go\, \hvsock.go\) that provide utilities for Win32 IO operations, including named pipes, file handling, and Hyper-V sockets.
vendor · high confidence
Test coverage
Added test infrastructure for the demo Docker Compose project
Added a new Dockerfile, a docker-compose.yml configuration, and a helper shell script in the test directory to support the demo Docker Compose project. This provides the necessary test environment and utilities for running the demo services.
test · high confidence
Dependencies
Update Go dependencies and add OpenTelemetry requirements
The project's Go dependencies have been updated, including the Docker SDK (v28.5.2) and various utility libraries like logrus and testify. Additionally, a requirements.txt file was added for the OpenTelemetry vendor directory, specifying codespell version 2.3.0.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 59 → 62 (+3.2)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 95 → 95 (+0.3)
- Architecture 100 → 96 (-3.6)
- Maturity 54 → 54 (-0.0)
- Readiness 61 → 68 (+7.0)
- Security 52 → 59 (+7.1)
Resolved (37)
- Critical CVE: [GHSA redacted] (go.mod)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- Duplicated block (10 lines × 2) (pkg/gui/services_panel.go)
- Duplicated block (11 lines × 2) (pkg/gui/services_panel.go)
- Duplicated block (13 lines × 2) (pkg/utils/utils.go)
- Duplicated block (15 lines × 2) (pkg/gui/view_helpers.go)
- Duplicated block (5 lines × 2) (pkg/gui/networks_panel.go)
- High CVE: [GHSA redacted] (go.mod)
- High CVE: [GHSA redacted] (go.mod)
- High CVE: [GHSA redacted] (go.mod)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- …and 17 more
New (130)
- Critical CVE: [GHSA redacted] (go.mod)
- Dependency pinned to a stale untagged commit: github.com/OpenPeeDeeP/xdg
- Dependency pinned to a stale untagged commit: github.com/boz/go-throttle
- Dependency pinned to a stale untagged commit: github.com/cloudfoundry/jibber_jabber
- Dependency pinned to a stale untagged commit: github.com/jesseduffield/asciigraph
- Dependency pinned to a stale untagged commit: github.com/jesseduffield/kill
- Dependency pinned to a stale untagged commit: github.com/jesseduffield/lazycore
- Dependency pinned to a stale untagged commit: github.com/jesseduffield/yaml
- Dependency pinned to a stale untagged commit: github.com/mcuadros/go-lookup
- Dependency pinned to a stale untagged commit: github.com/spkg/bom
- Dependency pinned to a stale untagged commit: golang.org/x/xerrors
- Documentation: no contributor guidance
- Documentation: no installation or build instructions
- Documentation: no installation or build instructions (README.md)
- Documentation: no usage examples
- Documentation: no usage examples (README.md)
- Duplicated block (10 lines × 3) (pkg/gui/images_panel.go)
- Duplicated block (12 lines × 2) (pkg/gui/services_panel.go)
- Duplicated block (13 lines × 2) (pkg/gui/gocui.go)
- Duplicated block (13 lines × 2) (pkg/utils/utils.go)
- …and 110 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
jesseduffield/lazydocker was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 7e7aadc2071d58031bf2daafca1fbd4093efc23f — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-923689c465cf.