gamal is a partial Go port of Kamal 2.12,
with customizations for the way we deploy. It uses the same config/deploy.yml
format and kamal-proxy runtime contract, but is not a line-for-line port.
See History and comparison for its origins, design differences, and intentionally unsupported Kamal features.
Building requires Go 1.27+. Deploying requires Docker locally and on each target host, plus SSH access for remote targets.
git clone https://github.com/beint-no/gamal.git
cd gamal
make test
make install # installs ~/.local/bin/gamalTo start a new project, run gamal init. Existing Kamal 2.12 projects can keep
their config/deploy.yml, destination overlays, .kamal/secrets, and hooks.
Run gamal from the application root:
gamal doctor # check config and hosts
gamal plan --version="$version" # preview commands
gamal deploy --skip-hooks --version="$version" # deploy
gamal deploy -d staging --version="$version" # deploy a destination--version selects the application image version; gamal version prints the
CLI version. Use --hosts, --roles, or --primary to limit a command, and
--config-file to use a non-default config path.
For a same-host deployment, use the Docker builder driver. gamal builds into the local Docker engine and skips the registry push/pull round trip when every target is local.
| Command | Purpose |
|---|---|
deploy, redeploy, rollback, setup, remove |
Manage a rollout |
doctor, plan, config, details, audit |
Inspect before or after a rollout |
app … |
Manage application containers, logs, and commands |
proxy … |
Manage kamal-proxy |
build …, registry … |
Manage images and registry access |
lock …, prune …, server … |
Manage deployment infrastructure |
Run gamal help or gamal <command> --help for flags and subcommands.
gamal preserves Kamal's production-facing names and paths:
- Docker network and proxy container:
kamalandkamal-proxy - Proxy settings:
.kamal/proxy/options - App environment:
.kamal/apps/<service>/env/roles/<role>.env - Deploy lock:
.kamal/lock-<service>[-<destination>] - Container labels and names used by Kamal 2.12
This lets gamal manage deployments previously created by Kamal within its supported scope.