dash: Deploy web apps anywhere

From bare metal to cloud VMs, deploy web apps anywhere with zero downtime. dash uses dash-proxy to seamlessly switch requests between containers, load-balance across multiple hosts, batch SAN certificates, and issue wildcard certs via DNS-01. Works across multiple servers, using SSHKit to execute commands. Originally built for Rails apps, dash works with any type of web app that can be containerized with Docker.

dash began as a fork of basecamp/kamal and made a clean break in 2026 — it ships the features upstream wouldn't merge (proxy load balancing, readiness gates, response caching, traffic shaping, and more) and moves at its own pace. Existing kamal deployments upgrade in place: the on-server artifacts (.kamal/ directory, kamal-proxy container) are unchanged, KAMAL_* env vars are still set alongside their DASH_* twins, and a .kamal/ directory in your own repo is still read — dash migrate moves it to .dash/ when you're ready.

Installation

gem install dash
dash init

Or in a Gemfile-managed app:

bundle add dash
bundle binstubs dash
bin/dash init

Configure your deployment in config/deploy.yml, then:

dash setup     # first deploy: bootstraps Docker, boots the proxy, deploys
dash deploy    # every deploy after that

dash docs prints the full, always-current configuration reference. Upstream kamal's docs at kamal-deploy.org still cover the shared basics.

License

dash is released under the MIT License, preserving the license of the kamal codebase it descends from.