Why ForkDeploy
Compared, honestly
The same three-service app in the tools you already know, and where each one genuinely wins. No tool is bad here. They solve different problems.
vs Docker & Kubernetes
Docker Compose is wonderful for local development and fine on a single VPS, until you need zero-downtime deploys or a second machine. Kubernetes solves all of that and adds a full-time job to your calendar. ForkDeploy sits between them: Kubernetes reliability, Compose-level effort.
8+
Kubernetes files
~150
Kubernetes lines
1
ForkDeploy files
18
ForkDeploy lines
# api-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
labels:
app: api
spec:
replicas: 1
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: my-registry/api:latest
ports:
- containerPort: 8080
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: db-secret
key: url
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
---
# api-service.yaml
apiVersion: v1
kind: Service
metadata:
name: api
spec:
selector:
app: api
ports:
- port: 80
targetPort: 8080
---
# db-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
stringData:
url: postgres://shop:shop@db:5432/shop
---
# ... repeat for web, database,
# ingress, PersistentVolumeClaim... # forkdeploy.yaml, the whole project
project: shop
services:
database:
image: postgres:16
api:
build: ./apps/api
port: 8080
depends_on: [database]
env:
DATABASE_URL: "{{ database.url }}"
web:
build: ./apps/web
port: 3000
depends_on: [api]
env:
API_URL: "{{ api.url }}" ✓ No Deployments, Services, Ingress, or Secrets manifests
✓ No label selectors that silently mismatch
✓ No image registry, ForkDeploy builds from your Dockerfile
✓ Service discovery built in, no DNS plugins needed
✓ Deploy order resolved automatically from depends_on
The same three services need 8+ Kubernetes manifests (~150 lines) against one 18-line forkdeploy.yaml. What that single file saves you:
✓ No Deployments, Services, Ingress, or Secrets manifests
✓ No label selectors that silently mismatch
✓ No image registry, ForkDeploy builds from your Dockerfile
✓ Service discovery built in, no DNS plugins needed
✓ Deploy order resolved automatically from depends_on
Config you write
docker-compose.yml
8+ manifests per app
1 forkdeploy.yaml
Zero-downtime deploys
No, containers restart
Yes, if configured right
Yes, built in
Service discovery
Container names, one host
DNS + Services you define
Built in, {{ service.url }}
Secrets
Plain .env files on disk
Secret manifests, base64
Encrypted, set once, shared
Deploy order
depends_on starts, not readiness
You orchestrate it yourself
Resolved from depends_on
Server maintenance
All yours
All yours, times a cluster
None, ForkDeploy runs it
Learning curve
An afternoon
Weeks to months
One config file
| Docker Compose | Kubernetes | ForkDeploy | |
|---|---|---|---|
| Config you write | docker-compose.yml | 8+ manifests per app | 1 forkdeploy.yaml |
| Zero-downtime deploys | No, containers restart | Yes, if configured right | Yes, built in |
| Service discovery | Container names, one host | DNS + Services you define | Built in, {{ service.url }} |
| Secrets | Plain .env files on disk | Secret manifests, base64 | Encrypted, set once, shared |
| Deploy order | depends_on starts, not readiness | You orchestrate it yourself | Resolved from depends_on |
| Server maintenance | All yours | All yours, times a cluster | None, ForkDeploy runs it |
| Learning curve | An afternoon | Weeks to months | One config file |
ForkDeploy still runs on Kubernetes under the hood, so you get the reliability without ever writing a manifest. The complexity does not disappear; it moves out of your repo.
vs Vercel & Netlify
For a static site or a single Next.js app, Vercel and Netlify are genuinely great and you should probably use them. The gap appears when your repo is more than a frontend: an API with its own runtime, a database, a worker chewing through a queue. On a frontend platform each of those becomes a separate product, a separate deploy, and a separate bill. On ForkDeploy they are three more lines in the same file.
A static site or one Next.js app
Excellent
Works fine
A backend API with its own runtime
Serverless functions only
Any container, long-running
A database next to your app
External add-on, extra bill
One more service in the yaml
Background workers and queues
Not their model
A service like any other
The whole monorepo in one deploy
One app per project
The repo is the unit
Cost when you outgrow the free tier
Per-seat and per-usage, adds up
Free beta, fair plans later
| Your project has... | Vercel / Netlify | ForkDeploy |
|---|---|---|
| A static site or one Next.js app | Excellent | Works fine |
| A backend API with its own runtime | Serverless functions only | Any container, long-running |
| A database next to your app | External add-on, extra bill | One more service in the yaml |
| Background workers and queues | Not their model | A service like any other |
| The whole monorepo in one deploy | One app per project | The repo is the unit |
| Cost when you outgrow the free tier | Per-seat and per-usage, adds up | Free beta, fair plans later |