Measured on real Cloudflare — native Durable Objects + R2 + edge

Performance & scalability

An honest, end-to-end measurement of the Hypha-Mesh platform as deployed: the real shipped client over WebSockets and the artifact HTTP plane, against a dedicated Cloudflare deployment with real Durable Objects and R2 — so every latency folds in the true edge-to-DO round-trip and the real durable-commit cost. No mocks; bad numbers reported too. Each number below is paired with what it means for what you can build.

What the platform delivers

Real Cloudflare deployment (§2.2 of the report) — p50 unless noted, from one host over one ISP uplink to a Cloudflare-assigned DO region. Each card: the measured number, and what it lets you build.

12.5msRPC round-trip · p50≈980 routed calls/s under concurrencyReal-time, interactive calls — agents and UIs feel instant, not request-response slow.
605/sLog appends per DOsustained, one Log DO, concurrentHigh-throughput chat & event streams — with gap-free replay-on-reconnect, so a client that drops loses no message.
≥200Concurrent WS per DO0 failures — ceiling not reachedMany clients on a single object — one room, doc, or device fleet per Durable Object.
386/sAtomic counter commits16 writers, one key · 0% conflicts · final exactCheap counters & ledgers that stay exact under contention — cost scales with useful work, not retries.
43msPresence propagation · p50register → 3 subscribersLive, authoritative presence — "who's online" updates in ≈one round-trip, no polling.
~0Standing cost at restidle objects hibernateCheap to operate — you pay for active work, not for objects sitting idle.
~35msDurable write · p50Log append 36 ms · Doc CAS 35 msPersist authoritative state in one round-trip — durable storage co-located with the object.
~730msCold DO first touchone-time wake tax; warm hop ~71 msFirst hit on a sleeping object pays a one-time wake; every call after is warm — mask it with a "waking…" affordance.
Horizontal scaleDO-per-object · no global busCapacity ≈ per-object × objects — adding tenants adds shards, scaling ~linearly with no shared bottleneck.

How it was measured

A repeatable, bounded, self-cleaning harness — production-representative, zero risk to live users.

Real client, real path

The harness drives the shipped client-ts over WebSockets (JSON mode) plus the artifact HTTP plane. Every number is an end-to-end client → edge → DO (→ R2) round-trip — no mocks.

Isolated, torn down

A dedicated hypha-mesh-bench worker with its own DOs, R2 bucket and throwaway JWT secret — same code, classes and migrations as prod. Each run uses a disposable workspace + short-TTL token, then deletes every artifact and revokes the token. Real workspaces are never touched.

RTT vs server work

A local workerd floor (loopback, no network) runs alongside, so each latency decomposes into network round-trip + server work. Percentiles by nearest-rank; failures excluded from the distribution but counted.

Latency & throughput

Real Cloudflare (§2.2). All latencies in milliseconds.

RPC round-trip — a call routed into a peer client (no durable write)

scenarionp50p95p99throughput
call noop (serial)30012.521.138.573 calls/s
call echo-1KB (serial)30012.920.532.271 calls/s
call noop (concurrent, 32 in-flight)200031.946.363.1980 calls/s

What it means: a routed call is ≈ one network round-trip, so interactive agent/UI calls feel instant; one consumer socket sustains ~980 calls/s and more sockets add more.

Log — one Log DO; append = a durable SQLite commit

scenarionp50p95p99throughput
append (serial)30036.141.152.727 appends/s
append (concurrent, 32)200037.884.4311605 appends/s
read pagination (100/page, 1000)10 pages91.2235235809 entries/s
subscribe replay (recent 200)20026.3 ms total7,593 entries/s
live-tail delivery (append→deliver)10036.244.459.9

What it means: ~605 durable appends/s per log carries a busy chat or event stream; subscribe-replay re-sends a recent window in 26 ms so a reconnecting client catches up gap-free — durable, disconnect-survivable streams.

Doc — one Doc DO; durable conditional + atomic writes

