concile
Get Started

Performance

How fast concile is, measured under matched conditions with every caveat stated plainly.

We believe in measuring performance, not just making bold claims. Every number you see on this page comes from a fully reproducible benchmark that you can run yourself (using bun run bench:*). We also clearly state the exact conditions under which each measurement was taken.

The short version: Concile is a fresh TypeScript engine that competes in the exact same league as the Rust reference implementation it was modeled after (Convex). It delivers extremely fast reactive pushes and has honest, well-understood performance limits whether you run it on a single node or across a cluster.

How to read these numbers

Benchmarks are notoriously easy to get wrong. Usually, it happens by accident when you compare two systems under slightly different conditions. The classic trap is running your own system natively while running your competitor inside a Docker container (which adds noticeable overhead on a Mac). You might look dramatically faster, but you're really just measuring the container penalty, not the software.

Ballparks, not guarantees

An early concile-vs-Convex run fell into exactly that trap and showed a 60x win. The win evaporated the moment both systems were put in identical containers. So, on this page: comparisons are same-substrate (both systems in identical containers) or they're not reported. Numbers come from a single machine; Docker Desktop on macOS taxes absolute latency, loopback has no WAN jitter, and several cells are co-located rather than genuinely distributed. The shapes (single-writer flatness, sub-linear scale-out, log-scaling fan-out) hold on other hardware. The absolute milliseconds will differ, so run the benchmarks on your own substrate before relying on any figure.

The honest headline is almost never "we beat X." It's "we're in the same ballpark, here's the cost of each feature, and here's the next ceiling." Reproduce it yourself shows how to run each axis.

The numbers, by benchmark family

The core product is push: when a mutation commits, every client subscribed to affected data gets the new result over its live connection. End to end, from a write committing to a watcher receiving the push, over a real network, that takes about 4 ms. Effectively instant.

In a fair, same-container comparison against Convex (50 subscribers, matched app):

metricconcileConvex
propagation p508.6 ms13.4 ms
propagation p9913.7 ms27.3 ms

The headline here isn't "faster than Convex." It's that a clean-room TypeScript engine landed in the same range as a polished commercial system written in Rust, which validates the architecture. Convex is more feature-complete and does more per operation, so "faster in one test on one laptop" doesn't mean "better."

Fan-out stays cheap at scale. A write only notifies the subscriptions whose data it actually touched. The matcher that finds them is index-backed (an augmented interval tree), so it stays sub-millisecond even at 10,000 live subscriptions. An earlier linear-scan version took about 6.72 ms p50 at 10,000 subscriptions on a selective write; the interval-indexed matcher brought that down to about 0.24 ms.

The honest limits

  • One writer per shard. Single-shard write throughput is a fixed rate; concurrency queues rather than parallelizes. This is a correctness guarantee, not a bug.
  • Scale-out is currently sublinear (about 2.6 to 2.85x at 8 in-process shards, about 1.75x at 3 fleet nodes) because shards share one Postgres. True linear scaling needs per-shard storage, which isn't built yet.

Reproduce it yourself

The benchmark harness lives in benchmarks/ and runs from the repo:

bun run bench:reactive       # reactive push latency + fan-out
bun run bench:writes         # write throughput + overhead + group commit
bun run bench:sharded        # single-node sharding scale-out (Postgres)
bun run bench:connections    # concurrent-connection scale
bun run bench:dockerfleet    # cgroup-budgeted Docker capacity
bun run bench:compare        # percentage-delta comparison vs a saved baseline

The same-substrate Convex comparison harness is under benchmarks/convex-comparison/. The full write-ups, including the methodology lessons behind every caveat above, are in benchmarks/docs/ (the reactive fan-out, the Convex comparison, multi-node throughput, the connection-scale and Docker-capacity findings each have their own report).

On this page