celld

Self-hosted, distributed Durable Objects

  • Your Cloudflare app runs unchanged: Workers, Durable Objects, KV, Queues, D1, R2, Workflows, Cron, static assets (supported APIs →)
  • Your data lives in a bucket you own
  • Orders of magnitude cheaper at scale

Get it

Install the 58 MB static executable
$ curl -fsSL celld.dev/install.sh | sh
Or run the Docker container
Or tell your agent
❯ create a distributed chat app with vite, use celld.dev and exe.dev, 2 VMs

Key characteristics

Durability
Writers per cell (epoch-fenced)1
Acknowledged writes lost on kill0RPO=0
Durable write latency (one node, region-local)~90ms
Failover after node loss, 0 lost~20s
Speed (warm)
Stateless request p50 / p990.2 / 0.3ms
Stateless throughput / worker thread~94kreq/s
Wake a hibernated cell~4ms
Density & cost
RAM per resident cell0.47MB
Resident cells / 8 GB node2,500cells
Inactive cell cost~0bucket ops
$ / resident cell-month~$0.02
Compatibility
Supported services and APIsdocs →
  1. Speed and density: one node, trivial cells, an Apple M-series laptop over loopback. The measured 2 vCPU fleet node had a slower activation p50 of 35.9 ms.
  2. Durability: a fleet of 4 vCPU / 8 GB nodes and a bucket in the same region. We test failover by stopping a loaded node with SIGKILL and verifying every room after recovery. How this is measured →

Monthly cost vs resident fleet size

0.11101001k10k100k$1$10$100$1k$10k$100k$1M← Durable Objects cheaper10 resident cells: DO $42/mo · celld $49/mo100 resident cells: DO $415/mo · celld $49/mo1,000 resident cells: DO $4,150/mo · celld $49/mo10,000 resident cells: DO $41,500/mo · celld $195/mo100,000 resident cells: DO $415,000/mo · celld $1,949/mo100 resident cells: $49/mo1,000 resident cells: $49/mo10,000 resident cells: $195/mo100,000 resident cells: $1,949/mo1.2 resident cells: DO's included duration runs outUnder one resident cell: paid plan assumed; $0 on the free planDurable ObjectscelldResident cellsMonthly cost
  1. Durable Objects: Workers Paid, $5/mo plus $4.15 per resident cell-month; the free plan covers small workloads.
  2. celld: whole $48 / 8 GB nodes (DigitalOcean us-east list), capped at 2,500 resident cells each; capacity is added in steps.
  3. These base costs exclude the compute and bucket usage from application traffic and writes. Click a dot for a cost breakdown.

Supported services

ServiceWhat it isStatusExample
Workersstateless request handlersSupportedexamples/hello →
Durable Objects / Cellssingle-threaded actors with durable storageSupportedexamples/counter →
Durable Object Facetschild objects inside a Durable ObjectSupportedexamples/facets →
KVkey-value storeSupportedexamples/kv →
Queuesmessage queueSupportedexamples/queues →
D1SQL databaseSupportedexamples/d1 →
R2S3-style object storageSupportedexamples/r2 →
Workflowsdurable multi-step executionSupportedexamples/workflow →
Cron Triggersscheduled handlersSupportedexamples/cron →
Static assetsfiles served from a directorySupportedexamples/static-assets →
Dynamic WorkersWorkers loaded at runtimeSupportedexamples/dynamic-worker-tails →
Containersa container supervised by a Durable ObjectExperimentalexamples/container →
  1. celld deploy reads your existing wrangler.json and stops on an unknown key instead of ignoring it.
  2. Each KV namespace, D1 database, queue, and Workflow is a cell, with the same lease, SQLite database, LTX replication, and failover as a Durable Object. R2 bindings read and write objects directly in your bucket.
  3. A KV namespace and a queue each have one writer. Add namespaces or queues for write capacity.
  4. Out of scope: anything that needs Cloudflare's network, its GPUs, or a browser farm. Known gaps and differences are listed on the compatibility page →

How it works

Workers handle requests. Durable Objects, KV, Queues, D1, and Workflows keep their state in cells, each with its own SQLite database. Nodes share a bucket for durable storage, and a conditional bucket write assigns cell ownership. The fleet needs no membership protocol, failure detector, or consensus service.

One fleet, one bucket

HTTP clients
Your fleet
Your load balancerTLS termination · routes to any instance

celld instance A

Stateless Workers
Cells

JavaScript + SQLite per cell

  • cell 1
  • cell 2
  • cell 3
  • cell 4
  • cell 5
Cell routing
& write replication

celld instance B

Stateless Workers
Cells

JavaScript + SQLite per cell

  • cell 6
  • cell 7
  • cell 8
  • cell 9
  • cell 10

Any number of celld instances

Your shared bucket

Durable state for every cell

  • cell 1
  • cell 2
  • cell 3
  • cell 4
  • cell 5
  • cell 6
  • cell 7
  • cell 8
  • cell 9
  • cell 10

SQLite + LTX · ownership · deployments

S3-compatible · Google Cloud Storage · Azure Blob Storage

Each cell runs on one instance at a time. Instances route cell requests and replicate writes between peers. If an instance stops, another can take over its cells. How durability works →

Reliability

celld keeps the Durable Objects programming model and gives you control over where cells run, how their state is stored, and how you investigate failures.

A review and an incident record about Durable Objects from July 2026.

What self-hosting changes:

Placement

Cells survive node loss

A cell belongs to whichever node holds its lease in your bucket. If that node fails, another acquires the lease through compare-and-swap and restores the cell from your storage in seconds.

Blast radius

A failure domain you choose

Your fleet still depends on its machines, network, and bucket provider. Cell scheduling and placement run within your fleet, separate from other customers' Durable Objects workloads.

Diagnostics

Failures you can investigate

You can investigate a cell's failures through its ownership record, SQLite and LTX files, and logs, using tools like sqlite3 and grep.

Self-hosting puts you in charge of your nodes, bucket provider, and operations, but it doesn't guarantee reliability.

We love Cloudflare, and this very page runs on a Cloudflare Worker. The Durable Objects model is one of the best primitives distributed systems has gained in years: a single-threaded object with its own storage, addressed by name. That design belongs to Kenton Varda and the Cloudflare Workers team.

celld is a love letter to their idea; a primitive this good deserves to run anywhere.

celld=V8+SQLite+LTX

A stateful distributed system built on S3.

LTX is Litestream's replica format, from Ben Johnson