Skip to content

Architecture at a glance

cellp is a private Workers control plane on your hardware: external CI (or cellp dev) registers versions; each ready version gets an isolated data bucket and a celld process; HTTP traffic enters through a gateway that picks the version from the Host header.

Components

PieceRole
cellpdControl plane: REST API, job orchestrator, gateway, SQLite registry
celldCloudflare Workers–compatible runtime (maintained in the cellp repo as celld/); one process per ready version
Object storageArtifacts, per-version celld data, and offshoot blobs — RustFS in Docker/Compose; embedded local S3 with cellp dev
offshootCopy-on-write App + Data branches (SQLite export/import, S3-backed in production)
DashboardVite + React SPA; talks only to the API on :8790 — never to celld ports or S3

Workers code and bindings are declared in wrangler; the platform does not host Git or run your CI.

Default ports (local)

PortService
8787Gateway — preview and production HTTP (route by Host)
8790REST API, admin operations, Dashboard backend, /metrics
8792+celld upstreams (one port per ready version, assigned by cellpd)
5190Dashboard dev server (pnpm --filter cellp-dashboard dev)
9000 / 19000S3 API — RustFS in the contributor stack, or embedded store with cellp dev

See Local stack for script names and cellp dev for the no-Docker path.

Request path

text
Browser / curl
  → your TLS load balancer (optional, you operate)
  → cellpd gateway :8787  (Host selects project + version)
  → celld for that version

Admin and automation:

text
Dashboard / curl / CI
  → cellpd API :8790  (Bearer deploy or admin token)
  → orchestrator spawns celld, runs offshoot/D1 jobs, updates registry

Path-shaped URLs /{project}/{version}/ are deprecated; use Host-based preview and prod URLs from the API or Dashboard. Details: Preview & production.

Laptop vs production-shaped

cellp devDocker Compose / VM
Object storageEmbedded S3 under ~/.cellpRustFS
offshoot storeLocal directory tierS3 (OFFSHOOT_STORE, e.g. s3://cellp-offshoot)
GoalFast product loopSame layout as a serious self-host

The contributor local stack (./dev/scripts/up.sh) uses Docker RustFS on a laptop. Offshoot may use a local directory tier there, while production Compose keeps branches on S3 (OFFSHOOT_STORE). Gateway behavior is still Host ingress in both cases. For a VM-shaped deploy, start with Self-hosting.

What cellp does not include

No managed accounts, DNS, TLS certificates, WAF, or global edge PoPs — you terminate TLS and protect admin surfaces. No PostgreSQL, Caddy, or Forgejo as platform dependencies. See Limits for honesty about single-node registry and roadmap items.

Self-hosted Workers control plane. Not affiliated with Cloudflare or Vercel.