Kamal vs Dokku: Deployment choices for 2026
Deployment teams seeking Heroku alternatives must choose between Kamal's multi-server SSH orchestration and Dokku's single-server Git-push workflow. Kamal offers zero overhead for scaling, while Dokku provides a seamless transition for small teams using a $5 VPS.
The Post-Heroku Landscape
Heroku moved to a sustaining engineering model on 6 February 2026, which halted new feature development and stopped Enterprise Account contract sales for new customers. Deployment teams that seek alternatives now face a choice between the command-line efficiency of Kamal and the Git-push simplicity of Dokku. Kamal, developed by 37signals, deploys Docker containers to any server via SSH using a YAML configuration file. It adds no server-side daemon or platform overhead. 37signals runs HEY, which serves hundreds of thousands of users, entirely on Kamal. Dokku, released in 2013, provides a Heroku-style workflow on a single Linux server. It supports Heroku buildpacks, Dockerfile builds, and Nixpacks.
Deployment Workflows and Constraints
Kamal requires a Docker registry to function. A CI or local machine builds an image, pushes it to a registry, and Kamal tells the servers to pull it. This adds a moving part that Dokku avoids. While Dokku uses git push to deploy, Kamal uses the kamal command. Kamal 2 introduced kamal-proxy to replace Traefik and added support for multiple apps on one server. This update also allows for automatic HTTPS and Let’s Encrypt provisioning. The tool also supports command aliases for quick access to the rails console.
Some engineers find Kamal departs from the Rails philosophy of convention over configuration. Kamal builds its own secrets management system instead of leveraging the tools already built into Rails. This approach relies on third-party tools like 1Password and Bitwarden, which can lead to fragmentation. The tool provides zero transparency into the server. This makes debugging difficult. Kamal works best for teams that want maximum control with minimum overhead, particularly Rails teams who prefer managing their production infrastructure through a configuration file rather than a web dashboard. Kamal performs zero-downtime swaps for applications. For multi-server environments, Kamal handles rolling deploys, canary deployments, and maintenance mode.
Dokku operates on a single host. Horizontal scaling via the K3S scheduler introduces complexity that contradicts the tool’s core appeal. To manage multiple applications on one server, the user installs plugins for PostgreSQL, Redis, or MySQL via the Dokku CLI. Each plugin runs a service as a Docker container on the same host. Dokku requires minimal resources and runs comfortably on a $5 per month VPS. A mature plugin ecosystem covers databases, caching, SSL, and more. Dokku handles background tasks through a Procfile and manages subdomains through simple commands.
| Feature | Kamal | Dokku |
|---|---|---|
| Deployment Method | SSH via YAML | Git push |
| Server Overhead | Zero | Low |
| Multi-server Support | Native | Requires K3S |
| Built-in Dashboard | No | No |
Choosing Based on Complexity
The decision depends on server management capacity. If a team wants a low-overhead tool that treats infrastructure as code, use Kamal. It fits teams that prefer a CLI-first workflow and want to avoid a persistent control plane on their hardware. If a team wants a single-server setup that mirrors the Heroku experience, pick Dokku. Dokku provides direct access to the server environment, which makes variables easy to read and write. This environment persists across builds without chaining secrets across multiple accounts. Dokku provides the easiest landing pad for teams leaving Heroku because a working Heroku application typically deploys to Dokku unchanged. This compatibility exists because both platforms support standard buildpacks. Dokku remains the best option for solo developers or small teams running fewer than 10 applications on a $25 VPS. If you are already comfortable with the command line, skip the complex PaaS options. Does a team prefer managing a single server or orchestrating multiple machines? Use Kamal if a team needs to deploy to several servers with rolling updates. Use Dokku if a team wants to add a remote and push code.