Branch
The thing that is actually new. Child versions copy-on-write from a parent. QA hits realistic data. Preview writes never land in production.
How preview forks
Worker + D1 + KV + R2 + Queue · versioned together · celld runs it · cellp orchestrates it
cellp is a self-hosted Workers control plane: CI posts a version, you get a preview Host; the first ready version becomes production, and you promote for later cutovers on your hardware. celld is the runtime (Workers APIs, bindings)—vendored and extended in the cellp repository for private deploy (D1/KV/R2/Queue branch, per-version buckets). cellp does not re-implement the isolate; it runs one celld per ready version and forks data with offshoot.
This is not self-hosted Cloudflare: no account, no Anycast edge, no built-in DNS/TLS/CDN. You keep Git, CI, and your load balancer. Why cellp · Compare · From Cloudflare
| Piece | Role |
|---|---|
| celld | Execute fetch, D1, KV, R2, Queues, Workflows, Cron from your wrangler bundle |
| cellp | Registry, Gateway (Host ingress), promote saga, D1/KV/R2/Queue branch orchestration |
| offshoot | Copy-on-write data fork between parent and child versions |
| RustFS | Private S3 for artifacts and per-version storage |
What is cellp · How it works · Coding Agent on cellp
Branch. A child version is not a new empty environment that still talks to prod. You pass parent_version_id. cellp keeps the Worker script from this deploy, and forks every data binding from the parent:
New isolate, new URL. The script is from this wrangler bundle — not a diff of the parent Worker.
celld d1 branch. Child bucket stores base.json + LTX. Preview SQL writes stay in the preview.
Namespace fork. Large values chain to the parent blob store. Preview puts do not mutate prod keys.
Prefix overlay and tombstones. Preview objects and deletes are local to the version.
The queue name in wrangler is the same; the data is a branch. Messages enqueued here never drain in prod.
Workflow instances and Cron are not branched — they start from this artifact. That is intentional. Bindings · Preview · Data fork
cellp is the control plane that versions the Worker and its D1, KV, R2, and Queues together, then gives you a preview URL; the first ready version serves production, and later changes use promote.
You want Worker + D1 + KV + R2 + Queue on hardware you own, with previews that actually fork the data.
You already run Git, CI, and a load balancer. You need a Workers control plane with binding-aware branches — not another PaaS.
The wedge is branch: App + Data versioning for private Workers. Clear non-goals. Runnable in minutes on a laptop.
curl | sh then cellp dev on a laptop. Docker Compose + RustFS on a VM. No Cloudflare account, no AWS S3.ready version becomes prod; later production is not “whatever main built last” without promote.curl -fsSL https://raw.githubusercontent.com/KonghaYao/cellp/main/scripts/install.sh | sh
export PATH="$HOME/.local/bin:$PATH"
cellp devIf the current directory has wrangler.jsonc, it is deployed as version dev. Otherwise the platform is up and you can write a Worker.