What this is

A TUI for Kamal deployments, modeled after lazydocker. Arrow keys to navigate, Enter to act. No commands to remember.

Two modes: Project Mode reads your local config/deploy.yml and manages that app. Server Mode SSHes into any server, finds every Kamal-deployed container, and groups them by app. Server Mode doesn’t need Kamal installed on the server — it just talks to Docker.

Why I built it

I have multiple apps on one Hetzner VPS. Checking on them meant: cd to the right project, remember which kamal incantation to run, maybe SSH in to poke at containers, cd somewhere else, repeat. The friction was annoying enough that I’d avoid deploying unless I had to.

I wanted to open one thing and see everything.

What it does

You get a list of apps (or destinations, if you’re in project mode). Select one, see its containers and live status. Open a menu, pick a command — deploy, rollback, restart, logs, exec, whatever. Output streams into a panel. Press ? for help, Esc to go back.

Server Mode is the one I use daily. I have Tailscale, so I just run lazykamal -s repoengine-vps and I’m looking at everything regardless of which local directory I’m in.

Current state

Stable, feature-complete for my use case. Covers the full Kamal command surface. I’ve been using it in production for months.

The accessory grouping logic works well — it figures out that myapp-postgres belongs to myapp without hardcoding accessory names.

What’s next

Probably nothing dramatic. I want it to stay simple. Maybe better multi-server views, maybe quick Postgres shell access. I’ll add things if they fit the TUI paradigm and if I actually want them myself.

Technologies: Docker, Redis, PostgreSQL

Projects using this: RepoEngine, Sparrow

Blog Post: Running Multiple Apps on Hetzner with Kamal