docs/v5/architecture/adr/0001-control-plane-flux-coold-split.md
Accepted.
Coolify v5 needs to manage many user resources across many user-owned hosts, including hosts behind NAT or restrictive firewalls. The Laravel application must own product behavior and durable state, but it should not hold thousands of long-lived agent streams or directly expose host runtime sockets.
Host operations also need a narrow privileged boundary. Podman, firewall, DNS, and Corrosion require local host privileges that should not be spread across the Laravel app or arbitrary scripts. Future builder supervision belongs behind the same boundary, but its active primitive/API shape is deferred to a separate decision.
Coolify v5 uses three distinct building blocks:
coold must not expose raw Podman passthrough. Every supported operation must be an explicit primitive with validation and a stable protocol shape.
images.pull, containers.create, containers.start,
services.register, firewall.allow. coold may execute those.The first validation flow is deploying a Docker image app using nginx:alpine.
That flow requires no builder and exercises the minimum runtime path:
Coolify state machine
→ Flux dispatch
→ coold image pull
→ coold container create/start
→ coold status
→ coold service registration
→ coold firewall
→ Coolify proxy config/reload
→ Coolify marks deployment running