Project Awesome project awesome

Terminal UI > wharf

A k9s-inspired TUI for Docker Compose with vim-style navigation, real-time CPU/MEM monitoring with braille charts, container file browser, SSH remote host support, and command mode. By @idesyatov

Package 2 stars GitHub

⚓ Wharf

CI Release Go Version Go Report Card License: MIT

A terminal UI for managing Docker Compose stacks. Inspired by k9s.

Wharf Demo

Features

  • Browse and manage Docker Compose projects and services
  • Compose up / stop / down / restart / build / validate
  • Docker Compose profiles support (:up <profile> / :up *)
  • 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
  • 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

Install (Linux/macOS)

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

Homebrew

brew tap idesyatov/tap
brew install wharf

Download binary

Download from GitHub Releases:

Platform Archive
Linux amd64 wharf-vX.X.X-linux-amd64.tar.gz
Linux arm64 wharf-vX.X.X-linux-arm64.tar.gz
macOS Intel wharf-vX.X.X-darwin-amd64.tar.gz
macOS Apple Silicon wharf-vX.X.X-darwin-arm64.tar.gz
Windows amd64 wharf-vX.X.X-windows-amd64.zip

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
Key Action Context
j/k// Navigate up/down All
h//Esc Go back All
l//Enter Select / drill down All
gg / G Jump to top / bottom All
16 Sort by column Tables
/ Filter / search All
? Help All
q / :q Quit All
s / S / r Start / Stop / Restart service Services
e Exec into container Services, Detail
L View logs Services, Detail
t Resource monitor (top) Projects, Services
F Browse container files Services, Detail
x Remove stopped container Services
H Host Switcher Projects
u Compose up Projects
d Compose stop Projects
X Compose down (removes containers) Projects
R Compose restart Projects
b / B Build service / all Services
c Compose file preview Services
e Edit compose file ($EDITOR) Compose
v / n Volumes / Networks Services
i Images Projects
E Docker events Projects
D System disk usage Projects
* Toggle bookmark Projects
y / Y Copy ID / full info Services, Detail
f Toggle log follow/pause Logs
w Export image to tar Images
P Prune Volumes, Images, System
Space Toggle select (bulk) Projects
Command Mode (press : then Tab to autocomplete)
Command Action
: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://)
:hosts Open Host Switcher view
:go <n> Jump to project by name
:exec <n> Exec into container by name
:validate [name] Validate compose file
:theme dark/light Switch theme
:version Show version info
:save [path] Save logs to file (Logs view)
:edit Edit compose file (Compose view)
:help Show 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:

Example Description
simple-web Single nginx container
multi-service App + worker + Redis + API
with-volumes Services with persistent volumes
with-profiles Compose profiles (debug, monitoring, test)

Tech Stack

Go + Bubbletea + Lipgloss + Docker SDK

Contributing

Contributions are welcome! See CONTRIBUTING.md for details.

License

MIT — see LICENSE.

Back to Docker