New: HTTPS on your domainSee the settings

Zero-downtime deploys for one VPS

Sling builds one exact commit, waits for 3 healthy checks before traffic moves, then rolls back by itself if it fails.

Every deploy on record

Each stage of every deploy and rollback is saved to SQLite, so the history survives a restart. A deploy killed halfway is marked interrupted, with the stage it reached. Read the history docs

Traffic moves last.

Sling points Caddy at the new container only after it answers /health three times in a row. Then it checks again through the proxy, as your users reach it.

Safe deploys on one host. The parts you stop doing over SSH.

Rolls back a failed release

If 3 probes in a row fail in the 30-second grace window, Caddy goes back to the previous version.

  • Rolled back to 67dd9793 proxy probes failed in a row
  • Observing a07c3e530s grace window before retiring
  • Switched trafficapp-67dd979 to app-a07c3e5

Accepts only signed pushes

Every GitHub delivery needs a valid HMAC-SHA256 signature and must come from your repo and branch.

GOhandler.goGOqueue.go401 if wrong
func validSignature(secret, body []byte,
    header string) bool {
  hexSig, ok := strings.CutPrefix(
    header, "sha256=")
  mac := hmac.New(sha256.New, secret)
  mac.Write(body)
  return hmac.Equal(got, mac.Sum(nil))
}
Signs the raw body with your secret.

Gets HTTPS certificates itself

Set SLING_DOMAIN and Caddy obtains and renews a Let’s Encrypt certificate. Only /webhook is passed to Sling.

sling serve settings
4 of 5 on
  • HTTPS on your domainSLING_DOMAIN
  • Deploy on git pushSLING_WEBHOOK_SECRET
  • Deploy status APISLING_STATUS_TOKEN
  • Deploy one branchSLING_BRANCH=main
  • Keep deploy historySLING_DATA_DIR

Runs one deploy at a time

A file lock stops two deploys fighting over the proxy. A newer push replaces the one still waiting.

sling serve / queue
  • Db81e4a2push to main · waitingqueuednow
  • D7f30c19replaced by b81e4a2superseded8s
  • D9c41d0eholds the deploy locklive1m
  • D53a2b2fprevious, image keptstopped6m

How a commit goes live

Sling clones the commit, builds it with Docker and starts it beside the running version on a random loopback port. Three checks decide if users ever see it.

  • Three 200s in a row from /health, within 30 seconds
  • The X-Sling-Upstream header names the new container
  • No three failed probes in a row for 30 seconds

Read the deploy sequence

Sling beside Kamal, Coolify and Dokku. The smallest of the four, with the strictest rollback.

FeatureSlingKamalCoolify, DokployDokku
What you installOne Go binary and CaddyRuby gem and kamal-proxyDashboard, database, workersBash and nginx plugins
Checks the new version answers through the proxyIncludedPartlyNot includedNot included
Rolls back on its own during a grace windowIncludedNot includedNot includedNot included
Automatic HTTPSIncludedIncludedIncludedIncluded
Web UI and several appsOn the roadmapIncludedIncludedIncluded

Runs on Go, Docker and Caddy

Build it with make build, then run ./bin/sling with a repo and a full commit SHA. It pulls caddy:2.11.7-alpine the first time.

  • A Dockerfileat the repo root
  • A server on port 3000inside the container
  • GET /health200 when ready
  • APP_VERSIONoptional, set to the SHA

Read the full setup

Questions

What people ask before they put Sling on a server.

Ask on GitHub

Does Sling need Kubernetes?

No. It is one Go binary that drives Docker and a Caddy container on the same host.

Can I deploy a branch name instead of a SHA?

No. Sling takes only full 40-character SHAs, and checks that HEAD matches after checkout, so a moving branch can't change what ships.

How do I go back to an older commit?

Run sling rollback with its SHA. Any commit whose image is still on the host comes back without a rebuild, through the same checks as a deploy.

What if Sling is killed mid-deploy?

The next deploy marks it interrupted and records the stage it reached. Run sling status first: traffic may already be on the new version.

Can it run several apps on one server?

Not yet. Today it runs one app per host. Several apps and a web UI are on the roadmap.