What is this?
lazypodman is a hard fork of the excellent jesseduffield/lazydocker, re-engineered to talk to Podman natively via its Go bindings (github.com/containers/podman/v5/pkg/bindings) β not through the Docker-compatibility shim. It keeps lazydocker's snappy TUI and adds the features that make Podman worth using on its own terms: pods, generate kube, and quadlets.
Podman is the default backend. Docker remains available as a fallback for mixed environments.
Highlights
- π¦ Native Podman backend β speaks the Podman API directly (rootless socket auto-discovered); no
DOCKER_HOST shim required.
- π¦ Pods panel β list, inspect, remove and prune pods; export any pod to Kubernetes YAML (
podman generate kube) from a dedicated tab.
- βοΈ Quadlets β see your
systemd quadlet units and start/stop/restart them.
- π³ Docker fallback β set
runtime: docker (or LAZYPODMAN_RUNTIME=docker) to drive a Docker daemon instead.
- π§° Everything you expect β containers, images, volumes, networks, logs, stats, exec, inspect, prune, custom & bulk commands.
- πͺΆ Single static binary β builds CGO-free; nothing to install on the host but the engine.
Podman-only features (pods, kube export, quadlets) appear in the UI only when the active backend supports them β they are exposed through optional capability interfaces and stay hidden on Docker.
Requirements
Install
Released binary (Linux/macOS)
Once a release is published, install or update the latest binary into ~/.local/bin:
curl -fsSL https://raw.githubusercontent.com/ClaraVnk/lazypodman/main/scripts/install_update_linux.sh | bash
Pre-built archives for Linux, macOS and Windows (amd64/arm64) are attached to each GitHub Release.
Build from source
git clone https://github.com/ClaraVnk/lazypodman.git
cd lazypodman
CGO_ENABLED=0 go build -mod=vendor \
-tags 'containers_image_openpgp exclude_graphdriver_btrfs exclude_graphdriver_devicemapper remote' \
-o lazypodman .
./lazypodman
The build tags are required: they build the Podman bindings tree without the storage graph drivers that need C libraries, keeping the binary CGO-free and portable.
Usage
./lazypodman # native Podman (default)
LAZYPODMAN_RUNTIME=docker ./lazypodman # Docker backend
Navigate panels with the number keys ([1]β[7]) or the arrows; press x for the menu and b for bulk commands. Full keybinding cheatsheets live in docs/keybindings/.
Backend selection
| Source |
Value |
Notes |
Env var LAZYPODMAN_RUNTIME |
podman | docker |
highest precedence |
Config runtime: |
podman | docker |
in your lazypodman config |
| (default) |
podman |
|
Architecture
The TUI never talks to an engine SDK directly β it goes through a runtime.ContainerRuntime interface that deals in lazypodman-owned domain types. Two backends implement it (pkg/runtime/podman, pkg/runtime/docker), and Podman-only features are layered on as optional capability interfaces (PodRuntime, KubeGenerator, QuadletManager) that callers discover via type assertions.
The design decisions are recorded as ADRs in docs/adr/:
| ADR |
Topic |
| 0001 |
Hard fork from lazydocker |
| 0002 |
Phased port: Docker SDK β Podman bindings |
| 0003 |
Runtime interface & domain types |
| 0004 |
Staged rewire of pkg/commands |
| 0005 |
Native Podman backend |
| 0006 |
Pods & optional capability interfaces |
| 0007 |
Quadlets management |
Project status
The port is functionally complete: the runtime abstraction, the native Podman backend, the default flip to Podman, and the Podman-native features (pods + kube export in the UI, quadlets at the runtime layer) are all in. A dual-backend compliance suite gates parity in CI.
Roadmap odds and ends: a Quadlets UI panel, quadlet enable/disable (autostart), published release binaries, and eventually renaming the Go module once Podman has been the default for a release cycle.
Contributing
Issues and PRs are welcome. Before opening a PR:
TAGS='containers_image_openpgp exclude_graphdriver_btrfs exclude_graphdriver_devicemapper remote'
GOFLAGS="-mod=vendor -tags=$TAGS" go build ./...
GOFLAGS="-mod=vendor -tags=$TAGS" go test ./...
bash ./test.sh # race + coverage
CI runs lint (golangci-lint v2), format, tests on Linux + Windows, a build matrix, govulncheck, gitleaks, and the dual-backend compliance suite. Keep commits atomic and use Conventional Commits.
Credits
A hard fork of jesseduffield/lazydocker (MIT). All credit for the original TUI, design and the bulk of the codebase goes to Jesse Duffield and the lazydocker contributors. π
Contributors
Thanks to everyone who has contributed to lazypodman:
- @kallioli β Podman runtime fixes and test coverage
License
MIT Β© 2026 Clara Vanacker β and the original lazydocker authors.