Overview

kimbap is a self-hosted Go application for deploying and managing docker-compose projects on a single host. Think of it as a lean, Go-native alternative to Coolify, Dokploy, or CapRover: point it at a fresh Linux server, and it can install Docker itself, run a web UI for creating and managing projects, front everything with an automatically-SSL'd Traefik reverse proxy, and expose an MCP server so Claude can manage the host directly.

What it does

Architecture, in one paragraph

kimbap runs as a native binary + systemd service — never as a Docker container itself. This is deliberate: kimbap needs to be able to install Docker onto a host where Docker doesn't exist yet, and a containerized kimbap couldn't do that (it would need the very engine it's trying to install). Once Docker exists, kimbap manages a Traefik container in front of itself and every project it deploys. Traefik reaches kimbap's own UI through a file provider route (since kimbap isn't a container Traefik's Docker provider can discover), and reaches project containers through the Docker provider (label-based auto-discovery). See Domains & TLS for the full mechanism.

Where things live on disk

/var/lib/kimbap/
├── kimbap.db                 # sqlite: users, sessions, API keys, project registry, domains, audit log
├── projects/<slug>/
│   ├── docker-compose.yml               # yours — kimbap never rewrites this
│   ├── docker-compose.kimbap-labels.yml # auto-generated Traefik routing (only when the project has domains)
│   └── .env
└── traefik/
    ├── docker-compose.yml    # kimbap-managed Traefik service
    ├── traefik.yml           # static config
    ├── acme.json             # Let's Encrypt certificate storage
    └── dynamic/kimbap-ui.yml # routes kimbap's own UI

Next steps

Install