No description
- Go 99.5%
- Nix 0.5%
Both operations run asynchronously and display the first line of git's output (captured from combined stdout+stderr) in the status bar. Push uses the configured default branch with --set-upstream. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| compose | ||
| config | ||
| git | ||
| ollama | ||
| remotes | ||
| stacks | ||
| ui | ||
| .envrc | ||
| .gitignore | ||
| flake.lock | ||
| flake.nix | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
stack-browser
A terminal UI for browsing and managing Docker Compose stacks.
Features
- Stack browser — navigate all stacks in a configured directory
- Service summary — glanceable overview of each container (image, ports, restart policy, container name)
- Service detail editor — drill into any service and edit its configuration; changes write back to the compose file
- Compose file viewer/editor — syntax-highlighted view with inline editing
- .env file viewer/editor — view and edit environment variables alongside the compose file
- Git management — per-stack git operations from within the TUI:
- Initialise a repository, set or change the remote URL
- Stage individual files and commit with a hand-written or AI-generated message
- AI commit messages via Ollama (diff is sent to your configured model)
.gitignoreeditor — add/remove entries;.envis automatically ignored on repo init- Remote repository creation (GitHub supported; GitLab/Gitea stubbed)
- Settings UI — configure everything without touching the config file
Requirements
- Go 1.21+
- Git (must be on
$PATH) - Docker Compose stacks in a local directory (default:
~/stacks) - Ollama (optional — only needed for AI commit messages)
Installation
git clone https://github.com/nimmo/stack-browser
cd stack-browser
go build -o stack-browser .
For NixOS / Nix with flakes:
nix build
Or drop into a dev shell:
nix develop
Usage
./stack-browser
Navigation
| Key | Action |
|---|---|
↑ / ↓ |
Move through stack list |
← / → |
Switch tabs (Summary / Compose / .env / Git) |
tab |
Toggle focus between stack list and content panel |
enter |
Open service detail (from Summary tab) |
, |
Open settings |
q / ctrl+c |
Quit |
Summary tab
| Key | Action |
|---|---|
↑ / ↓ |
Navigate services |
enter |
Open service detail editor |
Git tab
| Key | Action |
|---|---|
i |
Toggle between staged files and .gitignore (when repo exists) / initialise repo |
↑ / ↓ |
Navigate file list |
space |
Toggle file staged / ignored |
A |
Select all files |
r |
Edit remote URL |
a |
Generate commit message via Ollama |
m |
Focus commit message input |
enter |
Confirm / commit |
n |
Add new .gitignore entry (when in .gitignore section) |
d |
Delete .gitignore entry (when in .gitignore section) |
esc |
Go back / cancel |
Configuration
Settings are stored at ~/.config/stack-browser/config.toml and can be edited
via the built-in settings screen (,).
| Setting | Default | Description |
|---|---|---|
stacks_dir |
~/stacks |
Directory containing your stacks |
ollama.host |
192.168.8.124 |
Ollama host |
ollama.port |
11434 |
Ollama port |
ollama.model |
qwen3.5:122b |
Model used for commit message generation |
git.default_base_url |
— | Pre-filled base URL for new remotes (e.g. github.com) |
git.default_user |
— | Pre-filled username for new remotes |
git.access_token |
— | Token used to create remote repositories |
git.default_branch |
main |
Default branch name for new repositories |
git.auto_ignore_env |
true |
Automatically add .env to .gitignore on repo init |
Stack directory layout
Each subdirectory of stacks_dir is treated as a stack:
~/stacks/
├── nextcloud/
│ ├── docker-compose.yml
│ └── .env
├── jellyfin/
│ ├── compose.yaml
│ └── .env
└── traefik/
└── docker-compose.yml
Supported compose filenames (in order of preference):
docker-compose.yml, docker-compose.yaml, compose.yml, compose.yaml