Analytics cookies only (Google Analytics, PostHog). No ad networks, no cross-site tracking. See our privacy policy.
upstream: github.com/dokku/dokku (opens in new tab) · github.com/basecamp/kamal (opens in new tab)
Pick Dokku
If you want the platform on the server: a git push builds your app with buildpacks or a Dockerfile, with no registry needed.
Pick Kamal
If you want deployment defined in your repository (config/deploy.yml), nothing on the servers beyond Docker and kamal-proxy, and an SSH-based way to deploy the same app to several servers, accepting that you need a container registry and a Dockerfile. Both are MIT. Open-source Dokku has no web dashboard (the paid Dokku Pro adds one) and neither does Kamal.
Dokku and Kamal both give you a Heroku-style deploy on a server you rent, and
neither open-source project has a web dashboard (the paid Dokku Pro adds one for
Dokku). That is where the similarity ends. Dokku is a
platform you install onto the server: you git push to it and it builds and runs
your app. Kamal installs nothing platform-like on the server at all: you run
it from your workstation, and it builds an image, pushes it to a registry, then
connects over SSH to start the container. Both are MIT-licensed. We rate Dokku
2 out of 5 to deploy and Kamal 3 out of 5.
Dokku's own README calls it "Docker powered mini-Heroku". You bootstrap it on a
fresh VM (Ubuntu 22.04, 24.04 or 26.04, or Debian 11+ are listed), import an SSH
key, and from then on your laptop only needs a git remote. Dokku's git deployment
docs list three ways it can build what you push: Cloud Native Buildpacks, the
Herokuish buildpack, or your own Dockerfile. Configuration, domains and
plugins are all dokku commands on the server. The platform lives there, so the
server has a state worth backing up.
Kamal's README describes it as a way to "deploy web apps anywhere" with zero
downtime, using kamal-proxy to switch requests between containers and SSHKit
to run commands across servers. Everything is described in a config/deploy.yml
in your repository. The server needs Docker and an SSH user in the docker group;
there is no Kamal daemon to maintain. It was built for Rails apps but works with
anything you can containerise.
Kamal treats several servers as normal: the servers list in the config can name
more than one host, and roles let you separate web and job machines. Dokku's README
sets it up on a single VM, though its docs also describe a K3s scheduler that
lets you build a multi-node cluster. If you already know you will run an app on
two or three boxes, Kamal's config-in-repo model is the more direct fit. If you
run many small apps on one box, Dokku's shared server fits better.
Both can obtain Let's Encrypt certificates, with different limits. Kamal's docs say kamal-proxy provides automatic HTTPS when you deploy to one server with a host set and port 443 open. For more than one host you supply your own certificate. Dokku handles TLS and data stores through its plugin system, which you install and configure per app from the CLI.
Databases are a clear difference in philosophy. Kamal calls them accessories, and its docs say accessories are managed separately from the service: they are not updated when you deploy and have no zero-downtime deployment. Treat a Postgres accessory as a pet that needs its own backup plan.
Kamal pushes images to a registry that the target server can pull from. That is
extra setup that Dokku's git push does not have: a registry account (or a
registry you run), credentials in .kamal/secrets, and a Dockerfile that
answers a health check. The proxy waits for the app to return a 200 on
/up before routing traffic. In our test, the same machine acted as workstation
and server, so we started a local registry rather than let Kamal tunnel one,
because the default port collided.
Choose Dokku if you want the platform on the server, the shortest path from a git repository to a running site, and buildpacks so you do not have to write a Dockerfile.
Choose Kamal if you want deployment defined in your repository, no platform to run on the servers beyond Docker and kamal-proxy, and a plan to run the same app on more than one machine over SSH. Expect a registry and a Dockerfile.
Comparing the dashboard-driven options? See Dokku vs CapRover and Coolify vs Dokploy. The Dokku setup is in the deploy guide, and the SaaS being replaced is on our Heroku alternatives page. The Kamal page is here.
Dokku if you want a Heroku-style platform on the server where a git push builds and runs your app. Kamal if you want deployment defined in your repository and run from your workstation, possibly across several servers, using a container registry.
Yes. Kamal builds your image, pushes it to a registry and has each server pull it. Dokku can build on the server from a git push, with buildpacks or a Dockerfile.
Open-source Dokku and Kamal are both command-line only: Dokku is driven by commands on the server and Kamal by commands from your workstation against a config file. Dokku Pro, a paid add-on, adds a web UI.
Through accessories. Kamal's docs say accessories are managed separately from the service, are not updated on deploy and do not get zero-downtime deployments.
Paid link — we earn a commission if you shop through it.