lazypodman

command module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 29, 2026 License: MIT Imports: 15 Imported by: 0

README ΒΆ

lazypodman

A lazier way to manage Podman from your terminal.

A fast, keyboard-driven terminal UI for Podman β€” containers, pods, images, volumes, networks, logs, stats and more, without leaving the shell.

CI Security Go Podman Release PRs welcome


lazypodman managing containers, images, volumes and live logs in the terminal

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

  • Go 1.25+ (to build from source)
  • Podman 5.x with the user API socket running, e.g.:
    systemctl --user enable --now podman.socket
    
    lazypodman auto-discovers $XDG_RUNTIME_DIR/podman/podman.sock (rootless) or /run/podman/podman.sock (rootful), and honours CONTAINER_HOST.
  • (optional) a Docker daemon, if you use the docker backend.

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.

Documentation ΒΆ

The Go Gopher

There is no documentation for this package.

Directories ΒΆ

Path Synopsis
pkg
app
config
Package config handles all the user-configuration.
Package config handles all the user-configuration.
domain
Package domain contains the value types exchanged between the runtime abstraction (pkg/runtime) and the rest of the application (pkg/commands, pkg/gui).
Package domain contains the value types exchanged between the runtime abstraction (pkg/runtime) and the rest of the application (pkg/commands, pkg/gui).
gui
log
runtime
Package runtime defines the abstraction that lazypodman uses to talk to a container engine.
Package runtime defines the abstraction that lazypodman uses to talk to a container engine.
runtime/podman
Package podman is the native Podman implementation of runtime.ContainerRuntime, built on Podman's Go bindings (github.com/containers/podman/v5/pkg/bindings).
Package podman is the native Podman implementation of runtime.ContainerRuntime, built on Podman's Go bindings (github.com/containers/podman/v5/pkg/bindings).
scripts
cheatsheet command
translations command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
⌂ 捒网址