denoland /celld

self-hosted, distributed Durable Objects

★ 6,224⑂ 439👁 28▤ 12
RustCreated 2025-04-25celld.dev
TA的项目
6,224
stars
+0+8+1,201
439
forks
28
watchers
–
prs
–
issues
12
releases
–
discussions

README

celld

Self-hosted, distributed Durable Objects.

celld is an open-source daemon that runs a Cloudflare Workers application
on your own machines: Workers, Durable Objects, KV, Queues, D1, R2,
Workflows, Cron Triggers, and static assets, deployed from the
wrangler.json that you already have. Each object is a cell: a named
server with its own SQLite database. celld stores the long-term state in
your S3-compatible, Google Cloud Storage, or Azure Blob Storage bucket.
It needs no serving control plane or consensus service.
An inactive cell costs almost nothing. Learn more at
celld.dev or read the
documentation.

 How it works

A node is one celld process, and you run one on each machine. Every
node embeds V8 and executes Wrangler bundles. The nodes that share one
bucket are a fleet, and that bucket holds the deployments, the cell
state, and small ownership records. A conditional bucket write gives a node the
ownership of a cell, so exactly one node owns a cell at a time. The fleet
needs no membership protocol, failure detector, or consensus service. Signed
peer HTTP provides routing and replicated-log transport.

celld captures each committed SQLite write in the LTX replication format.
A single node proves the write durable by uploading that data to the bucket. A fleet of two or more nodes proves it
sooner: the owner sends the data to one or two other nodes, and the write
is durable as soon as they hold it on their disks. celld uploads the data
to the bucket afterwards. A single node has no other node to send to, so
each write waits for the bucket, and those writes are much slower.
Before a takeover restores a cell, celld recovers an open log from the
prior owner, so the bucket holds the long-term state and nodes stay
replaceable. See what celld guarantees for the
complete protocol.

 What runs on celld

celld runs the programmatic Workers platform: the runtime, and each binding
that Cloudflare builds on Workers and Durable Objects. A KV namespace, a
queue, a D1 database, and a Workflow are each a cell, so
they get the same lease, the same replication, and the same failover as a
Durable Object. R2 bindings read, write, and list objects directly in the
fleet bucket. Each row links to a project that deploys as-is:

| service | example |
| --- | --- |
| Workers: fetch handlers, service bindings, JS RPC, Node.js compat | hello |
| Durable Objects: SQLite storage, alarms, hibernating WebSockets | counter |
| KV: list, metadata, expiration, bulk import | kv |
| Queues: producers, batching consumers, retries, dead letters | queues |
| D1: SQL databases, batches, migrations | d1 |
| R2: reads, writes, lists, multipart uploads | r2 |
| Workflows: durable steps, sleeps, events, pause and restart | workflow |
| Cron Triggers: one run for each occurrence across the fleet | cron |
| Static assets: asset-only or with a Worker, _headers, _redirects | static-assets |
| Dynamic Workers: runtime-loaded code and Tail Worker observability | dynamic-worker-tails |
| Conta

Snapshot: 2026-11-04T14:00:00Z · Data license Apache-2.0 · JSON