Kamal is an open-source deployment tool from 37signals (DHH / Basecamp) for deploying containerized web applications to any infrastructure — bare metal, cloud VMs, or a mix — with zero-downtime rolling restarts. Originally built for Rails apps, Kamal works with any web application that can be packaged as a Docker container. It uses SSHKit to drive remote commands over SSH and pairs with kamal-proxy, a lightweight HTTP proxy written in Go that seamlessly switches request traffic between old and new containers during a deploy. Kamal is imperative and Capistrano-like in feel, with a single `config/deploy.yml` describing servers, image, registry, accessories, env, secrets, and proxy/SSL settings. Capabilities include auto-provisioning Docker on new servers, remote builds, asset bridging, accessory services (databases, Redis, cron sidecars), automatic TLS via Let's Encrypt, host- and path-based routing, and hooks for custom pre/post-deploy logic. Kamal is the operational backbone of 37signals' on-premises exit from major cloud providers and powers their ONCE product line. Kamal itself is a CLI tool, not a hosted service — there is no public REST API, no SDK, and no paid tier. The project is released under the MIT License and developed openly on GitHub under the `basecamp` organization.
Kamal publishes 2 APIs on the APIs.io network. Tagged areas include Deployment, DevOps, Docker, Containers, and Zero Downtime.
Kamal’s developer surface includes documentation, getting-started guide, release notes, changelog, CLI, and 12 more developer resources.
Regulatory Posture applies to this provider. Its tags matched the
Horizontal (data, software, accessibility, platform) regime, so
Regulatory Posture carries 15 points of the composite.
If this regime is wrong for your business, say so on your
provider repo — the
applicability map is public and we will correct it.
Open Source Surface applies to this provider. This product is open source and we
read its repository directly, so Open Source Surface carries
10 points of the composite. It is scored from what the repository actually
publishes — a security policy, a contribution guide, a release history, a code of conduct — read live from the
provider rather than inferred from our own catalog pointers.
This facet adds; nothing was taken away to make room for it. An open-source project is not excused from
the commercial facets, because exemption would strip it of the points it does earn.
If we have the wrong repository, or this product is not open source, say so on your
provider repo and we
will drop the facet rather than have you publish against it.
Create-or-Update Ergonomics could not be measured. We hold no machine-readable contract for
this provider to read, so there is nothing to measure a write surface against. Excluded rather than scored zero:
never-measured and measured-empty are different facts. Publishing an OpenAPI is what makes this facet — and
several others — scorable at all.
The six quality facets above are damped to 75 points between them,
because both conditional facets apply and carry
25 points together. That is why each facet's contribution is shown against a damped
maximum: raising a quality facet moves the composite by 75% of its nominal
weight, not 100%. The full arithmetic is at apis.io/rating/.
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. Every facet and dimension name above is a link: it opens that measurement's own page — what it means, the exact checks that feed it, how the whole catalog distributes on it, and the providers at the top of it. This rating is computed from github.com/api-evangelist/kamal-deploy: open an issue to ask a question, or submit a pull request to add artifacts.
Submit an artifact on GitHub — free →Manage your own listing — the Influence plan, $499/mo →
The Kamal CLI (`kamal`) is the primary command-line interface for packaging, shipping, and operating containerized web apps across one or more SSH-reachable servers. It reads `c...
Kamal Proxy is a minimal HTTP reverse proxy written in Go that powers the zero-downtime deploy switchover behind Kamal. It exposes a small `kamal-proxy` CLI with `run`, `deploy`...
aid: kamal-deploy
name: Kamal
description: Kamal is an open-source deployment tool from 37signals (DHH / Basecamp) for deploying containerized web applications
to any infrastructure — bare metal, cloud VMs, or a mix — with zero-downtime rolling restarts. Originally built for Rails
apps, Kamal works with any web application that can be packaged as a Docker container. It uses SSHKit to drive remote commands
over SSH and pairs with kamal-proxy, a lightweight HTTP proxy written in Go that seamlessly switches request traffic between
old and new containers during a deploy. Kamal is imperative and Capistrano-like in feel, with a single `config/deploy.yml`
describing servers, image, registry, accessories, env, secrets, and proxy/SSL settings. Capabilities include auto-provisioning
Docker on new servers, remote builds, asset bridging, accessory services (databases, Redis, cron sidecars), automatic TLS
via Let's Encrypt, host- and path-based routing, and hooks for custom pre/post-deploy logic. Kamal is the operational backbone
of 37signals' on-premises exit from major cloud providers and powers their ONCE product line. Kamal itself is a CLI tool,
not a hosted service — there is no public REST API, no SDK, and no paid tier. The project is released under the MIT License
and developed openly on GitHub under the `basecamp` organization.
type: Index
deliveryModel:
model: self-hosted
license: MIT
license_evidence:
repo: basecamp/kamal
spdx: MIT
stars: 14604
open_source: true
commercial: false
callable_host: false
label: Self-hosted open source · you run it yourself
confidence: medium
source:
- repository-license
generated: '2026-09-25'
method: derived
accessModel:
pricing: unknown
onboarding: unknown
trial: false
try_now: false
public: false
label: Unknown
confidence: low
source: []
generated: '2026-07-22'
method: derived
position: Producing
access: 3rd-Party
image: https://kinlane-images.s3.amazonaws.com/shared/apis-json/icons/kamal-deploy.png
tags:
- Deployment
- DevOps
- Docker
- Containers
- Zero Downtime
- Rolling Deploys
- Rails
- Ruby
- Open Source
- 37signals
- Basecamp
- On-Premises
- Infrastructure
- CLI
- SSH
tags_raw:
- Deployment
- DevOps
- Docker
- Containers
- Zero Downtime
- Rolling Deploys
- Rails
- Ruby
- Open Source
- 37signals
- Basecamp
- On Premises
- Infrastructure
- CLI
- SSH
- Open-Source
url: https://raw.githubusercontent.com/api-evangelist/kamal-deploy/refs/heads/main/apis.yml
created: '2026-05-25'
modified: '2026-05-25'
specificationVersion: '0.23'
apis:
- aid: kamal-deploy:kamal
name: Kamal CLI
description: 'The Kamal CLI (`kamal`) is the primary command-line interface for packaging, shipping, and operating containerized
web apps across one or more SSH-reachable servers. It reads `config/deploy.yml` (plus environment-specific overlays and
encrypted secrets) and orchestrates the full lifecycle: building images, pushing to a registry, provisioning Docker on
target hosts, starting accessory services, deploying the app via kamal-proxy with health-check gated traffic switching,
and tailing logs or rolling back to a prior version. Command groups include `app`, `accessory`, `build`, `proxy`, `registry`,
`secrets`, `server`, and `prune`, plus top-level shortcuts like `deploy`, `redeploy`, `rollback`, `setup`, `audit`, `details`,
`env`, `lock`, `version`, and `init`.'
humanURL: https://kamal-deploy.org/docs/
tags:
- CLI
- Deployment
- Docker
- Rails
- Ruby
- SSH
tags_raw:
- CLI
- Deployment
- Docker
- Rails
- Ruby
- SSH
properties:
- type: Documentation
url: https://kamal-deploy.org/docs/
- type: GettingStarted
url: https://kamal-deploy.org/docs/installation/
- type: Source
url: https://github.com/basecamp/kamal
- type: GitHubRepository
url: https://github.com/basecamp/kamal
- type: License
url: https://github.com/basecamp/kamal/blob/main/MIT-LICENSE
- type: ReleaseNotes
url: https://github.com/basecamp/kamal/releases
- type: Configuration
url: https://kamal-deploy.org/docs/configuration/
title: deploy.yml Configuration Reference
- type: Hooks
url: https://kamal-deploy.org/docs/hooks/
- type: Upgrade
url: https://kamal-deploy.org/docs/upgrading/
- type: SDKs
url: https://rubygems.org/gems/kamal
title: kamal (RubyGem)
- aid: kamal-deploy:kamal-proxy
name: Kamal Proxy
description: Kamal Proxy is a minimal HTTP reverse proxy written in Go that powers the zero-downtime deploy switchover behind
Kamal. It exposes a small `kamal-proxy` CLI with `run`, `deploy`, and `remove` commands; the Kamal CLI talks to it over
SSH to register new container instances (`hostname:port`), runs health checks (default `GET /up` once per second returning
`200`), drains traffic from old instances, and atomically switches new traffic to the healthy instance. The proxy supports
host-based routing (multiple apps on one server), path-based routing with optional prefix stripping, custom health-check
paths/ports/timeouts, automatic TLS via Let's Encrypt, and custom TLS certificate/key files (useful for Cloudflare origin
certs or private CAs). It can also be run standalone outside of Kamal.
humanURL: https://github.com/basecamp/kamal-proxy
tags:
- Proxy
- HTTP
- Load Balancing
- Zero Downtime
- TLS
- Go
properties:
- type: Documentation
url: https://github.com/basecamp/kamal-proxy/blob/main/README.md
- type: Source
url: https://github.com/basecamp/kamal-proxy
- type: GitHubRepository
url: https://github.com/basecamp/kamal-proxy
- type: License
url: https://github.com/basecamp/kamal-proxy/blob/main/MIT-LICENSE
- type: Dockerfile
url: https://github.com/basecamp/kamal-proxy/blob/main/Dockerfile
common:
- type: IssueTracker
url: https://github.com/basecamp/kamal/issues
- type: DomainSecurity
url: security/kamal-deploy-domain-security.yml
- type: Website
url: https://kamal-deploy.org
- type: Documentation
url: https://kamal-deploy.org/docs/
- type: GettingStarted
url: https://kamal-deploy.org/docs/installation/
- type: Source
url: https://github.com/basecamp/kamal
- type: GitHubRepository
url: https://github.com/basecamp/kamal
- type: GitHubOrganization
url: https://github.com/basecamp
- type: License
url: https://github.com/basecamp/kamal/blob/main/MIT-LICENSE
title: MIT License
- type: ReleaseNotes
url: https://github.com/basecamp/kamal/releases
- type: ChangeLog
url: https://github.com/basecamp/kamal/releases
- type: Community
url: https://github.com/basecamp/kamal/discussions
title: GitHub Discussions
- type: Community
url: https://discord.gg/YgHVT7GCXS
title: Discord
- type: Contributing
url: https://github.com/basecamp/kamal/blob/main/CONTRIBUTING.md
- type: CodeOfConduct
url: https://github.com/basecamp/kamal/blob/main/CODE_OF_CONDUCT.md
- type: SDKs
url: https://rubygems.org/gems/kamal
title: kamal (RubyGem)
- type: CLI
url: https://kamal-deploy.org/docs/commands/
title: kamal CLI
- type: Integrations
url: https://github.com/basecamp/kamal-proxy
title: kamal-proxy (Go)
- type: Integrations
url: https://github.com/basecamp/kamal-skiff
title: kamal-skiff — static sites on nginx + SSI via Kamal
- type: Integrations
url: https://github.com/basecamp/kamal-site
title: kamal-site — source for kamal-deploy.org
- type: UseCases
url: https://once.com
title: 37signals ONCE — single-tenant self-hosted apps deployed via Kamal
maintainers:
- FN: Kin Lane
email: kin@apievangelist.com
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.