Skip to content

From Cloudflare

You keep writing Workers. You stop deploying into a Cloudflare account.

Deploy path

Cloudflare today

bash
wrangler deploy     # account + bindings in CF
wrangler dev

cellp

build wrangler bundle
  → upload s3://cellp-artifacts/{project}/{version}/
  → POST /v1/projects/{project}/versions
  → poll until ready
  → preview_url from API (Host on gateway)
  → promote: POST …/promote

There is no wrangler deploy target for cellp. CI (or a script) is the client.

celld vs cellp

Concerncelldcellp
Worker APIs (fetch, D1, KV, …)Implements wrangler bindingsRuns one celld per ready version
Data isolation on previewPer-version fleet bucketBranches D1/KV/R2/Queue from parent on child versions
CronFires scheduled when armedArms crons only on production (see Cron; pre-promote projects may arm every ready version)
WorkflowsRuns instancesInstances not branched; operator list is read-only
Durable ObjectsPartial runtimeNo branch; not on bindings API
IngressTrusts forwarded headers from GatewayHost / port routing

Gap list for APIs: celld cloudflare-compat. Binding guides.

Wrangler checklist

Before you cut over CI:

  1. Single main Worker — no [[services]] multi-worker graph (unsupported on cellp today). Queue consumers are a second Worker artifact (often a second version)—see Queues.
  2. Binding names — keep env.DB, env.MY_KV, etc.; child versions inherit identities on branch.
  3. Pre-build — ship the worker entry + assets from CI; do not depend on celld to compile Tailwind, .md imports, or full framework SSR graphs.
  4. wrangler.json(c) in the bundle — celld parses binding config from the artifact at deploy.
  5. No Cloudflare-only bindings — Workers AI, Vectorize, Hyperdrive, Browser Rendering, Email, Python Workers are No in celld.
  6. Validate — run through celld compatibility for each binding you use.

Local proof: local stack and the commerce example.

Concepts

Cloudflarecellp
Worker in an accountVersion = process + bucket
Preview URLs / env branchesPreview Host + prod Host (Host-based routing)
D1 database_id shared or copiedRoot: import / seed. Child: d1 branch
KV / R2 / Queue sharedChild branches parent data
Workflow state in accountNew preview version: empty instances
Cron on each deployed WorkerProduction ready version arms schedules (Cron)
Production route / custom domainPromote + your DNS/TLS
Wrangler-managed lifecycleBundle contains wrangler JSON; celld parses at deploy
Hyperdrive / managed PostgresNo — use D1 or connect to your Postgres/MySQL from the Worker over the network

parent_version_id means “fork App + Data from this version.” Point PRs at a seed/staging version—not live production.

Archived versions are stopped processes (503) until POST …/wake. They are not “sleeping Workers that wake on the first request.”

Bindings

Use the binding guides and bindings overview. Identities inherit on branch so you do not rewrite env.DB.

Not ported (on purpose or runtime No):

CapabilityStatus
wrangler deploy / wrangler dev against cellpNo — CI + API + gateway URL
wrangler tailNo
Workers AI / Vectorize / Hyperdrive / Browser Rendering / Email / Python WorkersNo in celld
Global AnycastNo
Built-in DNS / CDN / TLS / WAFNo
Account membersNo — two tokens
R2 object UINo
Workflow pause/resume in cellp Dashboard/APINo — read-only list; celld may support lifecycle from Worker code
Images bindingPartial in celld — Images
Durable ObjectsPartial in celld — no cellp branch — Durable Objects

Judge a Worker against celld compatibility, not against “it ran on CF.”

Framework tiers: tier-1 stacks (Astro, SvelteKit, Remix, Nuxt, Vite SPA) and Next.js (experimental only) are in Framework tiers and Supported stacks.

Suggested migration

  1. Confirm each binding is Yes/Partial in celld compat (D1, KV, Queues, R2, Workflows, Cron, DO/Images if used).
  2. Run the local stack and deploy the commerce example.
  3. Point CI at artifact upload + POST /versions.
  4. Use parent_version_id for PR previews; check Dashboard lineage.
  5. Promote a known-good version; put your LB in front of the gateway.

Durable Objects

celld has partial Durable Objects (RPC across isolates, WebSocket migration, and SQLite edge cases differ from Cloudflare). cellp does not branch DO storage like D1/KV/R2/Queue—each version’s DO state is isolated to that celld fleet. If DO is load-bearing, read the compat notes before you promise a date. Operator guide: Durable Objects.

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