scenariocommitsp50p95throughputintegrity
CAS serial (uncontended conditional write)30034.940.128 commits/s
atomic incr (16 conns racing on one counter)80037.3386 commits/s0% conflicts · final exact (800)

What it means: the single-writer DO never loses an update; a server-side atomic incr commits a counter/ledger in one round-trip with no retry storm — so cheap, exact counters and balances whose cost scales with useful commits, not with contention.

Connections, presence & cold start

metricp50p95p99 / maxnote
WS connect (warm DO, n=100)71.2102124peak 200 concurrent, 0 failures
Presence propagate → 3 subs (n=100)42.761.275.9≈ one round-trip — no server-side fan-out cost at this scale
Cold Log DO (first-ever dial)730918918instantiation + schema init + handshake
Cold workspace DO (fresh ws)747836836cold delta ≈ +660 ms over a warm connect

What it means: ≥200 clients hold one object with zero failures, and presence propagates in ≈one round-trip — many live clients per object. The only tax is a ~660 ms one-time wake on a sleeping object; warm hops are ~71 ms.

Artifacts — bulk bytes to R2

pathresultnote
direct-to-R2 multipart (64 MB, 8×8 MB)completes · ✓ byte-verified≈13.4 MB/s aggregate · 0 errors · 0 dangling MPUs
binding plane (8 MB, through the Worker)≈9.7 MB/s from one hostclient-uplink-bound; fine for small/medium blobs

What it means: large files upload direct edge↔R2 (bytes never touch billable DO time) and round-trip byte-for-byte; small/medium blobs stream simply through the Worker.

Scalability analysis

What the numbers say about the architecture (§3).

DO-per-object sharding → linear scale

Each workspace, Log and Doc is its own single-threaded DO — nothing is shared (no global bus, no shared SQL). The numbers are per-shard; capacity ≈ per-shard × objects, scaling ~linearly. Adding tenants adds shards. The one risk is a single hot object.

Hot SQLite, cold R2

Control + small ordered data live in co-located hot DO-SQLite (a durable commit is ~23 ms beyond the bare round-trip). Bulk bytes go to R2 — through the Worker for small blobs, or direct-to-R2 multipart to keep bytes off billable DO time.

Atomic ops stay exact under contention

The single-writer DO never loses an update, and a server-side atomic incr commits a hot counter in one round-trip — 0% conflicts. Contention becomes cost that scales with useful commits, never a latency cliff or a lost write.

No global bus

Presence and subscribe-streams are served from the owning DO's SQLite + connection set and pushed to subscribers — no Redis, no fan-out tier. The whole class of shared-bus incidents is gone by construction.

What each number is made of — RTT vs server work (§3.0)

operationlocal floor (server-only)real CF⇒ the gap is…
RPC call (route, no durable write)0.27 ms12.5 ms≈ one client↔edge↔DO round-trip
Log append / Doc write (durable write)0.24 / 0.26 ms36 / 35 ms~12 ms RTT + ~23 ms durable-commit
WS connect (warm DO)1.4 ms71 msTCP+TLS+WS upgrade + auth on the wire
cold DO first touch2.5 ms730 ms~660 ms cold DO instantiation

Cost — cheap to operate, ~zero at rest

Cloudflare bills DOs on requests + active duration, and R2 on class-A/B ops + storage (§5).

Requests scale with useful work

Each call/append/commit ≈ one DO request; concurrency doesn't reduce the count. Atomic ops keep a contended counter at one request per commit (no retry storm), so the bill tracks useful work, not contention.

Duration, and the byte path

Streaming and through-Worker artifact bytes accrue billable wall-time; the direct-to-R2 path keeps bytes off the DO. Idle DOs hibernate to ~0 — cold wake costs ~660 ms once, not standing cost.

~0 at rest

Cold workspaces/logs/docs left behind hibernate to ~zero — per-object sharding is also per-object cost isolation, with no shared always-on infrastructure to pay for.

Numbers from docs/benchmark-report.md (§2.2 headline figures) — captured from one host over one ISP uplink; a multi-region client matrix is future work. The full methodology, raw per-op samples and limitations are in the complete report.

Read the full report