← All Reviews

Dokku: A Self-Hosted Heroku That's Been Quietly Getting Better for 12 Years

📦 dokku/dokku
Language: Shell
Stars: 31,870
Trend: Rising
View on GitHub →

Dokku: A Self-Hosted Heroku That's Been Quietly Getting Better for 12 Years

The Momentum Is Real

Dokku has been around since 2013, which in open source terms makes it practically ancient. But here's the thing — it's still actively maintained, still gaining stars, and still being committed to weekly. The repo sits at over 31,800 stars with a single primary maintainer (josegonzalez, who has 8,918 commits to his name) who is still merging PRs and cutting releases in 2026. That's not a zombie project. That's a project that found its niche and stuck with it.

If you've been watching the self-hosted infrastructure space, you've probably seen Dokku come up more frequently lately. There's a reason for that: as Heroku killed its free tier and alternatives like Render and Railway have gotten more expensive at scale, developers are looking at their $5-20/month VPS and wondering why they're paying someone else to run a deployment pipeline.

What Dokku Actually Does

At its core, Dokku is a git-push deployment system. You point a git remote at your Dokku server, push your code, and it builds and runs your app in a Docker container. If you've used Heroku, the mental model is identical — because that was explicitly the goal.

But it's more than just git push. Dokku handles: - Buildpack-based builds (Heroku buildpacks work here) - Dockerfile builds - Container image deploys - Nginx reverse proxying with automatic virtual host routing - Let's Encrypt SSL certificate management - Environment variable management - Persistent storage via volume mounts - Process scaling - Zero-downtime deploys - Plugin ecosystem for databases (Postgres, Redis, MySQL, etc.)

The plugin system is where it gets genuinely useful. You install dokku-postgres, run dokku postgres:create mydb, link it to your app, and Dokku injects the DATABASE_URL environment variable automatically. It's the same workflow Heroku add-ons gave you, but running on your own hardware.

More recently, Dokku has added support for alternative schedulers — you can deploy to k3s (lightweight Kubernetes) or Nomad instead of running containers directly on the host. This is a significant architectural expansion that makes it viable for teams that have outgrown single-server deployments.

Why This Matters Right Now

The timing is interesting. We're in a moment where:

  1. Managed PaaS costs have escalated. Running a handful of small apps on Railway or Render adds up fast. A $20/month Hetzner box running Dokku can host 10+ small apps with no per-app pricing.

  2. Developer experience expectations are high. Nobody wants to write Kubernetes manifests to deploy a side project. Dokku's git push workflow is genuinely good DX.

  3. Self-hosting is having a moment. The broader trend toward data sovereignty and cost control is pushing more developers toward owning their infrastructure.

Dokku sits at a sweet spot: it's not as simple as a Coolify or CapRover (which trade flexibility for a GUI), but it's not as complex as running a full Kubernetes cluster. It rewards developers who are comfortable on the command line and want full control without full complexity.

Key Features Worth Calling Out

1. The plugin ecosystem is mature and well-maintained

The official plugin list covers Postgres, MySQL, MariaDB, MongoDB, Redis, RabbitMQ, Elasticsearch, and more. These aren't community experiments — they're well-maintained and follow consistent patterns. The plugin API itself is stable enough that third-party plugins work reliably across versions.

2. Zero-downtime deploys work out of the box

Dokku checks your app's health before switching traffic. If your new container doesn't pass health checks, it rolls back. This is table stakes for production use and it's handled without any configuration on your part, assuming your app exposes a health endpoint.

3. Let's Encrypt integration is first-class

One command enables HTTPS for your app. Renewal is automatic. The recent bugfix in v0.37.7 around limiting Let's Encrypt to specific domains shows this feature is actively maintained, not just bolted on.

4. The scheduler abstraction is genuinely forward-thinking

