A blazingly fast, beautifully minimal Terminal User Interface for Docker management
tinyd (Terminal UI Kit) is an interactive terminal-based Docker management tool that transforms Docker operations into a delightful keyboard-driven experience. Built entirely in Go, it provides a clean, minimalist alternative to Docker CLI commands and Docker Desktop GUI.
Philosophy: "The best interface is no interface at all"
Repository: https://github.com/jalonsogo/tinyd
- Language: Go 1.24.5
- UI Framework: Bubble Tea (Charm.sh)
- Styling: Lipgloss
- Docker Integration: Moby Client SDK
- Bubble Tea v1.3.10 - Terminal UI framework
- Lipgloss v1.1.0 - Style and formatting
- Moby Client v0.2.2 - Official Docker SDK
- Charm.sh Suite - Terminal utilities (ansi, cellbuf, term, colorprofile)
- OpenTelemetry - Telemetry and tracing
- Real-time monitoring with live CPU and memory stats
- Start/Stop/Restart containers with single keypress
- Browser integration - Open exposed ports directly
- Interactive logs - Full-screen scrollable view with fuzzy search
- Console access - Interactive shell with altscreen technology
- Deep inspection - Stats, mounts, configuration details
- Safe deletion - With confirmation modal
- Browse all Docker images with size and creation date
- Layer-by-layer inspection
- View architecture and configuration
- Filter by status (All/In Use/Unused/Dangling)
- Run containers from images (interactive modal)
- Pull images from registry
- Delete with force option
- Volume inventory with driver and scope info
- Real-time container tracking
- Volume inspection and statistics
- Safe volume deletion
- View all Docker networks with connection status
- Filter active vs. unused networks
- IPv4/IPv6 subnet information
- Network inspection and container connectivity
| Key | Action |
|---|---|
β/β or k/j |
Move selection up/down |
β/β or h/l |
Switch tabs |
1-4 |
Jump directly to tab |
Enter |
Refresh current view |
ESC |
Return to list |
q or Ctrl+C |
Quit application |
| Key | Action |
|---|---|
s |
Start/Stop containers (toggle) |
r |
Restart running containers |
c |
Open interactive shell |
o |
Open exposed ports in browser |
l |
View logs (last 100 lines) |
i |
Inspect resource details |
D |
Delete with confirmation |
R |
Run new container from image |
P |
Pull new Docker image |
f |
Open filter/search modal |
F1 |
Toggle help screen |
The application follows a clean component-based architecture with six core UI components:
- HeaderComponent - Top header bar with title
- TabsComponent - Tab navigation with visual active state
- StatusLineComponent - Status information and counts
- TableComponent - Tabular data with headers and rows
- ActionBarComponent - Bottom action bar with shortcuts
- DetailViewComponent - Logs and inspect detail views
// Docker Resources
type Container struct {
ID, Name, Status, CPU, Mem, Image, Ports string
}
type Image struct {
ID, Repository, Tag, Size, Created string
InUse, Dangling bool
}
type Volume struct {
Name, Driver, Mountpoint, Scope, Created, Containers string
InUse bool
}
type Network struct {
ID, Name, Driver, Scope, IPv4, IPv6 string
InUse bool
}
// Application State
type model struct {
activeTab, selectedRow, scrollOffset, viewportHeight int
containers, images, volumes, networks []Resource
dockerClient *client.Client
// ... modal states, filters, etc.
}- viewModeList - Main resource listing
- viewModeLogs - Container logs viewer
- viewModeInspect - Deep resource inspection
- viewModePortSelector - Port selection for browser
- viewModeStopConfirm - Delete confirmation
- viewModeFilter - Filter/search modal
- viewModeRunImage - Run container modal
- viewModePullImage - Pull image modal
- Component Isolation - Each UI element is independent and reusable
- Immutable Updates - State changes create new instances
- Separation of Concerns - UI components vs. business logic
- Terminal Responsiveness - Real-time resizing support
- Minimalist UI - Classic terminal aesthetics (unicode, colors)
- Efficient Rendering - String builders for fast output
- Modal Overlays - Clean dimmed background for dialogs
- Adapts to any terminal size (minimum: 60 cols Γ 13 rows)
- Dynamic layout recalculation on resize
- Interactive shell with toolbar preservation
- Seamless transition between UI and shell
- Run containers with custom configuration
- Pull images from registry
- Delete confirmations with inline UI
- Real-time search/filter for resources
- Case-insensitive substring matching
- Auto-scroll for large resource lists
- Viewport-aware navigation
- π’ Green dot - Running containers
- βͺ Gray dot - Stopped/inactive
- π‘ Yellow - Dangling images
Works seamlessly with:
- VSCode integrated terminal
- iTerm2
- Alacrity
- Wezterm
- tmux
- SSH sessions
- Standard terminal emulators
- Local Docker - Default connection to local daemon
- Remote Docker - Support via
DOCKER_HOSTenvironment variable - Docker Desktop - Automatic detection on macOS/Windows
Uses official Moby Client SDK for:
- Container lifecycle management
- Image operations and inspection
- Volume management
- Network configuration
- Real-time stats and logs
- Full-screen logs view with scrolling
- Fuzzy search in logs (case-insensitive)
- Pull image functionality with interactive modal
- Case-insensitive keyboard shortcuts
- Transparent terminal support
- Delete confirmation modals with inline UI
- Modal overlay system with clean rendering
- Container status display improvements
- Enhanced error handling and panic safety
tinyd/
βββ main.go # Core app logic (4,645 lines)
βββ components.go # Reusable UI components (556 lines)
βββ go.mod & go.sum # Dependency management
βββ README.md # Project documentation
βββ CHANGELOG.md # Feature history
βββ tinyd.png # Screenshot
β
βββ docs/ # Comprehensive documentation
βββ ARCHITECTURE.md # Component-based design
βββ INTERACTIVE_FEATURES.md
βββ CONSOLE_FEATURE.md
βββ TAB_NAVIGATION.md
βββ TABS_GUIDE.md
βββ SCROLLING_FEATURE.md
βββ DOCKER_INTEGRATION.md
git clone https://github.com/jalonsogo/tinyd.git
cd tinyd
go build -o tinyd
./tinyd- Go 1.24.5 or higher
- Docker daemon running
- Terminal with unicode support
- Minimum terminal size: 60 cols Γ 13 rows
tinyd embraces:
- Minimalism - Only essential features, no bloat
- Performance - Blazingly fast, instant feedback
- Keyboard-first - No mouse required
- Unix Philosophy - Do one thing well
- Developer Experience - Clean code, good documentation
Potential enhancements:
- Docker Compose support
- Container statistics graphs
- Custom themes and color schemes
- Multi-host management
- Export/import container configurations
- Kubernetes integration
Open for contributions and feedback.
Maintainer: Javier Alonso Repository: https://github.com/jalonsogo/tinyd
