[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94437":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":9,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":16,"starSnapshotCount":16,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},94437,"celld","denoland\u002Fcelld","denoland","self-hosted, distributed Durable Objects",null,"https:\u002F\u002Fgithub.com\u002Fdenoland\u002Fcelld","Rust",2094,54,9,14,0,167,64.22,false,"main","2026-08-24 04:01:22","# celld\n\nSelf-hosted, distributed **Durable Objects**.\n\ncelld is an open-source daemon that runs Cloudflare Workers and Durable\nObjects on your own machines. Each object is its own SQLite database,\naddressed by name and replicated to an\nS3-compatible bucket you own; nodes coordinate through that bucket alone, with\nno control plane or consensus. Because every object is its own small database,\napplications shard by construction — the contention and blast-radius failures\nof one shared database are designed out, not managed. Idle cells hibernate to\nnearly nothing. Learn more at [celld.dev](https:\u002F\u002Fcelld.dev) or read the\n[documentation](https:\u002F\u002Fcelld.dev\u002Fdocs).\n\n## How it works\n\nEvery `celld` node embeds V8 and executes Wrangler bundles. The fleet shares an\nS3-compatible bucket containing deployments, cell state, and small ownership\nrecords. Object-storage compare-and-swap ensures that exactly one node owns a\ncell at a time, without a membership protocol, failure detector, or consensus\nservice.\n\ncelld continuously replicates each cell's SQLite database to the bucket.\nWhen a cell moves or wakes up, its new owner restores that database and resumes\nexecution. The bucket is the durable source of truth; nodes are replaceable.\n\n## Install\n\nThe installer downloads the `celld` binary (provenance is verifiable with\n`gh attestation verify`):\n\n```sh\ncurl -fsSL https:\u002F\u002Fcelld.dev\u002Finstall.sh | sh\n```\n\nPut `~\u002F.local\u002Fbin` on your `PATH` if the installer asks you to.\n\nWorker projects deployed with `celld deploy` need\n[esbuild](https:\u002F\u002Fesbuild.github.io) on `PATH`; asset-only projects do not.\n\nThe installer keeps verified releases under `~\u002F.local\u002Flib\u002Fcelld\u002Freleases` and\natomically switches one `current` pointer. To remove celld, use the guarded\nuninstaller:\n\n```sh\ncurl -fsSL https:\u002F\u002Fcelld.dev\u002Funinstall.sh | sh\n```\n\n## Container\n\nThe release image contains the `celld` binary and is published for Linux\nx86-64 and ARM64:\n\n```sh\ndocker run --rm ghcr.io\u002Fdenoland\u002Fcelld --version\n```\n\nPersist the runtime's local state and pass the standard AWS credential\nenvironment through:\n\n```sh\ndocker volume create celld-state\ndocker run --rm --network host \\\n  -e AWS_ACCESS_KEY_ID \\\n  -e AWS_SECRET_ACCESS_KEY \\\n  -e AWS_SESSION_TOKEN \\\n  -e CELLD_WATCH=\u002Fvar\u002Flib\u002Fcelld\u002Fstate \\\n  -v celld-state:\u002Fvar\u002Flib\u002Fcelld \\\n  ghcr.io\u002Fdenoland\u002Fcelld \\\n  --bucket s3:\u002F\u002Fmy-cells-bucket \\\n  --endpoint https:\u002F\u002FACCOUNT.r2.cloudflarestorage.com \\\n  --region auto \\\n  --listen 0.0.0.0:8080 \\\n  --advertise node-a.internal:8080\n```\n\nDrop `--endpoint`\u002F`--region` for real AWS S3. Behind a load balancer,\ngive each node a distinct `--advertise` its peers can reach.\n\n## Run it\n\ncelld uses the standard AWS credential chain. Deploy to an S3-compatible\nbucket, then start celld against the same bucket:\n\n```sh\ncelld deploy . \\\n  --bucket s3:\u002F\u002Fmy-cells-bucket\n\ncelld \\\n  --bucket s3:\u002F\u002Fmy-cells-bucket \\\n  --listen 0.0.0.0:8080 \\\n  --advertise 10.0.0.12:8080\n```\n\nUse `--endpoint` for another S3-compatible service and `--region` when it\ncannot be inferred. A fleet runs one application, and every node loads its\nlatest successfully committed deployment from `deploy\u002Fcurrent.json`. Run\n`celld --help` for the complete command line.\nDeployment objects use the documented types in `crates\u002Fcelld\u002Fprotocol.rs`. `celld\ndeploy` invokes `esbuild` from `PATH` for Worker code, accepts the supported\nWrangler config subset—including co-deployed or asset-only static\nassets—and writes those objects directly. Every node discovers owners and\npeers from bucket leases; there is no account or join service.\n\nPeer HTTP does not terminate TLS. Put every advertised address on a trusted\nprivate network or an encrypted overlay such as WireGuard or Tailscale; do not\npublish the peer port directly. A literal public IP is rejected unless\n`--unsafe-public-advertise` is supplied explicitly. The first current node creates\n`fleet\u002Fpeer-auth.json` in the bucket. All peer requests are protocol-versioned,\nbody-bound, HMAC-authenticated, clock-bounded, and replay-protected with that\nfleet secret. Treat access to the bucket and its credentials as fleet\nadministrator access.\n\n## Operate a fleet\n\n`celld diagnose` enumerates every node lease by default, then performs a signed\ndirect probe of each live peer:\n\n```sh\ncelld diagnose --bucket s3:\u002F\u002Fmy-cells-bucket\n```\n\nThe report keeps checking after an individual failure and distinguishes\nexpired records, malformed or unsafe advertise addresses, unreachable peers,\nand incompatible protocols. It also prints each node's coarse resident-cell,\nWebSocket, RSS, CPU, file-descriptor, pressure, and shedding sample. Pass one\nor more `--peer NODE_ID` options to restrict the check.\n\nPressure shedding is opt-in while the first release's safe defaults are being\nmeasured. Set a resident-cell high and low watermark on loaded nodes:\n\n```sh\nCELLD_MAX_RESIDENT_CELLS=1000 \\\nCELLD_RESIDENT_LOW_WATER=800 \\\ncelld --bucket s3:\u002F\u002Fmy-cells-bucket --listen 0.0.0.0:8080 \\\n  --advertise node-a.internal:8080\n```\n\nOn Linux, `CELLD_MAX_RSS_MB` and `CELLD_MAX_CPU_PERCENT` add process-memory and\nCPU triggers; the resident-cell watermark is portable. Under pressure, celld\ndurably replicates and fences least-recently used idle cells, publishes them as\nunowned without resetting their epoch, and refuses to reacquire new unowned\ncells until the low watermark is reached. A spare receives no assignment: it\nacquires released cells through the same bucket protocol when normal traffic\nreaches it. Cells with active work or live host WebSockets are not shed.\n\n## Build from source\n\n```sh\ncargo build --locked\ncargo test --locked\ncargo clippy --all-targets --locked -- -D warnings\n```\n\nThe workspace builds the `celld` runtime. Its versioned object-storage\nprotocol lives in `crates\u002Fcelld\u002Fprotocol.rs`. Small Wrangler projects under `examples\u002F`\nexercise the supported Worker and Durable Object surface.\n\nThe runtime and compatibility surface are still evolving. Public tests cover\nthe standalone engine smoke path; conformance against the Workers and Durable\nObjects reference behavior, and a deterministic simulation of the distributed\nprotocol under fault injection, run before each release.\n\n## Contributions\n\nPull requests are disabled. Coding agents make it too easy to send a large,\nlow-context change that costs maintainers more time than it saves. Thoughtful\ncontributions are welcome; please understand the code, keep the patch focused,\nand respect the review time you are asking for.\n\nSend a `git format-patch` attachment to [ry@deno.com](mailto:ry@deno.com).\n\nContributor License Agreement: By emailing a patch, you certify that you have\nthe right to submit it and assign to Deno Land Inc. all rights in the patch\nthat you can assign. Where a right cannot be assigned, you grant Deno Land\nInc. a perpetual, irrevocable,\nworldwide, royalty-free, transferable, sublicensable license to use, modify,\ncombine, relicense, redistribute, or publish the patch, in whole or in part,\nwith or without attribution.\n\n## License\n\n[Apache-2.0](LICENSE)\n\nSee the [limitations](docs\u002Flimitations.md) and\n[security](docs\u002Fsecurity.md) pages before operating a public fleet.\n","celld 是一个可自托管的分布式持久化对象（Durable Objects）运行时。它基于 Rust 实现，通过将每个 Durable Object 映射为独立的 SQLite 数据库，并利用 S3 兼容对象存储进行状态复制与所有权协调，实现无控制平面、无共识协议的轻量级分布式状态管理；支持 V8 执行 Cloudflare Workers 代码，节点可动态接管\u002F休眠，具备天然分片与低故障扩散半径特性。适用于需要私有化部署、强一致性保障且对单体数据库有规避需求的边缘计算、微服务状态管理及 WebAssembly 后端场景。",2,"2026-08-08 02:30:12","trending"]