Skip to main content

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.

Celld runs the Workers runtime with Durable Objects as the stateful core: module Workers, 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

ServiceNotes
WorkersModule Workers: fetch, JS RPC, service bindings, Durable Object bindings, vars.
Durable ObjectsThe 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 assetsImmutable 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_buckets bindings 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

APIStatus
Fetch, Request, Response, HeadersYes. 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.
Handlersfetch, alarm, webSocketMessage / webSocketClose / webSocketError, and RPC methods. No scheduled (cron), queue, tail, or email handlers.
RPCYes, for most of the surface. See RPC.
StreamsYes. Includes byte streams, BYOB readers, tee / pipeTo / pipeThrough, IdentityTransformStream, FixedLengthStream, and CompressionStream / DecompressionStream. Gap: ReadableStream.from().
EncodingYes: TextEncoder / TextDecoder (legacy encodings included), encoder and decoder streams, atob / btoa.
WebSocketsYes, inbound (hibernatable, with attachments) and outbound. Attachments hold anything that structured clone accepts. setWebSocketAutoResponse answers a matched message without a wake. Gap: getTags().
Web CryptoPartial: 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 standardsYes: URL, URLSearchParams, URLPattern, AbortController / AbortSignal (with timeout(), any()), Blob / File / FormData, Event / EventTarget, DOMException, queueMicrotask, structuredClone, navigator.userAgent.
WebAssemblyYes (V8’s own engine, without restrictions). A bundle can import a .wasm file as a compiled module. See WebAssembly.
Performance and timerssetTimeout / clearTimeout, setImmediate, scheduler.wait(). setInterval throws. performance.now() has millisecond resolution. Other performance members are stubs.
Consolelog / info / warn / error are real. debug / trace / group / table do nothing. assert / time / count are absent.
Node.js compatibilityPartial. 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.
HTMLRewriterNo.
TCP sockets (cloudflare:sockets)No.
EventSource, MessageChannel, BroadcastChannelNo.
Known silent gaps — these APIs exist so that bundles load, but they do not function:
  • cloudflare:sockets connect() currently gives an inert stub and does not throw.
  • EventSource, MessageChannel, and BroadcastChannel classes exist but do nothing.

Wrangler configuration

celld deploy builds a standard Wrangler project (esbuild on PATH) and accepts wrangler.jsonc or wrangler.json — not wrangler.toml. Supported keys:
KeyNotes
nameThe Worker name.
mainThe entry-point module. Can be omitted for asset-only projects.
compatibility_dateHonored for the switches celld models.
compatibility_flagsHonored: delete_all_deletes_alarm, js_rpc, fetcher_no_get_put_delete, websocket_standard_binary_type. Unknown flags are accepted without effect.
durable_objectsBinding declarations and class names.
migrationsSQLite migration tags (new_sqlite_classes).
assetsStatic asset configuration (directory, binding, html_handling, etc.).
servicesService bindings to other Workers.
varsPlain-text environment variables.
Any other key — routes, kv_namespaces, triggers, and so on — stops the deploy with a named error. Remove the key, or deploy that project with Wrangler instead.

Build docs developers (and LLMs) love