Open source PaaS

The self-hosted answer to Vercel/Render/Heroku: git push → build → deploy → URL, with TLS, on machines you own. What the category really sells is the deploy primitive without the fleet: no K8s to operate, one control plane, dashboards for humans. The players differ in what they put underneath and who they let drive.

The field (all captured)

  • coolify (OSS) (62.5k★, PHP/Laravel, Apache-2.0) — the category’s star: static sites, databases, full-stack apps, 280+ one-click services, any server. Your own Vercel/Heroku/Netlify with a UI.
  • dokploy (OSS) (37.6k★, TypeScript, Apache-2.0) — the Vercel/Netlify/Heroku alternative built on Docker Swarm for multi-node scaling, Traefik for routing, compose-native, templates, backups, monitoring, CLI/API.
  • bex (OSS) (567★, Go, Apache-2.0) — “the open-source AI-native Render alternative”: git push → build → deploy on your own infra, agents as first-class users — dashboard, REST, GraphQL, MCP, CLI and K8s resources all drive the same core (“no dashboard-only actions”). Render-style render.yaml Blueprints, Render-compatible CLI/API, evidence-backed parity ledger. Explicitly not production-ready (active development) — a bet on the shape, not a tool to adopt today. From the bex.co team whose zero-downtime-compose analysis (see Reverse proxies > Deploy semantics) argued “one fleet-grade primitive, borrow compose semantics”.
  • kamal (OSS) (14.6k★, Ruby, MIT) — Basecamp’s deploy tool, the minimalist counterpoint: not a PaaS at all — no dashboard, no database of state, just Ruby DSL + SSHKit pushing containers to any server over SSH, zero-downtime via kamal-proxy (deploy-specific proxy that switches requests between old/new containers). “Deploy web apps anywhere.” The config-in-repo, agent-scriptable ethos without a web UI.

How Uncloud and Kamal fit

Two axes sort the whole space: control-plane topology (none / per-cluster / central) and who drives (humans via UI / humans via CLI / anything programmable).

  • Uncloud is not a PaaS — it’s the orchestration layer under one. Compose files + WireGuard mesh + distributed cluster state, no servers of its own to speak of; the Caddy ingress with cluster cert storage is the built-in answer to the proxy problem the PaaSes each solve differently (Coolify: per-server, Dokploy: Traefik, bex: fleet primitive). Where Coolify/Dokploy give you an app platform on top of Docker-on-N-machines, Uncloud gives you the Docker-on-N-machines part alone — imperative, minimal, scriptable. A PaaS UI could sit on it; none does yet. It’s the “missing middle” for people who want the mesh + rolling deploys but not the app-store.
  • Kamal occupies the opposite pole from Coolify: no state, no UI, no cluster — a deploy procedure encoded in config, one command, any target reachable by SSH. PaaS = platform you operate; Kamal = tool you run. Kamal needs the least adoption commitment and scales the worst (no scheduler — you enumerate servers).
  • bex’s thesis makes the frame explicit: the fleet primitive should degrade to one node and agents should have the same API as humans — the category converging on “programmable deploy surface” rather than “dashboard app”. (MCP as a first-class citizen: the same bet as Hermes Agent tool-calling, applied to infrastructure.)

Decision sketch

  • Want Vercel-feel, many one-click services, don’t mind PHP: Coolify
  • Want multi-node without K8s, Traefik-native, compose-first: Dokploy (Swarm caveat: Swarm’s slow burn)
  • Want git-push deploys with zero platform state, SSH-only, config in repo: Kamal
  • Want the mesh/multi-machine layer alone and to script the rest: Uncloud
  • Watching the agent-native future: bex (not production-ready — track it)

Homelab lane: the doombox+Pi fleet is Uncloud-shaped (mesh + rolling deploys + no control plane); Kamal fits one-off app deploys to the Oracle Cloud box; the PaaS dashboards solve a problem this homelab doesn’t have (no tenants, no app-store appetite) — see Homelabs.

Related: Reverse proxies (every member’s different proxy answer — and deploy semantics) · Flux vs Argo CD (what “fleet-grade deploy” means at K8s scale) · Uncloud · Homelabs

  • noite (OSS) (17★, Rust/Axum, alpha; via @ryuzdev — “aka Vercelld”) — self-hosted PaaS on celld: “enjoy most Cloudflare Worker APIs on your potato VPS” ($5/2 vCPU/2 GB benchmark). Multi-tenant control plane with collaboration, no-script diagnostics, Sentry-ish error reporting, event ingestion, non-worker fetch-able apps (Hono/Elysia) + static hosting, and a tiny git forge. Roadmap is agent-first: MCP server where you provision a key for your agent and it cooks apps “from code to deployed in a matter of minutes”; repo explicitly “agent-friendly.” The celld-lane answer to kamal (OSS)‘s minimalism — resolves Infrastructure as Code’s open celld question from the PaaS side.

  • Coolify — the 62.5k★ heavyweight of the lane (v4.4: built-in traffic analytics, secret managers, OIDC, GH Actions runners); KRZ field report: root-required, sudo-NOPASSWD/Traefik-edit permission clash, docker-network isolation weak; weekend-trial candidate on a dedicated VM.