<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd" -->

---
title: celld: self-hosted, distributed Durable Objects | daily.dev
description: celld is an open source, self-hosted implementation of Cloudflare Workers and Durable Objects created by Ryan Dahl, released as version 0.1.0 under Apache 2.0....
canonical: https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: celld: self-hosted, distributed Durable Objects | daily.dev
og:description: celld is an open source, self-hosted implementation of Cloudflare Workers and Durable Objects created by Ryan Dahl, released as version 0.1.0 under Apache 2.0....
og:url: https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd
og:image: https://api.daily.dev/og/posts/sxgGEsXkd.png
og:image:alt: celld: self-hosted, distributed Durable Objects
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# celld: self-hosted, distributed Durable Objects

**[Flavio Copes](https://daily.dev/sources/flaviocopes)** · 24 min read · 0 upvotes · 0 comments

## Summary

celld is an open source, self-hosted implementation of Cloudflare Workers and Durable Objects created by Ryan Dahl, released as version 0.1.0 under Apache 2.0. It runs on your own VMs using V8 for JavaScript execution, one SQLite database per Durable Object (called a 'cell'), LTX for SQLite replication, and an S3-compatible bucket as both storage and coordination layer — eliminating the need for a separate control plane, Raft cluster, or consensus service. Key performance benchmarks include ~4 MB RAM per resident cell, ~1,000 resident cells on an 8 GB node, ~4 ms cell wake time, ~90 ms durable write latency, and ~20 second failover. The post provides a thorough architectural breakdown, code examples using the familiar Durable Objects API, an honest cost comparison with Cloudflare's managed offering, and a candid assessment of current alpha limitations including missing APIs (KV, R2 bindings, Queues, Cron Triggers) and security constraints around multi-tenant workloads.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://flaviocopes.com/celld>

## Questions this post answers

### How does celld handle distributed coordination without a Raft cluster or control plane?

celld uses an S3-compatible object storage bucket as both storage and coordinator. Nodes write leases to the bucket and discover peers through it. Cell ownership is a conditional compare-and-swap write in the bucket — whichever node wins the write owns the cell. If a node disappears, its lease expires and another node claims the cell, restores the SQLite state from the bucket, and continues. No separate membership system or consensus service is needed.

_Developers building distributed stateful systems without managed infrastructure track architectural patterns like this on daily.dev._

### What are the performance benchmarks for celld 0.1.0?

celld 0.1.0 reports approximately 4 MB of RAM per resident trivial cell, around 1,000 resident cells on a single 8 GB node, about 4 ms to wake a hibernated cell on a local benchmark machine, around 90 ms for a durable region-local write, and roughly 20 seconds for failover after killing a node. A separate test with ten 4-vCPU/8 GB nodes held 10,000 resident cells and 20,000 WebSocket connections, recovering all cell data in about 11 seconds after two nodes failed.

_Engineers evaluating self-hosted stateful runtimes find benchmark comparisons like these worth following on daily.dev._

### What Cloudflare Workers APIs does celld support and what is out of scope?

celld supports module Workers with fetch, Durable Objects with SQLite storage, alarms, inbound and outbound WebSockets, service bindings, JavaScript RPC, static assets, common Web Platform APIs, part of Web Crypto, and part of the Node.js compatibility layer. Out of scope are KV, R2 bindings, Cache API, Workers AI, Vectorize, Hyperdrive, Browser Rendering, Email, Cron Triggers, custom domains, and TLS termination. wrangler.toml is also unsupported; only wrangler.json and wrangler.jsonc are accepted.

_Developers migrating Workers projects off Cloudflare watch compatibility gaps like these on daily.dev._

## Similar posts on daily.dev

- [Node.js creator liberates Durable Objects from Cloudflare](https://daily.dev/posts/node-js-creator-liberates-durable-objects-from-cloudflare-y12vjttqy) · DEVCLASS · 0 upvotes · 1 comments
- [celld: Durable Objects, Unbundled](https://daily.dev/posts/celld-durable-objects-unbundled-4gymvdipq) · ITNEXT · 0 upvotes · 0 comments
- [Cloudflare Durable Objects: state that lives in one place](https://daily.dev/posts/cloudflare-durable-objects-state-that-lives-in-one-place-bshikg52i) · Flavio Copes · 0 upvotes · 0 comments
- [Durable Objects on Cloudflare – Master.dev Blog](https://daily.dev/posts/durable-objects-on-cloudflare-master-dev-blog-zl8uewo5b) · Frontend Masters · 0 upvotes · 0 comments

---

Tags: [#distributed-systems](https://daily.dev/tags/distributed-systems), [#cloudflare](https://daily.dev/tags/cloudflare), [#self-hosting](https://daily.dev/tags/self-hosting), [#sqlite](https://daily.dev/tags/sqlite)

[View this post on daily.dev](https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"celld: self-hosted, distributed Durable Objects","url":"https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd"},"datePublished":"2026-08-07T18:27:35.361Z","dateModified":"2026-08-11T18:26:25.496Z","description":"celld is an open source, self-hosted implementation of Cloudflare Workers and Durable Objects created by Ryan Dahl, released as version 0.1.0 under Apache 2.0....","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7219243bb6b6113ecc90bd933965a4ef?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/7219243bb6b6113ecc90bd933965a4ef?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Flavio Copes","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Flavio Copes","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/1f2dbd275797411bbd37bfdaaf0951a9","url":"https://daily.dev/sources/flaviocopes"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"distributed-systems,cloudflare,self-hosting,sqlite","timeRequired":"PT24M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Flavio Copes","item":"https://daily.dev/sources/flaviocopes"},{"@type":"ListItem","position":3,"name":"celld: self-hosted, distributed Durable Objects"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/celld-self-hosted-distributed-durable-objects-sxggesxkd#faq","mainEntity":[{"@type":"Question","name":"How does celld handle distributed coordination without a Raft cluster or control plane?","acceptedAnswer":{"@type":"Answer","text":"celld uses an S3-compatible object storage bucket as both storage and coordinator. Nodes write leases to the bucket and discover peers through it. Cell ownership is a conditional compare-and-swap write in the bucket — whichever node wins the write owns the cell. If a node disappears, its lease expires and another node claims the cell, restores the SQLite state from the bucket, and continues. No separate membership system or consensus service is needed. Developers building distributed stateful systems without managed infrastructure track architectural patterns like this on daily.dev."}},{"@type":"Question","name":"What are the performance benchmarks for celld 0.1.0?","acceptedAnswer":{"@type":"Answer","text":"celld 0.1.0 reports approximately 4 MB of RAM per resident trivial cell, around 1,000 resident cells on a single 8 GB node, about 4 ms to wake a hibernated cell on a local benchmark machine, around 90 ms for a durable region-local write, and roughly 20 seconds for failover after killing a node. A separate test with ten 4-vCPU/8 GB nodes held 10,000 resident cells and 20,000 WebSocket connections, recovering all cell data in about 11 seconds after two nodes failed. Engineers evaluating self-hosted stateful runtimes find benchmark comparisons like these worth following on daily.dev."}},{"@type":"Question","name":"What Cloudflare Workers APIs does celld support and what is out of scope?","acceptedAnswer":{"@type":"Answer","text":"celld supports module Workers with fetch, Durable Objects with SQLite storage, alarms, inbound and outbound WebSockets, service bindings, JavaScript RPC, static assets, common Web Platform APIs, part of Web Crypto, and part of the Node.js compatibility layer. Out of scope are KV, R2 bindings, Cache API, Workers AI, Vectorize, Hyperdrive, Browser Rendering, Email, Cron Triggers, custom domains, and TLS termination. wrangler.toml is also unsupported; only wrangler.json and wrangler.jsonc are accepted. Developers migrating Workers projects off Cloudflare watch compatibility gaps like these on daily.dev."}}]}
```

