Introduction
Voodu is a self-hosted PaaS — one HCL file, one apply, no git push.
What is Voodu?
Voodu is a Heroku-shaped, Kubernetes-honest deploy tool you run on your own boxes.
One HCL file describes the running system. voodu apply reconciles it: builds, ships, routes, swaps. No bare repo, no git push, no plugin sprawl — apps, ingress with TLS, and stateful services that actually back themselves up.
app "myapp" "web" {
image = "ghcr.io/myorg/myapp:latest"
replicas = 3
env = {
PORT = "8080"
NODE_ENV = "production"
}
health_check = "/healthz"
host = "myapp.example.com"
tls {
email = "ops@example.com"
}
}voodu apply -f voodu.hcl -r prod-1
# ✓ apply complete in 11.8s
# ✓ https://myapp.example.com · 3/3 healthyWhy Voodu?
- One file, one command. No
git push, no bare repo, no commit ceremony. Edit, save,voodu apply. - Declarative apply, not git-push. Diff shows the plan. Apply reconciles. Upsert-only by default —
--pruneis the explicit opt-in (scoped per(scope, kind)). - Stateful services are first-class. Postgres, Mongo, Redis (+ sentinel) declared like apps. Plugins ship backup, replicas, and test-restore.
- TLS out of the box. Add
tls {}and Voodu cuts a Let's Encrypt cert via Caddy. On-demand wildcards. - k8s shape, not k8s ops. Same reconciliation loop, none of the CNI/Helm/operator bill.
- 100% self-hosted, MIT. Single Go binary, embedded etcd, no cloud tier, no telemetry.
Quickstart
Manifest reference
The full HCL surface, kind by kind:
- Overview —
(scope, name), blocks, references app— web services, workers, replicasingress+tls— Caddy routes + ACMEpostgres,redis— stateful with backupjob/cronjob— one-shots and schedulesconfig& secrets — out-of-band env
CLI
Six verbs cover ~95% of day-to-day:
| Command | What it does |
|---|---|
voodu apply | Stream context, plan, reconcile |
voodu diff | Dry-run plan, exit-code-gated for CI |
voodu logs | Tail container logs (single, scope, multiplex) |
voodu config | Set/get env vars per app |
voodu remote | SSH targets for multi-host |
voodu plugins | Install/list/update plugins |