Being able to target k3s or Nomad as your scheduler while keeping the same Dokku deployment interface is smart design. It means you can start with the simple Docker-on-host setup and graduate to a multi-node cluster without rewriting your deployment workflow. Not many tools give you that migration path.

5. SSH-based access control is simple and effective

You manage who can deploy by managing SSH keys. It's not fancy, but it works and it's auditable. For small teams, this is exactly the right level of complexity.

Who Should Use Dokku

You're a good fit if: - You're running personal projects or small production apps and don't want to pay per-app PaaS pricing - You have a VPS (or are willing to get one) and are comfortable with SSH and basic Linux administration - You want Heroku-style workflows without Heroku's pricing - You're a solo developer or small team deploying a handful of apps - You're running a small SaaS and want to keep infrastructure costs predictable

Dokku is probably not the right choice if: - You need multi-region deployments or serious horizontal scaling — Dokku's k3s support helps here, but it's still not what you'd reach for first - You have a large team with complex access control requirements — the SSH key model doesn't scale well organizationally - You need a GUI — Dokku is entirely CLI-driven, and while that's a feature for some, it's a dealbreaker for others - You're deploying stateful workloads that need sophisticated orchestration - You need enterprise support or SLAs — this is maintained by one primary developer

Honest Concerns

Single maintainer risk is real. josegonzalez has done extraordinary work keeping this project alive and improving for over a decade. But the commit history shows clear concentration — one person with 8,918 commits versus the next contributor at 603. If he steps back, this project has a problem. The bus factor here is not great, and you should factor that into any production dependency decision.

It's Shell-heavy. The codebase is primarily Shell scripting, which is both a strength (minimal dependencies, easy to understand) and a weakness (harder to maintain at scale, error handling can be fragile). The newer parts are written in Go, which is a better foundation, but there's a lot of legacy shell code in the mix.

Documentation is good but not great. The docs site exists and covers most use cases, but you'll occasionally hit edge cases that require digging through GitHub issues or the source code. This isn't unusual for a project of this age and size, but it's worth knowing.

Upgrades require attention. Major version upgrades have historically required manual steps. The project is good about documenting migration paths, but this isn't a set-and-forget system. You need to actually maintain it.

The k3s/Nomad scheduler support is still maturing. If you're looking at Dokku specifically for multi-node deployments, temper your expectations. The single-server Docker deployment model is where it's most battle-tested. The scheduler abstractions are interesting but newer.

No built-in secrets management. Environment variables are stored in plain text on the server. For most small deployments this is fine, but if you need secrets rotation, audit logs, or integration with Vault/AWS Secrets Manager, you're on your own.

Verdict

Dokku is a genuinely good tool that has earned its reputation over 12 years of consistent development. If your use case fits — small team, handful of apps, comfortable on the command line, running your own VPS — it's hard to beat. The git push workflow is genuinely pleasant, the plugin ecosystem covers 90% of what you need, and the operational overhead is low once it's set up.

I'd adopt it without hesitation for personal projects and small production deployments. For anything with serious scale requirements, team size above ~5 developers, or enterprise compliance needs, I'd look elsewhere — not because Dokku is bad, but because it's optimized for a different problem.

The 39 open issues and active recent commit history tell me this is a healthy project, not a stale one. The rising trend status makes sense: as managed PaaS costs have climbed, the value proposition of "run your own Heroku on a $20 VPS" has gotten stronger, not weaker.

If you've been paying $50-100/month in PaaS fees for a few small apps, spend an afternoon with Dokku. You'll probably keep it.

dokku/dokku on GitHub

View dokku/dokku on GitHub →
Need help building with tools like this?
We build AI-powered applications and developer tools. 30+ years of engineering experience.
Get in Touch
devopsself-hostedpaasdockerinfrastructure
← Previous CodeBurn: Finally a Tool That Shows You Where Your AI Coding Budget Actually Goes Next → claude-code-clawdbot: Running Claude Code Headlessly Without Losing Your Mind
← Back to All Reviews