⚓ Wharf

June 24, 2026 · View on GitHub

CI Release Go Version Go Report Card License: MIT

A terminal UI for managing Docker containers and Compose stacks — a single static Go binary with vim-style navigation, live resource charts, log streaming, and exec, all without leaving the terminal. Inspired by k9s.

Wharf Demo

Why Wharf?

If you live in the terminal and juggle docker ps, docker compose logs -f, docker stats, and docker exec in separate panes, Wharf folds all of it into one interactive screen:

  • See everything at once — all Compose projects, services, and standalone docker run containers in one navigable list, with live status, CPU, and memory. No memorizing container names or IDs.
  • Monitor in real time — braille CPU/MEM/Network charts right in the TUI, no Grafana required.
  • Act without typing commands — up/down/restart/build, stream logs, exec into a shell, browse files inside a container — all one keypress away.
  • Local and remote — point Wharf at a remote Docker host over SSH (:host ssh://user@server) and manage it the same way.
  • Zero setup — single binary, no daemon, no config file needed to start. Vim keys (hjkl, gg/G, /, :).

Features

  • Browse and manage Docker Compose projects and services
  • Compose up / stop / down / restart / build / validate
  • Docker Compose profiles support (:up <profile> / :up *)
  • Standalone containers — manage docker run containers in a virtual (standalone) project
  • Exec into containers with shell banner
  • Real-time CPU/MEM/Network monitoring with braille charts (Top View)
  • Stream container logs with follow/pause and search
  • Browse files inside containers (File Browser)
  • Edit compose files with your $EDITOR
  • Inspect container details — ports, volumes, environment, networks, health checks
  • Manage volumes, networks, and images
  • Docker System overview with disk usage
  • Live Docker events monitoring
  • Custom commands from config with template variables
  • Command mode with Tab-autocomplete (:exec, :go, :validate, :theme, :host, :up...)
  • Remote Docker host via SSH (:host ssh://user@server)
  • Host Switcher (H) — saved hosts with add/delete, connect by name
  • Filter stopped standalone containers (toggle a — show all / active only)
  • Auto-hide Docker Desktop internal containers
  • Bookmark favorite projects (★), bulk operations (Space)
  • Vim-style navigation (hjkl, gg/G, /, :q, arrows)
  • Customizable themes (dark/light/custom YAML)
  • Single binary, zero dependencies

Quick Start

# Linux / macOS — install and run
curl -sL https://raw.githubusercontent.com/idesyatov/wharf/master/scripts/install.sh | bash
wharf

See the sections below for other install methods, keybindings, command mode, and configuration.

Installation

Install script (Linux/macOS)

curl -sL https://raw.githubusercontent.com/idesyatov/wharf/master/scripts/install.sh | bash

Installs to /usr/local/bin as root, or ~/.local/bin as a regular user.

Homebrew

brew tap idesyatov/tap
brew install wharf

Docker

docker pull ghcr.io/idesyatov/wharf:latest

Download binary

Download from GitHub Releases:

PlatformArchive
Linux amd64wharf-vX.X.X-linux-amd64.tar.gz
Linux arm64wharf-vX.X.X-linux-arm64.tar.gz
macOS Intelwharf-vX.X.X-darwin-amd64.tar.gz
macOS Apple Siliconwharf-vX.X.X-darwin-arm64.tar.gz
Windows amd64wharf-vX.X.X-windows-amd64.zip
Docker (any)docker pull ghcr.io/idesyatov/wharf:latest

From source

git clone https://github.com/idesyatov/wharf.git
cd wharf
make docker-build-all    # Go not required — builds via Docker
Usage
wharf            # start TUI
wharf --version  # show version
wharf --config   # show config path and current settings
Keybindings
KeyActionContext
j/k//Navigate up/downAll
h//EscGo backAll
l//EnterSelect / drill downAll
gg / GJump to top / bottomAll
16Sort by columnTables
/Filter / searchAll
aToggle show all / active onlyProjects, Services (standalone)
?HelpAll
q / :qQuitAll
s / S / rStart / Stop / Restart serviceServices
eExec into containerServices, Detail
LView logsServices, Detail
tResource monitor (top)Projects, Services
FBrowse container filesServices, Detail
xRemove stopped containerServices
HHost SwitcherProjects
uCompose upProjects
dCompose stopProjects
XCompose down (removes containers)Projects
RCompose restartProjects
b / BBuild service / allServices
cCompose file previewServices
eEdit compose file ($EDITOR)Compose
v / nVolumes / NetworksServices
iImagesProjects
EDocker eventsProjects
DSystem disk usageProjects
*Toggle bookmarkProjects
y / YCopy ID / full infoServices, Detail
fToggle log follow/pauseLogs
wExport image to tarImages
PPruneVolumes, Images, System
SpaceToggle select (bulk)Projects
Command Mode (press : then Tab to autocomplete)
CommandAction
:q / :q!Quit
:up [profile]Compose up with profile (:up debug, :up * for all)
:down [profile]Compose down with profile (:down debug, :down *)
:host [name/url]Show / switch Docker host by name or URL (ssh://, tcp://)
:hostsOpen Host Switcher view
:go <n>Jump to project by name
:exec <n>Exec into container by name
:validate [name]Validate compose file
:theme dark/lightSwitch theme
:versionShow version info
:save [path]Save logs to file (Logs view)
:editEdit compose file (Compose view)
:helpShow help
Custom Commands

Define custom commands in config — they appear in Services View menu bar:

# ~/.config/wharf/config.yaml
custom_commands:
  - name: "Rails Console"
    key: "1"
    command: "docker exec -it {{.ContainerID}} rails console"
  - name: "Run Tests"
    key: "2"
    command: "docker exec -it {{.ContainerID}} bundle exec rspec"

Template variables: {{.ContainerID}}, {{.ContainerName}}, {{.Image}}, {{.ProjectName}}, {{.ProjectPath}}

Configuration
# ~/.config/wharf/config.yaml
poll_interval: 2s
log_tail: 100
max_log_lines: 1000
theme: dark
docker_host: ""
mouse: false
bookmarks:
  - my-project
hosts:
  - name: "prod"
    url: "ssh://deploy@prod.example.com"
  - name: "staging"
    url: "ssh://deploy@staging.srv"
keybindings:
  quit: "ctrl+q"

Custom themes: ~/.config/wharf/themes/<n>.yaml

Examples

See examples/ for sample compose projects:

ExampleDescription
simple-webSingle nginx container
multi-serviceApp + worker + Redis + API
with-volumesServices with persistent volumes
with-profilesCompose profiles (debug, monitoring, test)

Tech Stack

Go + Bubbletea + Lipgloss + Docker SDK

Contributing

Contributions are welcome! See CONTRIBUTING.md for details.

License

MIT — see LICENSE.