beint-no/gamal

Kamal-protocol deploy CLI in Go: same config/deploy.yml and kamal-proxy, single static binary.

0

stars

7

commits

Go

primary language

Sep 6, 2026

updated

deploy
docker
go
golang
kamal

README

gamal

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.

Install

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/gamal

To start a new project, run gamal init. Existing Kamal 2.12 projects can keep their config/deploy.yml, destination overlays, .kamal/secrets, and hooks.

Deploy

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.

Commands

CommandPurpose
deploy, redeploy, rollback, setup, removeManage a rollout
doctor, plan, config, details, auditInspect 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.

Runtime compatibility

gamal preserves Kamal's production-facing names and paths:

  • Docker network and proxy container: kamal and kamal-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.

Contributors

gregjotau

7 commits

beint-no/gamal

Kamal-protocol deploy CLI in Go: same config/deploy.yml and kamal-proxy, single static binary.

0

stars

7

commits

Go

primary language

Sep 6, 2026

updated

deploy
docker
go
golang
kamal

README

gamal

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.

Install

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/gamal

To start a new project, run gamal init. Existing Kamal 2.12 projects can keep their config/deploy.yml, destination overlays, .kamal/secrets, and hooks.

Deploy

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.

Commands

CommandPurpose
deploy, redeploy, rollback, setup, removeManage a rollout
doctor, plan, config, details, auditInspect 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.

Runtime compatibility

gamal preserves Kamal's production-facing names and paths:

  • Docker network and proxy container: kamal and kamal-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.

Contributors

gregjotau

7 commits

Languages

Go

99.8%