celld
Self-hosted distributed Durable Objects runtime
TLDR
SYNOPSIS
celld [--bucket s3://bucket] [--endpoint url] [--region name] [--listen addr] [--advertise addr] [options]celld deploy path [--bucket s3://bucket] [options]celld diagnose [--bucket s3://bucket] [--peer NODEID_]...
DESCRIPTION
celld is an open-source daemon that runs Cloudflare Workers and Durable Objects on your own machines. Each Durable Object is a cell: a named server with its own private SQLite database. Cells coordinate and replicate only through an S3-compatible bucket you own — there is no separate control plane or consensus service.Every node embeds V8, executes Wrangler bundles, and shares deployments, cell state, and ownership records in the bucket. Object-storage compare-and-swap ensures exactly one node owns a cell at a time. Idle cells hibernate; inactive cells exist only as objects in the bucket and cost almost nothing. Acknowledged writes are replicated to the bucket first (RPO=0).A fleet is formed by pointing nodes at the same bucket. Peers discover each other from leases in the bucket. Peer HTTP is HMAC-authenticated and does not terminate TLS — advertise addresses should stay on a private network or encrypted overlay (WireGuard, Tailscale). Worker projects need esbuild on `PATH` for `celld deploy`; asset-only projects do not.
PARAMETERS
--bucket s3://bucket
Fleet bucket holding deployments, SQLite replicas, ownership, and peer auth. Same as CELLD_BUCKET.--endpoint url
S3-compatible API endpoint (e.g. R2). Same as S3_ENDPOINT.--region name
Object-storage region (auto for R2). Uses the standard AWS region variables when unset.--listen addr
Local HTTP listener (default suitable for local development). Same as CELLD_ADDR.--advertise addr
Address other nodes and ingress can reach. Required for multi-node fleets. Same as CELLD_ADVERTISE.--unsafe-public-advertise
Allow a literal public IP as --advertise (rejected by default).deploy path
Bundle and write a Wrangler project (Workers, Durable Object bindings, static assets) to the bucket.diagnose
Enumerate node leases and probe live peers without taking ownership. Optional --peer NODEID_ (repeatable).-h, --help
Show the full option list and advanced tuning switches.--version
Print the binary version.
CONFIGURATION
CELLD_BUCKET
Default fleet bucket URI.AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
Explicit credentials; the standard AWS credential chain is also used.S3_ENDPOINT, AWS_REGION
Endpoint and region for non-AWS or R2 storage.CELLD_WATCH
Local work directory for SQLite and replication state.CELLD_MAX_RESIDENT_CELLS, CELLD_RESIDENT_LOW_WATER
Optional pressure-shedding watermarks for resident cells.CELLD_MAX_RSS_MB, CELLD_MAX_CPU_PERCENT
Linux memory/CPU pressure triggers for shedding idle cells.CELLD_ESBUILD
Path to esbuild for Worker deploys.RUST_LOG
Runtime log filter.
CAVEATS
The runtime and Cloudflare compatibility surface are still evolving. Bucket credentials are fleet-administrator access — protect them. Do not expose the peer port on the public internet; peer traffic is not TLS-terminated. Public advertise IPs need an explicit unsafe flag. Conformance against full Workers/Durable Objects reference behavior continues to expand.
HISTORY
celld is an Apache-2.0 project from Deno Land (Ryan Dahl and collaborators), released as a self-hosted Durable Objects runtime that uses object storage as the sole coordinator instead of a managed control plane.
