Self-hosting thatjust works.
Self-hosted, GitOps container orchestration. Define your app in a config file, push to git, and Holden deploys it - with Postgres, Redis, and S3 included.
GitOps Native
Push to deploy, revert to rollback
Batteries Included
Postgres, Valkey, Garage built-in
Zero Downtime
Health-gated deploys with rollback
Encrypted Secrets
age-encrypted, in your repo
Self-hosting
shouldn't be hard.
Docker Compose is manual. Kubernetes is overkill. Self-hosted PaaS tools store your config in their own database - if the tool breaks, your config is gone.
Holden is different. Your app config lives in git, not in a tool's database. Push a config file, get a running app with databases, caching, and TLS. Re-register your repos and you're back up.
services:
web:
image: myapp:latest
domain: myapp.example.com
env:
DATABASE_URL: ${needs.postgres.url}
REDIS_URL: ${needs.valkey.url}
needs:
postgres:
valkey:Define your app in YAML. Push to git. Holden handles the rest - containers, networking, databases, TLS, zero-downtime deploys.
Everything for the indie hacker.
GitOps Native
Your git repo is the source of truth. Push to deploy, revert to rollback. Config changes are reviewable PRs. No database to back up, no UI state to drift.
Learn moreBatteries Included
Add needs: postgres and get a database with auto-generated credentials. Same for Redis and S3. No plugins to install, no services to configure.
Zero Downtime
New containers start, health checks pass, traffic shifts, old containers drain gracefully. Failed deploys are discarded - the old version never stopped serving.
Learn moreEncrypted Secrets
Secrets are age-encrypted and live in your repo alongside config. No external vault, no separate secrets service.
Learn more