Celld runs the Workers runtime with Durable Objects as the stateful core: module Workers,Documentation Index
Fetch the complete documentation index at: https://mintlify.com/denoland/celld/llms.txt
Use this file to discover all available pages before exploring further.
fetch, JS RPC, service bindings, and static assets. It does not run the rest of the Cloudflare platform. The scope rule is simple: if Cloudflare builds a function on top of Durable Objects, celld can get that function. A function that depends on a different primitive is out of scope. KV is a global cache with eventual consistency and R2 is blob storage — different systems, not on the roadmap.
A configuration key or binding that is not available must fail loudly, at deploy or at first use.
A silent compatibility gap is a bug. If an unknown key or API fails without
an error instead of throwing, that is a defect. The known silent gaps are
marked in the sections below.
Supported services
| Service | Notes |
|---|---|
| Workers | Module Workers: fetch, JS RPC, service bindings, Durable Object bindings, vars. |
| Durable Objects | The stateful core. SQLite storage, alarms, inbound hibernatable WebSockets, outbound ws:/wss: WebSocket clients (constructor and fetch() upgrade), one writer per cell, names as addresses, RPC methods on stubs. |
| Static assets | Immutable files served from the fleet bucket: assets.directory, binding, html_handling, not_found_handling, run_worker_first, plus _headers and _redirects. An asset-only project deploys without a Worker. |
| Worker Loader (Code Mode) | Experimental. Bind a loader with CELLD_WORKER_LOADER. A Worker can then start sandboxed isolates at runtime. |
Planned
- D1 — A D1 database is a Durable Object with a SQL API. Celld already has the hard part.
- Workflows — Durable execution over cells and alarms.
Not planned
- KV — A different consistency model; not on the roadmap.
- R2 — Celld runs on blob storage; it does not provide blob storage. Declared
r2_bucketsbindings load, but each method throws. - Cache API — Not available.
- Workers AI, Vectorize, Hyperdrive, Browser Rendering, Email — Managed platform services.
- Cron triggers, custom domains, TLS termination — Platform surface. Celld has its own durable alarms; put TLS in your ingress proxy.
Runtime API compatibility
| API | Status |
|---|---|
| Fetch, Request, Response, Headers | Yes. Gaps: Response.redirect(), Response.error(), and the cache request option are missing. |
Bindings (env) | Yes for Durable Objects, service bindings, vars, and assets. Other binding types are out of scope (see Services above). |
Context (ctx) | Yes: waitUntil, props, exports. passThroughOnException() is accepted but has no effect. ctx.facets is absent. |
| Handlers | fetch, alarm, webSocketMessage / webSocketClose / webSocketError, and RPC methods. No scheduled (cron), queue, tail, or email handlers. |
| RPC | Yes, for most of the surface. See RPC. |
| Streams | Yes. Includes byte streams, BYOB readers, tee / pipeTo / pipeThrough, IdentityTransformStream, FixedLengthStream, and CompressionStream / DecompressionStream. Gap: ReadableStream.from(). |
| Encoding | Yes: TextEncoder / TextDecoder (legacy encodings included), encoder and decoder streams, atob / btoa. |
| WebSockets | Yes, inbound (hibernatable, with attachments) and outbound. Attachments hold anything that structured clone accepts. setWebSocketAutoResponse answers a matched message without a wake. Gap: getTags(). |
| Web Crypto | Partial: digest (including MD5), HMAC sign and verify, AES-GCM / AES-CBC / AES-CTR, RSA-OAEP decrypt, Ed25519 and ECDSA-P256 sign, verify for RSASSA-PKCS1-v1_5 and ECDSA-P256. importKey / exportKey for spki, pkcs8, jwk, raw across RSA, EC (P-256/384/521), Ed25519, X25519. generateKey covers AES, HMAC, RSA, EC P-256, Ed25519. timingSafeEqual and DigestStream (with CRC32, CRC32C, CRC64-NVME). ECDH deriveBits / deriveKey on P-256/384/521. Missing: wrapKey / unwrapKey, RSA-PSS signing, HKDF and PBKDF2 via deriveBits (available through node:crypto). An unavailable algorithm throws. |
| Web standards | Yes: URL, URLSearchParams, URLPattern, AbortController / AbortSignal (with timeout(), any()), Blob / File / FormData, Event / EventTarget, DOMException, queueMicrotask, structuredClone, navigator.userAgent. |
| WebAssembly | Yes (V8’s own engine, without restrictions). A bundle can import a .wasm file as a compiled module. See WebAssembly. |
| Performance and timers | setTimeout / clearTimeout, setImmediate, scheduler.wait(). setInterval throws. performance.now() has millisecond resolution. Other performance members are stubs. |
| Console | log / info / warn / error are real. debug / trace / group / table do nothing. assert / time / count are absent. |
| Node.js compatibility | Partial. See Node.js Imports. |
Facets (ctx.facets) | No. A Durable Object cannot create a facet, and ctx.facets is not defined. ctx.exports gives no stub for a Durable Object class that the configuration does not declare. |
Cache (caches) | No. |
| HTMLRewriter | No. |
TCP sockets (cloudflare:sockets) | No. |
| EventSource, MessageChannel, BroadcastChannel | No. |
Wrangler configuration
celld deploy builds a standard Wrangler project (esbuild on PATH) and accepts wrangler.jsonc or wrangler.json — not wrangler.toml.
Supported keys:
| Key | Notes |
|---|---|
name | The Worker name. |
main | The entry-point module. Can be omitted for asset-only projects. |
compatibility_date | Honored for the switches celld models. |
compatibility_flags | Honored: delete_all_deletes_alarm, js_rpc, fetcher_no_get_put_delete, websocket_standard_binary_type. Unknown flags are accepted without effect. |
durable_objects | Binding declarations and class names. |
migrations | SQLite migration tags (new_sqlite_classes). |
assets | Static asset configuration (directory, binding, html_handling, etc.). |
services | Service bindings to other Workers. |
vars | Plain-text environment variables. |
routes, kv_namespaces, triggers, and so on — stops the deploy with a named error. Remove the key, or deploy that project with Wrangler instead.