OpenAltFinder
celld

celld

Open-source daemon that runs Cloudflare Workers and Durable Objects on your own machines, with state stored in an S3-compatible bucket.

Open source alternative to:

celld is an open-source daemon from Deno that brings Cloudflare's Durable Objects model to any infrastructure you control. Each object is a single-threaded actor paired with its own SQLite database, replicated as LTX segments to a bucket you own — S3-compatible storage or Google Cloud Storage. The bucket itself is the coordination layer, so there is no separate control plane, membership protocol, or consensus service to run.

A fleet is just a set of celld nodes pointed at the same bucket. Deployments, cell state, and small ownership leases live in the bucket; nodes discover peers and acquire cells through compare-and-set writes alone. A cell that no node currently holds costs effectively nothing, and a node can shed idle cells under memory pressure without losing durability. Failover is handled by the next node picking up the lease and restoring the cell from the bucket.

celld executes Wrangler bundles in an embedded V8 runtime, so existing Cloudflare Workers and Durable Objects code runs unchanged. It exposes an HTTP listener for application traffic, an internal listener for peer-to-peer traffic, and an operator API that surfaces leases, resident cells, RSS, and pressure metrics. Each node can be capped with CELLD_MAX_RESIDENT_CELLS and CELLD_MAX_RSS_MB.

Compared to Cloudflare Durable Objects, celld moves placement, state, and operational evidence into infrastructure you choose. The trade-off is operational responsibility — you run the nodes and pick the bucket provider — in exchange for predictable costs at scale (a $48 / 8 GB node can hold around 2,500 resident cells) and a failure domain you can inspect with sqlite3 and grep.

Frequently Asked Questions

Which platforms does celld run on?

celld ships as a 58 MB static Linux binary for x86-64 and ARM64, installable via curl https://celld.dev/install.sh. Official container images are published to ghcr.io/denoland/celld for both architectures, and a Dockerfile is included in the repository for custom builds. Node software is written in Rust, so macOS, Linux, and Windows are all viable development targets.

Does celld require a specific bucket provider?

celld is bucket-agnostic. It works against any S3-compatible service, including AWS S3, Cloudflare R2, MinIO, and others, and also against Google Cloud Storage via the XML API with generation preconditions. S3-compatible buckets use the standard AWS credential chain; Cloud Storage buckets use Application Default Credentials. A gs:// URL is rejected if an S3 endpoint is supplied, and vice versa.

How does celld handle authentication and peer security?

Each fleet ships with a fleet-wide HMAC secret that is generated and stored in fleet/peer-auth.json in the bucket by the first live node. Peer HTTP and the operator API sit on an internal listener and require body-bound, HMAC-authenticated, clock-bounded, replay-protected requests under that secret. The README recommends putting the internal listener on a trusted private network or an overlay such as WireGuard or Tailscale.

Can I keep running my existing Cloudflare Workers code?

Yes. celld deploys Wrangler bundles as-is, supports the documented subset of wrangler.toml including co-deployed and asset-only projects, and bundles Worker code with esbuild from PATH. The compatibility matrix with the Cloudflare Workers and Durable Objects APIs is documented at celld.dev/docs/cloudflare-compat.

What happens when a celld node dies?

Ownership is a lease in the bucket, not a binding to a machine. When a node fails, its lease expires and another node picks it up through a single atomic compare-and-set write, restoring the cell from its replicated SQLite state. The project reports roughly 20 seconds of failover time on a 4 vCPU / 8 GB fleet with zero lost writes.

How does celld operate under memory pressure?

celld sheds idle cells when RSS exceeds the configured CELLD_MAX_RSS_MB threshold (80% of available memory by default). It durably replicates and fences the least-recently used idle cells, then publishes them as unowned without resetting their epochs. Cells with active work or live WebSocket hosts are never shed, and a spare node will refuse new unowned cells until RSS drops to 80% of the threshold.

Does celld have an operator API or CLI?

celld is operated entirely from the celld CLI. The main commands are celld deploy, which uploads a Worker bundle to the bucket, celld diagnose, which enumerates every lease and probes each live peer with metrics such as resident cells, WebSocket counts, RSS, CPU, file descriptors, pressure, and shedding state, and the standard celld --help for the full surface.

Visit celld
License
Apache-2.0
Self hostable
Yes
Repository details
Version
v0.2.0
Created
4/25/2025
Stars
3,336
Forks
106
Open issues
8
Last commit
8/12/2026

Updated 8/13/2026, 4:00:14 PM

View Repository

Similar open source alternatives