Skip to content
Start / What KamalCloud is

What KamalCloud is

A control plane for Kamal. Your cloud accounts, your servers, your Kamal config -- driven from one place.

KamalCloud is a control plane for Kamal. You connect a cloud provider and a git host, KamalCloud builds servers in your provider account, prepares a machine to run Kamal on, and runs kamal there against your repositories.

Everything KamalCloud creates is ordinary. The servers are ordinary Linux machines in your own project. The config is ordinary Kamal config. The containers are the ones Kamal boots. Nothing is wrapped in a proprietary runtime and nothing depends on KamalCloud being reachable for your apps to keep serving traffic.

What it does

  • Builds and keeps servers at Hetzner, DigitalOcean and AWS, or adopts machines you already have. It knows what each one costs, what it is running and whether it is secured.
  • Runs Kamal for you on a runner machine, from the official Kamal image, against a checkout of your repository at the branch you named.
  • Writes the destination config: config/deploy.<environment>.yml and .kamal/secrets.<environment>, placed next to your repository’s own deploy.yml.
  • Handles the things around a deploy: databases and caches, volumes, backups to S3, scheduled tasks, domains, certificates, published ports, maintenance mode and rollbacks.
  • Tells you when something breaks, on email, Slack, Discord or a webhook of your own.
  • Answers questions without a browser, through a read-only API and a CLI. Anything that would change something is proposed and waits for a person to approve it.

What it does not do

  • It does not run your traffic. Requests go to your servers, through kamal-proxy, and never through KamalCloud.
  • It does not write DNS. It checks whether a record resolves where it should and tells you if it does not.
  • It does not replace your deploy.yml. It reads the one in your repository for the shape of the app – roles, service name, proxy settings – and writes a destination file beside it.
  • It does not hold a root password. Machines are reached with SSH keys the account owns.

The shape of it

Account
 ├─ Provider connection ── Servers        machines at one provider project
 ├─ Git connection                        GitHub, GitLab, Gitea or Bitbucket
 ├─ Runner                                the box Kamal runs on
 └─ App ── Environment                    an environment is a Kamal destination
              ├─ Hosts       servers, each placed in a Kamal role
              ├─ Variables   plain and secret
              ├─ Domains     what kamal-proxy answers for
              ├─ Accessories databases and caches, with backups
              ├─ Volumes     data the containers mount, with backups
              ├─ Tasks       commands on a schedule
              └─ Deployments one run of Kamal each

Read Concepts for what each of those means, or go straight to the Quickstart.