Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cross-Language Feature Coverage

This is the canonical feature-coverage matrix for the lazily family. Each binding’s README reproduces it; this page is the source of truth. It is a status view (what each port ships today), distinct from the normative Binding Conformance Matrix, which fixes what every binding must eventually provide.

Legend: ✅ shipped · ~ partial · absent or not applicable (see notes).

The table below is generated from coverage.json by scripts/sync-coverage.mjs. Edit coverage.json and run make coverage-sync (or node scripts/sync-coverage.mjs) to update this table and every binding README in one shot; make coverage-check guards drift in CI.

FeatureRustPythonKotlinJSDartZigGoC++C#
Reactive graph — two cell kinds (nodes SourceCell / ComputedCell; handles Source<T, M> / Computed<T>) + Effect sink + eager Computed (computed().eager()) / all cells guarded / batch
Keyed-map materialization (ComputedMap) — mint-on-access derived slots: transparency + deferral (#lzmatmode)
Thread-safe keyed map (ThreadSafeComputedMap) — Send + Sync + materialization confluence (#lzmatmode)
Async keyed map (AsyncComputedMap) — eventual transparency (#lzmatmode)
Keyed-map sync — membership propagation + materialize-on-ingest + derived-aggregate transparency (#lzfamilysync)
Thread-safe context (lock-backed)
Async reactive context
Flat state machine
Harel state charts
Keyed reactive maps (ReactiveMap: SourceMap / ComputedMap) + SourceTree + reconcile
ReactiveMap Core surface — single-threaded flavor (cell-model.md § Core surface vs. binding extensions)~
ReactiveMap Core surface — thread-safe flavor (ordering + membership reactivity)
ReactiveMap Core surface — async flavor (ordering + membership reactivity)
Atomic ordered move replayed against all three flavors (cellmap_atomic_move + cellmap_independence)
Memoized semantic tree (SemTree)
Stable-id alignment (manufactured identity)
Reactive queue (QueueCell SPSC/MPSC + QueueStorage adapter) Core surface — single-threaded flavor~~
Reactive queue (QueueCell SPSC/MPSC + QueueStorage adapter) Core surface — thread-safe flavor (reader kinds + closure lifecycle)
Reactive queue (QueueCell SPSC/MPSC + QueueStorage adapter) Core surface — async flavor (reader kinds + eventual transparency)
Broadcast topic (TopicCell) Core surface — single-threaded flavor — independent cursors + durable replay + safe GC (#lztopiccell)~~
Broadcast topic (TopicCell) Core surface — thread-safe flavor (reader kinds + closure lifecycle)
Broadcast topic (TopicCell) Core surface — async flavor (reader kinds + eventual transparency)
Competing-consumer work queue (WorkQueueCell) Core surface — single-threaded flavor — exclusive leases + ack/nack + redelivery + DLQ (#lzworkqueue)~~
Competing-consumer work queue (WorkQueueCell) Core surface — thread-safe flavor (reader kinds + closure lifecycle)
Competing-consumer work queue (WorkQueueCell) Core surface — async flavor (reader kinds + eventual transparency)
Merge algebra + Source<T, M> — associative MergePolicy (KeepLatest/Sum/Max/SetUnion/RawFifo), Cell ≡ Source<KeepLatest>, read-any-cell/write-Source split (#relaycell)
RelayCell — conflating relay + BackpressurePolicy + SpillStore + Transport + Inbox/Outbox + Rate/Window/Expiry/Priority/keyed policies (#relaycell)
Free-text character CRDT (TextCrdt)
TextCrdt delta sync (version_vector / delta_since / apply_delta)
CrdtTree lossless document contract (#lzcrdttree)
Move-aware sequence CRDT (SeqCrdt)
Lossless tree CRDT core (LosslessTreeCrdt, M1)
Lossless tree — dotted-frontier anti-entropy
Lossless tree — concurrent merge convergence
Registers (LWW / MV) + PnCounter + CellCrdt
IPC wire — Snapshot + Delta + CrdtSync
Shared-memory blob path (ShmBlobArena)
Cross-process zero-copy transport (BlobBackend / shm / arrow)
Distributed CRDT plane (CrdtPlaneRuntime / anti-entropy)
Reliable sync — resync coordinator + at-least-once durable outbox + OR-set/LWW liveness (#lzsync)
Storage-independent durable outbox (OutboxStore + shared outbox protocol; SQLite/Room/IndexedDB/file adapters)
Reliable-sync transport seam + full-duplex SyncDriver loop (IpcSink/IpcSource, #sync-driver)
Distributed plane — WebRTC transport + signaling
State projection / mirror
Causal receipts (CausalReceipts outcome projection)
Message-passing + RPC command plane (command-plane-v1)
C-ABI FFI boundary
Permission boundary (PeerPermissions / RemoteOp)
Capability negotiation (SessionHandshake)
Instrumentation / benchmarks
Temporal sources — TimerCell / IntervalCell / CronCell / DeadlineCell over a logical clock (#lztime)
Rate-shaping operators — DebounceCell / ThrottleCell / SampleCell / ProbabilisticSampleCell (#lzrateshape)
Membership + failure detection — MembershipCell (SWIM + Phi-accrual) / PeerSet / PeerChangeEvent (#lzmemb)
Distributed coordination — LeaseCell / LeaderCell / LockCell / SemaphoreCell / BarrierCell+QuorumCell (#lzcoord)
Presence + ephemeral plane — PresenceCell / AwarenessCell / EphemeralCell + Ephemeral/Durable markers (#lzpresence)
Stream windowing — TumblingWindow / SlidingWindow / SessionWindow over the merge algebra (#lzwindow)
Fault tolerance — CircuitBreakerCell / RetryPolicyCell / BulkheadCell / TimeoutCell (#lzresilience)
Embedded-service plane — HealthCell / ReadinessCell / DiscoveryCell / ServiceRegistry (#lzservice)

Convergence and the wire protocol are pinned by the shared conformance fixtures and JSON Schemas in this repo and the Lean models in lazily-formal.

Notes

  • ᵃ Python reactive graph: Cell / Slot / Signal / Effect (sync) and the top-level batch(run) boundary ship; the != PartialEq memo guard applies to cells, slots, and signals. The async counterpart (AsyncEffect) queues reruns at the batch boundary for asyncio reactors.
  • ᵇ Dart reactive graph: Context / Slot / Cell / Signal ship; there is no standalone Effect type (observers subscribe on cells) and batch is scoped to the async context.
  • ᶜ Zig reactive graph: Cell / Slot / Signal / Effect and the public batch(run) boundary ship (context.zig coalesces the eager-recompute drain at the outermost batch exit).
  • ᵈ Serialized context (JS / Dart) — decision: both are meaningful as serialized, realm-local execution flavors, not as shared-graph contexts. They are scored when their own surfaces replay the portable Core fixtures, and are excluded from cross-thread shared-graph stress/model-check tests. A duplicate wrapper is not sufficient by itself: unsupported Core features remain staged, and runner-local locks/dictionaries cannot stand in for them. Either binding may remove the flavor and declare it absent; while it advertises the flavor, it must join every feature peer group it actually supports. See protocol.md § Concurrency layers are required for the conditional layer requirement and reactive-graph.md § Declared context capabilities for the serialized / shared-graph distinction.
  • ᵉ Zig async context: Zig removed language async and has no suspendable executor, so the layer is a task-queue + settle() drain surface — the synchronous graph’s pending_recompute/drainPendingRecompute generalized with revision tracking and the 4-state slot machine (async_context.zig).
  • ᶠ Zig collections: SourceMap / ComputedMap with atomic move, SourceTree (per-level membership/order reactivity, atomic child move), and the LIS-move-minimized reconcile op-set all ship (collection.zig, cell_tree.zig, reconcile.zig).
  • ᵍ Shared-memory blob path (JS / Dart): carry ShmBlobRef wire references but no host-side ShmBlobArena — the I/O-channel fallback of the shared-memory carve-out (see protocol.md § Shared-memory payload path is required).
  • ʰ Dart distributed CRDT plane: the CrdtPlane engine (HLC / stamp frontier / stability watermark) ships, but is not yet wired to live merge: crdt root cells.
  • ⁱ C-ABI FFI (JS): platform carve-out ffi = none — browser/Worker JS has no shared in-process C ABI. The full state plane (including CrdtSync) still flows over IPC / WebSocket / WebRTC (see protocol.md § C-ABI FFI is required).
  • Distributed plane — WebRTC transport + signaling (Rust / Kotlin / JS / Zig): the portable stack (signaling protocol + client, the DataChannel seam, permission- filtering sink/source, in-memory loopback, and the CRDT plane runtime) ships and is conformance-tested; the concrete native WebRTC backend is a platform adapter (str0m in Rust; the browser RTCPeerConnection in JS; a consumer-provided seam in Kotlin and Zig), matching the reference design where the heavy transport is optional behind the seam.