Head to head
Coolify vs Dokploy
Coolify and Dokploy solve the same problem: push to a branch, get a running app with a certificate. This page covers what it costs when the platform underneath you moves.
Should you self-host Coolify or Dokploy?
Pick Coolify if you want a service catalog, managed databases with scheduled backups, and the larger project: it reached a stable v4.0.0 tag on 27 April 2026 and has more contributors behind it. Pick Dokploy if you want the leaner install, three containers instead of five, and you are comfortable that it is still on a 0.x line. Both are Apache-2.0 today, both run builds on your production server by default, and both are young enough that you should expect a breaking release within a year.
Both of these exist because Heroku got expensive and Vercel bills by the request. You point a domain at a VPS, connect a git repository, push, and a few minutes later there is a running container with a valid certificate. That workflow is genuinely good and both products deliver it.
What neither product page tells you is what happens in year two: how much of your server the control plane eats, what breaks when you upgrade, and what you actually need on disk to rebuild after a failure. That is what this page is about.
The table is worth reading for container_count and ram_idle_mb, because those two numbers are the whole cost difference. Five containers and roughly 1.2 GB against three containers and roughly 900 MB, on machines where the documented minimum is 2 GB total. Also check sso: one of these can sit behind your identity provider and the other cannot.
| Specification | Coolify | Dokploy |
|---|---|---|
| Licence | Apache-2.0 (Permissive) | Apache-2.0, with DSAL 1.0 reserved for a /proprietary path (Permissive) |
| Written in | PHP (Laravel) | TypeScript |
| First release | 2021 | 2024 |
| Maturity | Stable | Young |
| Datastore | PostgreSQL, with Redis for queues and a Soketi realtime service | PostgreSQL 16 (Docker Swarm service, dokploy-postgres volume) |
| Services to run | 5 | 3 |
| Idle memory | 1200 MB | 900 MB |
| Memory in use | 2048 MB | 2048 MB |
| Operational load | 3 / 5, Moderate | 3 / 5, Moderate |
| Identity | Native OIDC | Local accounts only |
| arm64 builds | Yes | Yes |
| Default ports | 80, 443, 6001, 6002, 8000 | 80, 443, 3000 |
| Backup shape | Postgres dump | Postgres dump |
The licences, verified#
Coolify is Apache-2.0, full stop. No source-available directory, no enterprise edition, no feature gating. The commercial offering is the same code hosted for you.
Dokploy is Apache-2.0 with a reservation. LICENSE.MD splits the repository: anything under a /proprietary directory falls under the Dokploy Source Available License, which forbids production use without a commercial agreement, and everything else is Apache-2.0. That directory does not exist at the repository root today, so everything you install right now is Apache-2.0. It is a placeholder for an open core model that has not arrived. Whether that bothers you is a judgement call; Licence drift has the pattern of how often placeholders like that get filled in.
Neither licence gives you a reason to reject the other. Both give you the right to keep running whatever version you have if the project changes direction, which is the property that actually matters.
How young these are, without the marketing#
Coolify's repository dates to 2021 and it spent years being recommended in every "self-hosted Heroku" thread while the software itself was labelled beta. The stable v4.0.0 tag landed 27 April 2026. The line has moved fast since: 4.1 added the Railpack build pack and audit logging, 4.2 added persistent volume backups and cloud server provisioning, 4.3 rebuilt domain handling, and 4.4 is in release candidate with OpenID Connect. A v5 rewrite for multi-server scalability is in progress with no public date, and the maintainer has stated v4 stays supported.
Dokploy's repository was created in April 2024. The current release is v0.30.5, still 0.x, shipping several versions in some weeks. Release v0.29.13 fixed roughly sixteen command-injection and authorization-bypass issues in one go. Read that two ways at once: the project has a functioning security process and people looking at it, and the codebase is young enough that a batch of sixteen was there to find.
The honest probability assessment, which no vendor will give you: assume a breaking release from either within twelve months. For Dokploy that is what a fast-moving 0.x line means by definition. For Coolify it is v5, whenever it lands. Plan for it the way An update strategy that does not lose data describes: pin versions, snapshot before upgrades, and read release notes rather than running coolify update on a Friday.
Practical corollary: do not follow a tutorial written before April 2026 for Coolify. The settings layout changed.
What survives when the platform breaks#
This is the question that decides whether you should use either of these for anything you care about, and it has a reassuring answer and an alarming one.
Reassuring: your applications keep running. Both platforms deploy your workloads as ordinary Docker containers (Coolify) or Swarm services (Dokploy), fronted by a separate proxy container. If the control plane is down, dead or mid-upgrade, the proxy keeps serving traffic and renewing certificates, and your app containers keep restarting under Docker's own restart policy. A broken Coolify is an inability to deploy, not an outage. That is a much better failure mode than a monolith.
Alarming: the configuration is not recoverable from the running system. Both store everything in a Postgres you must dump rather than copy, and both have a file outside that database without which the dump is worthless.
For Coolify:
/data/coolify/source/.env <- Laravel APP_KEY, encrypts credentials in Postgres
/data/coolify/ssh/ <- keys used to reach every managed server
/data/coolify/{applications,databases,services,backups}
coolify-db volume <- pg_dump this, do not copy the filesRestore the database without that exact source/.env and every stored secret, SSH key and registry credential decrypts to garbage. It is a bind-mounted file, so anyone backing up Docker volumes only has been backing up an unreadable database.
For Dokploy:
/etc/dokploy/ <- Traefik config, SSH keys, app volumes, deploy logs
dokploy-postgres volume <- pg_dump this
docker swarm join-token manager/worker <- record theseWithout the Swarm join tokens a rebuilt manager cannot readopt its workers.
In both cases, the real mitigation is upstream of the backup: keep your Dockerfiles, compose files and environment templates in git. Then the platform is a convenience you can replace in an afternoon rather than a dependency you cannot rebuild. That is the same argument Docker Compose conventions makes and the same one that applies to Portainer vs Komodo.
Pair that with a real off-box backup of the two paths above using restic, and follow Backing up a running database for the Postgres dump so you are not copying a file mid-write.
Where they differ in daily use#
Service catalog. Coolify's is the deepest of any self-hosted PaaS: several hundred prepackaged one-click services alongside your own apps. Dokploy has templates but far fewer. If part of the appeal is deploying Plausible, Umami and a Postgres without writing compose files, that is a Coolify point and a big one.
Managed databases. Both offer Postgres, MySQL, MariaDB, MongoDB and Redis with scheduled backups to S3. Coolify's are more mature; Dokploy's work.
Proxy. Coolify runs Traefik or Caddy as coolify-proxy on 80 and 443. Dokploy runs Traefik with its config in /etc/dokploy. Neither stops you understanding what is happening, but if you want to reason about routing yourself, Reverse proxy and TLS is worth reading alongside either.
Multi-server. Coolify adds servers over SSH with a key it generates; they run only the proxy and your workloads. Dokploy joins them as Swarm workers. Coolify's model is simpler to reason about; Dokploy's gives you actual orchestration if you want it.
Builds on production. Both compile on whichever server you deploy to, by default. A Next.js build during peak hours will visibly degrade everything else on a 2-core box, and 2 cores is the documented minimum for both. Configure a dedicated build server before you notice the problem rather than after. Coolify's concurrent build limits became per-server in the 4.3 line.
The firewall problem, which is the same problem#
Coolify's own documentation states it plainly: Docker uses NAT-based iptables rules that bypass UFW, so ufw deny 8000 does not actually block Coolify's dashboard. The same applies to 6001 and 6002 for the realtime service, and the same mechanism applies to Dokploy's dashboard on port 3000.
People firewall the host, assume the dashboard is private, and are wrong in a way that produces no error message and no log line.
The fixes, in order of preference:
- Use your provider's firewall, which sits outside the host entirely.
- Bind the dashboard to a domain behind the proxy and close the direct port. Coolify's docs say you can safely close 8000, 6001 and 6002 once a domain is configured.
- Reach the dashboard over a VPN or mesh network only.
Do not leave either dashboard open on the internet on the basis that it has a login form. Dokploy's own release history is the argument against that. A security baseline for a home server covers the rest.
Verdict by situation#
| Your situation | Pick | Why |
|---|---|---|
| Several small apps plus a catalog of services | Coolify | Several hundred one-click services is the single biggest differentiator |
| One VPS, three Node apps, want it lean | Dokploy | Three containers instead of five, roughly 300 MB less overhead |
| Dashboard must sit behind your identity provider | Coolify 4.4+ | OIDC exists there and does not exist in Dokploy |
| You already run and understand Docker Swarm | Dokploy | You get a UI over the orchestrator you already have |
| Agency hosting client sites | Coolify | Managed databases, scheduled S3 backups and per-project isolation are further along |
| You need a frozen platform for two years | Neither | Monthly cadence on one, a 0.x line on the other; pin and accept the drift |
| 2 GB VPS, nothing else on it | Dokploy | It fits with less squeezing, though neither is comfortable |
| One or two containers total | Neither | A compose file plus Caddy does this with a tenth of the surface |
| Deploying containers you did not write, across hosts | Komodo instead | Git-backed compose management rather than a build pipeline |
What to do next#
Try one on a throwaway VPS for a week before you migrate anything real. The specific test worth running is not "can it deploy my app", because both can. It is: deploy the app, take the backup files listed above, destroy the server, build a new one, and restore. If you cannot get back to a working deploy from those files alone, you have found the gap while it is still free to find.
Then decide honestly whether you need a PaaS at all. If your workload is three containers that change twice a year, a directory of compose files and Reverse proxy and TLS will outlive both of these projects. When not to self-host is the other half of that question, and Stack planner will tell you whether the box has room for a control plane in the first place.
Questions#
Is Coolify actually open source?
Yes. Coolify is Apache-2.0 with no source-available carve-out, and the paid cloud offering is the same code hosted for you. The stable v4.0.0 tag is dated 27 April 2026, after several years of being widely recommended while still labelled beta. A v5 rewrite aimed at multi-server scalability is under way with no committed date, and the maintainer has said v4 will continue to be supported.
What licence is Dokploy under?
Apache-2.0 for everything that exists today, with one caveat written into LICENSE.MD: anything placed under a /proprietary directory would fall under the Dokploy Source Available License, which forbids production use without a commercial agreement. No such directory exists at the repository root right now, so what you install is Apache-2.0. Read it as a signal about direction rather than a current restriction.
What happens to your apps if the platform breaks?
They keep serving. Both platforms deploy your applications as ordinary Docker containers or Swarm services with a separate proxy container, so a broken control plane means you cannot deploy, not that your sites go down. Certificate renewal continues as long as the proxy container is healthy. What you lose is the ability to change anything, and without the right backup files you lose the configuration permanently.
Can you run either on a 1 GB VPS?
No. Both document a 2 GB minimum and both mean it. Coolify's control plane alone is five containers (the Laravel app, Postgres, Redis, Soketi and the proxy) and idles around 1.2 GB before your applications start. Dokploy is leaner at three containers and roughly 900 MB, but Postgres plus Traefik plus the app still fills most of a gigabyte. Add 30 GB of disk for build layers.
Does either support single sign-on?
Coolify does, recently. OAuth providers have worked for a while and OpenID Connect login landed in the 4.4 release candidate, so check your actual version before promising it to anyone. Dokploy has no OIDC login for the dashboard at all: local accounts with two-factor and invitations only. If the dashboard has to sit behind a company identity provider, that rules Dokploy out.
Do you have to use Docker Swarm with Dokploy?
Yes, whether you wanted it or not. The install script runs docker swarm init against an advertise address it picks, creates an attachable overlay network, and deploys everything as Swarm services. On a multi-homed box set --advertise-addr deliberately, because if the machine's IP later changes Swarm keeps advertising the old one and services stop scheduling. Leaving Swarm removes every Dokploy service with it.
Which one is more likely to break on upgrade?
Dokploy, on the numbers. It is a 0.x line created in April 2024, currently v0.30.5, shipping multiple releases in some weeks, and v0.29.13 alone fixed around sixteen command-injection and authorization-bypass issues. Coolify's cadence is roughly monthly on a stable major, which is calmer, but its v5 rewrite is the larger discontinuity waiting further out.
Sources#
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.