CRDT benchmarks

Reproducible, statistically reported benchmarks of 5 JavaScript CRDT libraries, with an analysis of why each library performs as it does. Every number below is the median of 10 independent process runs; timing cells show the half-width of the bootstrapped 95% confidence interval of the median.

yjs 13.6.32 · ywasm 0.27.4 · loro 1.16.0 · automerge 3.4.1 · json-joy 18.30.0
Apple M2 Pro · 32 GB · Node v24.6.0 · 2026-09-10 · source & raw data on GitHub

These benchmarks indicate the absence of performance pitfalls; they do not rank libraries. Projects make different trade-offs, and a library that loses one row may win another by a wide margin.

Analysis

How to read the numbers

The benchmark models one specific usage pattern: every operation is its own transaction, and every update is sent to the peer and applied immediately. That is what a collaborative text editor does with keystrokes. It rewards libraries with cheap transactions and cheap per-update application, and it penalises libraries that assume changes will be batched. Read the results with that pattern in mind; a library that is slow here may be fast in an application that batches.

N = 6000 is small. Most B1 to B3 documents are a few kilobytes. B4 (a 105,000 character document built by 260,000 edits) and C1 (200,000 edits per peer, or 30,000 peers) are the only tests at a realistic size, and they are where the libraries separate most.

The numbers are stable: the median coefficient of variation across the ten runs is about 5% for every library. Differences smaller than the confidence intervals of both cells are not differences. Sub-millisecond cells vary by 20% or more and should be read as "very fast", not compared.

json-joy

json-joy is the fastest library in 16 of the 23 timing rows. It replays the real-world trace in 119 ms (Yjs: 2.56 s), merges 1,540 concurrent map writes in 5.8 ms (Yjs: 47 ms), and completes both C1 tests in about two seconds, where the others take between 20 s and 13 minutes.

We checked whether the harness gives it an advantage. It does not. json-joy produces one binary patch per edit (259,778 patches, 4.9 MB, for B4), a peer that applies them one at a time ends with the correct text, and every concurrent test passed the harness's peer-equality assertions. The advantage holds at each layer we could separate on the B4 trace:

B4 trace, no receiverYjsjson-joy
CRDT operations only, no update encoding874 ms91 ms
Plus encoding one update per edit1.34 s (V1) / 2.3 s (V2)108 ms
Plus a second peer applying every update2.2 s (V1) / 3.6 s (V2)186 ms

Its core is about ten times faster than Yjs's, and its patch encoding costs almost nothing (17 ms for 260,000 patches) where Yjs's costs more than the edits themselves.

What it gives up. json-joy keeps no operation log. It cannot reconstruct past versions or show history, which Loro and Automerge can. Its snapshot of a map keeps only the current value of each key, which is why its B3 map documents are a few dozen bytes. Against Yjs this is a like-for-like comparison, since Yjs has no operation log either; against Loro and Automerge, part of the gap is that trade-off.

Its measured weaknesses: inserting at the front of a text or list is slow (6,000 prepends take 481 ms against 33 ms for Ywasm and 135 ms for Yjs), its documents for arrays of numbers are three times larger than Yjs's (108 kB against 36 kB), and its update messages for random-position inserts are larger (80 kB against 33 kB in B2.2). We did not investigate the cause of the prepend cost.

What we did not check: its algorithmic behaviour on documents much larger than B4, and its implementation. It converged correctly in every test, but we did not read or profile the code.

Automerge

Automerge 3.4.1 is the slowest library in every timing row but one. Four separate causes account for it. We measured each in isolation.

Applying a remote change costs time proportional to the document, inside the WebAssembly core. We split the receiver's loadIncremental into the wasm call and the JavaScript step that rebuilds the document object afterwards. The wasm call grows linearly with the text: 286 ms per 1,500 calls on a small document, 1,727 ms per 1,500 calls once the text reaches 4,500 characters. The JavaScript step stays at 18 ms. The same 6,000 changes applied in one call take 30 ms in total. A stream of small updates therefore pays a document-sized cost on every update, which makes B1, B2, B3 and C1.2 quadratic. For large maps the JavaScript step grows as well, because it materialises the whole map after each patch.

Editing at a random position inside one change also costs time proportional to the text. A single change call containing many splices runs at 63 µs per splice on a 33,000-character text and 365 µs per splice at 260,000 characters. C1.1 performs 200,000 splices in one change per peer with no receiver involved, and takes 451 s. Yjs performs the same splices in about a microsecond each.

Every change is a commit. With one edit per change and no receiver, Automerge costs a constant 30 µs per change: transaction setup, the proxy, hashing the change, and encoding it. Yjs costs 3 to 9 µs for the same transaction. B4 makes 260,000 changes, so this alone is 8 s of its 13.5 s.

Loading rebuilds the state from history. Automerge stores the operation log and reconstructs the document on load, so the B4 document takes 652 ms to open. Loro's snapshot stores the materialised state and opens in 4.5 ms. The same choice gives Automerge the smallest text documents: 129 kB for B4 against 227 kB for Yjs.

The first two are almost certainly new in the 3.x series. The 2024 run of these benchmarks, on slower hardware, had Automerge 2.1.10 completing B1.1 in 343 ms; 3.4.1 takes 4.7 s. Automerge 3 moved to a compressed columnar in-memory representation to reduce memory use. Both costs are consistent with inserting into a compressed structure, but we did not confirm that in the source.

In practice: automerge-repo's sync protocol batches incoming changes, which removes most of the first cost. The second and third remain, and they are what a text editor doing one change per keystroke will experience.

Yjs and Ywasm

Ywasm is the Rust implementation of the Yjs algorithm, used from JavaScript through WebAssembly bindings. The two produce byte-identical documents. Their speed differs by the direction of the cost.

Inside a single transaction, Ywasm is three to four times faster than Yjs: prepending 6,000 items takes 33 ms against 135 ms, and appending 6,000 numbers takes 34 ms against 141 ms.

When every operation is its own transaction, each one crosses the JavaScript–WebAssembly boundary, and Ywasm is much slower: 16.9 s for the B4 trace against 2.56 s, and 1.17 s against 96 ms for merging concurrent inserts and deletes (B2.4). Ywasm's C1.1 is quadratic. Doubling the number of operations multiplied its time by 4.4 in our scaling test, and the full test takes 773 s. Yjs completes the same test in 24 s.

Both take about 20 s for C1.2, applying 30,000 updates from 30,000 distinct clients, and 5 to 6 s to load the resulting document. Loro takes 1.9 s and 0.35 s. We did not investigate the cause; it is the only test where the number of distinct clients is large, so it is likely related to per-client state.

Two settings inherited from the upstream benchmark affect Yjs and Ywasm. Both run with gc: false, which retains deleted content. That costs nothing in time but makes the documents larger (227 kB for B4 instead of 160 kB with garbage collection on, and 7.8 MB in B3.3 where 1,540 clients each wrote a 6 kB string to the same key). Both also encode updates in Yjs's V2 format. The V2 encoder has a fixed cost per update that dominates on single-character edits: Yjs completes B4 in 1.34 s with the default V1 format and 2.3 s with V2. Most applications use V1. We kept V2 to stay comparable with the upstream results, so the Yjs timings for per-keystroke workloads are about 40% higher than a typical application would see.

Loro

Loro loads documents faster than any other library: 4.5 ms for the B4 document, 50 ms for the 6.75 MB C1.1 document (Yjs: 1.27 s), 351 ms for the C1.2 document (Yjs: 6.45 s). Its snapshot format stores both the operation log and the materialised state, so loading does not replay history. The same format makes its documents 1.5 to 3 times larger than Yjs's.

Its timings are the most even. Apart from one pattern it is never more than about 8 times slower than the fastest library in a row, and it is the fastest on B2.2 (concurrent random inserts) and second on both C1 tests. The exception is many clients concurrently inserting text into the same container (B3.4 and B3.5): 350 ms against 41 ms for Yjs.

Its per-edit update messages are about three times the size of Yjs's (88 bytes against 27 for a single character), and exporting an update after every commit is most of its B4 time: replaying the trace takes 0.25 s with no commits, 0.48 s with a commit per edit, and 2.4 s with a commit per edit and an update exported after each. An application that commits per keystroke but exports updates less often would see the lower figure.

One observation we could not explain. When B1, B2 and B3, which create about 8,000 short-lived documents, ran before B4 in the same Node process, Loro's B4 replay took 6.7 s instead of 2.4 s, consistently. Any two of the three suites first had no effect. The campaign therefore runs each suite in a fresh process for every library, and the reported number is the clean one. Applications that create many documents in one process may want to check for this.

Bundle size

The pure-JavaScript libraries ship in 24 kB (Yjs) and 49 kB (json-joy) gzipped. The WebAssembly libraries ship in 350 kB (Ywasm), 1.08 MB (Loro) and 1.14 MB (Automerge). Almost all of the difference is the wasm binary itself.

Choosing

What this benchmark does not measure

Figures

2026-09-10T01:40:09.463765 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 100 ms 1 s 10 s 100 s json-joy Loro Yjs Automerge Ywasm Replay time 119 ms 2.43 s 2.56 s 13.5 s 16.9 s 10 ms 100 ms 1 s json-joy Loro Yjs Automerge Ywasm Load time 11 ms 4.5 ms 19 ms 652 ms 10 ms 0 B 50 kB 100 kB 150 kB 200 kB 250 kB json-joy Loro Yjs Automerge Ywasm Document size 171 kB 231 kB 227 kB 129 kB 227 kB Real-world editing trace B4: 259,778 single-character edits of a LaTeX paper, replayed one edit at a time. Median of 10 runs; whiskers are the 95% CI of the median. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:13.615754 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 100 ms 1 s 10 s 100 s json-joy Loro Yjs Automerge Ywasm Replay time 119 ms 2.43 s 2.56 s 13.5 s 16.9 s 10 ms 100 ms 1 s json-joy Loro Yjs Automerge Ywasm Load time 11 ms 4.5 ms 19 ms 652 ms 10 ms 0 B 50 kB 100 kB 150 kB 200 kB 250 kB json-joy Loro Yjs Automerge Ywasm Document size 171 kB 231 kB 227 kB 129 kB 227 kB Real-world editing trace B4: 259,778 single-character edits of a LaTeX paper, replayed one edit at a time. Median of 10 runs; whiskers are the 95% CI of the median. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
B4: 259,778 real single-character edits replayed one transaction at a time, then the finished document saved and loaded again. Replay time differs by a factor of 140 between libraries; load time by a factor of 145.
2026-09-10T01:40:09.900999 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 141 ms 9.26× 141 ms 9.27× 160 ms 10.5× 4.73 s 311× 15 ms best 0.4 ms 2.01× 0.2 ms best 0.4 ms 2.15× 10 ms 56.4× 0.2 ms 1.02× 135 ms 4.05× 33 ms best 135 ms 4.07× 4.63 s 139× 481 ms 14.5× 155 ms 2.04× 109 ms 1.43× 134 ms 1.76× 5.4 s 70.8× 76 ms best 158 ms 7.61× 262 ms 12.6× 136 ms 6.53× 30.4 s 1,462× 21 ms best 0.9 ms 2.06× 0.6 ms 1.28× 1.4 ms 3.2× 64 ms 144× 0.4 ms best 160 ms 6.7× 112 ms 4.68× 153 ms 6.42× 14.3 s 597× 24 ms best 141 ms 4.13× 38 ms 1.12× 155 ms 4.55× 4.08 s 120× 34 ms best 5.8 ms 2.23× 2.6 ms best 10 ms 3.91× 22 ms 8.34× 15 ms 5.65× 126 ms 3.33× 38 ms best 218 ms 5.76× 4.06 s 107× 514 ms 13.6× 138 ms 1.27× 108 ms best 224 ms 2.06× 4.7 s 43.4× 163 ms 1.5× 1.0 ms 2.77× 1.1 ms 2.95× 5.1 ms 13.6× 47 ms 124× 0.4 ms best 37 ms best 165 ms 4.47× 55 ms 1.49× 318 ms 8.6× 73 ms 1.98× 69 ms 2.12× 438 ms 13.5× 54 ms 1.67× 617 ms 19× 32 ms best 96 ms 1.56× 1.17 s 18.9× 108 ms 1.74× 2.02 s 32.6× 62 ms best 47 ms 8.19× 49 ms 8.47× 28 ms 4.87× 1 s 173× 5.8 ms best 51 ms 6.14× 49 ms 5.9× 28 ms 3.33× 1.86 s 225× 8.3 ms best 93 ms 24.6× 55 ms 14.6× 45 ms 11.8× 2.14 s 568× 3.8 ms best 43 ms 3.95× 45 ms 4.08× 353 ms 32.3× 2.08 s 191× 11 ms best 41 ms 2.32× 43 ms 2.41× 350 ms 19.7× 2.59 s 146× 18 ms best 2.56 s 21.5× 16.9 s 142× 2.43 s 20.4× 13.5 s 113× 119 ms best 24.3 s 13.3× 773 s 424× 2.1 s 1.15× 451 s 247× 1.83 s best 20 s 488× 18.9 s 462× 1.93 s 47.2× 447 s 10,931× 41 ms best Time to perform each task Median wall-clock time of 10 runs. Shade: multiple of the fastest library in that row (log scale, 1× to 64×). Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:14.031063 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 141 ms 9.26× 141 ms 9.27× 160 ms 10.5× 4.73 s 311× 15 ms best 0.4 ms 2.01× 0.2 ms best 0.4 ms 2.15× 10 ms 56.4× 0.2 ms 1.02× 135 ms 4.05× 33 ms best 135 ms 4.07× 4.63 s 139× 481 ms 14.5× 155 ms 2.04× 109 ms 1.43× 134 ms 1.76× 5.4 s 70.8× 76 ms best 158 ms 7.61× 262 ms 12.6× 136 ms 6.53× 30.4 s 1,462× 21 ms best 0.9 ms 2.06× 0.6 ms 1.28× 1.4 ms 3.2× 64 ms 144× 0.4 ms best 160 ms 6.7× 112 ms 4.68× 153 ms 6.42× 14.3 s 597× 24 ms best 141 ms 4.13× 38 ms 1.12× 155 ms 4.55× 4.08 s 120× 34 ms best 5.8 ms 2.23× 2.6 ms best 10 ms 3.91× 22 ms 8.34× 15 ms 5.65× 126 ms 3.33× 38 ms best 218 ms 5.76× 4.06 s 107× 514 ms 13.6× 138 ms 1.27× 108 ms best 224 ms 2.06× 4.7 s 43.4× 163 ms 1.5× 1.0 ms 2.77× 1.1 ms 2.95× 5.1 ms 13.6× 47 ms 124× 0.4 ms best 37 ms best 165 ms 4.47× 55 ms 1.49× 318 ms 8.6× 73 ms 1.98× 69 ms 2.12× 438 ms 13.5× 54 ms 1.67× 617 ms 19× 32 ms best 96 ms 1.56× 1.17 s 18.9× 108 ms 1.74× 2.02 s 32.6× 62 ms best 47 ms 8.19× 49 ms 8.47× 28 ms 4.87× 1 s 173× 5.8 ms best 51 ms 6.14× 49 ms 5.9× 28 ms 3.33× 1.86 s 225× 8.3 ms best 93 ms 24.6× 55 ms 14.6× 45 ms 11.8× 2.14 s 568× 3.8 ms best 43 ms 3.95× 45 ms 4.08× 353 ms 32.3× 2.08 s 191× 11 ms best 41 ms 2.32× 43 ms 2.41× 350 ms 19.7× 2.59 s 146× 18 ms best 2.56 s 21.5× 16.9 s 142× 2.43 s 20.4× 13.5 s 113× 119 ms best 24.3 s 13.3× 773 s 424× 2.1 s 1.15× 451 s 247× 1.83 s best 20 s 488× 18.9 s 462× 1.93 s 47.2× 447 s 10,931× 41 ms best Time to perform each task Median wall-clock time of 10 runs. Shade: multiple of the fastest library in that row (log scale, 1× to 64×). Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
Every timing metric at once. Each cell shows the median and, in the shade and small print, how many times slower it is than the fastest library in that row. B1 is one client sending each edit to another, B2 and B3 are concurrent edits merged, B4 is the real trace, C1 are the large workloads.
2026-09-10T01:40:11.896376 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0.1 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B2.1 Concurrently insert string of length N at index 0 1.0 ms 1.1 ms 5.1 ms 47 ms 0.4 ms 0 100 ms 200 ms 300 ms 400 ms Yjs Ywasm Loro Automerge json-joy B2.2 Concurrently insert N characters at random positions 37 ms 165 ms 55 ms 318 ms 73 ms 0 200 ms 400 ms 600 ms Yjs Ywasm Loro Automerge json-joy B2.3 Concurrently insert N words at random positions 69 ms 438 ms 54 ms 617 ms 32 ms 0 500 ms 1 s 1.5 s 2 s 2.5 s Yjs Ywasm Loro Automerge json-joy B2.4 Concurrently insert & delete 96 ms 1.17 s 108 ms 2.02 s 62 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.1 20√N clients concurrently set number in Map 47 ms 49 ms 28 ms 1 s 5.8 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.2 20√N clients concurrently set Object in Map 51 ms 49 ms 28 ms 1.86 s 8.3 ms 1.0 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.3 20√N clients concurrently set String in Map 93 ms 55 ms 45 ms 2.14 s 3.8 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.4 20√N clients concurrently insert text in Array 43 ms 45 ms 353 ms 2.08 s 11 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.5 20√N clients concurrently insert text 41 ms 43 ms 350 ms 2.59 s 18 ms 1 s 10 s 100 s 1000 s Yjs Ywasm Loro Automerge json-joy C1.1 Concurrently insert & delete 100K 24.3 s 773 s 2.1 s 451 s 1.83 s 100 ms 1 s 10 s 100 s 1000 s Yjs Ywasm Loro Automerge json-joy C1.2 Concurrently set Map 100K 20 s 18.9 s 1.93 s 447 s 41 ms Concurrent editing and conflicts Time to apply and merge concurrent changes. Median of 10 runs, 95% CI whiskers. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:15.988413 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0.1 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B2.1 Concurrently insert string of length N at index 0 1.0 ms 1.1 ms 5.1 ms 47 ms 0.4 ms 0 100 ms 200 ms 300 ms 400 ms Yjs Ywasm Loro Automerge json-joy B2.2 Concurrently insert N characters at random positions 37 ms 165 ms 55 ms 318 ms 73 ms 0 200 ms 400 ms 600 ms Yjs Ywasm Loro Automerge json-joy B2.3 Concurrently insert N words at random positions 69 ms 438 ms 54 ms 617 ms 32 ms 0 500 ms 1 s 1.5 s 2 s 2.5 s Yjs Ywasm Loro Automerge json-joy B2.4 Concurrently insert & delete 96 ms 1.17 s 108 ms 2.02 s 62 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.1 20√N clients concurrently set number in Map 47 ms 49 ms 28 ms 1 s 5.8 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.2 20√N clients concurrently set Object in Map 51 ms 49 ms 28 ms 1.86 s 8.3 ms 1.0 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.3 20√N clients concurrently set String in Map 93 ms 55 ms 45 ms 2.14 s 3.8 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.4 20√N clients concurrently insert text in Array 43 ms 45 ms 353 ms 2.08 s 11 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B3.5 20√N clients concurrently insert text 41 ms 43 ms 350 ms 2.59 s 18 ms 1 s 10 s 100 s 1000 s Yjs Ywasm Loro Automerge json-joy C1.1 Concurrently insert & delete 100K 24.3 s 773 s 2.1 s 451 s 1.83 s 100 ms 1 s 10 s 100 s 1000 s Yjs Ywasm Loro Automerge json-joy C1.2 Concurrently set Map 100K 20 s 18.9 s 1.93 s 447 s 41 ms Concurrent editing and conflicts Time to apply and merge concurrent changes. Median of 10 runs, 95% CI whiskers. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
B2 and B3: concurrent edits merged into one document. B3 simulates 1,540 clients each making one concurrent change.
2026-09-10T01:40:12.698022 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters 141 ms 141 ms 160 ms 4.73 s 15 ms 0.1 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B1.2 Insert string of length N 0.4 ms 0.2 ms 0.4 ms 10 ms 0.2 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.3 Prepend N characters 135 ms 33 ms 135 ms 4.63 s 481 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.4 Insert N characters at random positions 155 ms 109 ms 134 ms 5.4 s 76 ms 10 ms 100 ms 1 s 10 s 100 s Yjs Ywasm Loro Automerge json-joy B1.5 Insert N words at random positions 158 ms 262 ms 136 ms 30.4 s 21 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B1.6 Insert string, then delete it 0.9 ms 0.6 ms 1.4 ms 64 ms 0.4 ms 10 ms 100 ms 1 s 10 s 100 s Yjs Ywasm Loro Automerge json-joy B1.7 Insert/Delete strings at random positions 160 ms 112 ms 153 ms 14.3 s 24 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.8 Append N numbers 141 ms 38 ms 155 ms 4.08 s 34 ms 0 5.0 ms 10 ms 15 ms 20 ms 25 ms Yjs Ywasm Loro Automerge json-joy B1.9 Insert Array of N numbers 5.8 ms 2.6 ms 10 ms 22 ms 15 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.10 Prepend N numbers 126 ms 38 ms 218 ms 4.06 s 514 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.11 Insert N numbers at random positions 138 ms 108 ms 224 ms 4.7 s 163 ms No-conflict edits, one client to another Time for N = 6000 operations including sending each update to a second peer. Median of 10 runs, 95% CI whiskers. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:16.838195 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters 141 ms 141 ms 160 ms 4.73 s 15 ms 0.1 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B1.2 Insert string of length N 0.4 ms 0.2 ms 0.4 ms 10 ms 0.2 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.3 Prepend N characters 135 ms 33 ms 135 ms 4.63 s 481 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.4 Insert N characters at random positions 155 ms 109 ms 134 ms 5.4 s 76 ms 10 ms 100 ms 1 s 10 s 100 s Yjs Ywasm Loro Automerge json-joy B1.5 Insert N words at random positions 158 ms 262 ms 136 ms 30.4 s 21 ms 1.0 ms 10 ms 100 ms Yjs Ywasm Loro Automerge json-joy B1.6 Insert string, then delete it 0.9 ms 0.6 ms 1.4 ms 64 ms 0.4 ms 10 ms 100 ms 1 s 10 s 100 s Yjs Ywasm Loro Automerge json-joy B1.7 Insert/Delete strings at random positions 160 ms 112 ms 153 ms 14.3 s 24 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.8 Append N numbers 141 ms 38 ms 155 ms 4.08 s 34 ms 0 5.0 ms 10 ms 15 ms 20 ms 25 ms Yjs Ywasm Loro Automerge json-joy B1.9 Insert Array of N numbers 5.8 ms 2.6 ms 10 ms 22 ms 15 ms 10 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.10 Prepend N numbers 126 ms 38 ms 218 ms 4.06 s 514 ms 100 ms 1 s 10 s Yjs Ywasm Loro Automerge json-joy B1.11 Insert N numbers at random positions 138 ms 108 ms 224 ms 4.7 s 163 ms No-conflict edits, one client to another Time for N = 6000 operations including sending each update to a second peer. Median of 10 runs, 95% CI whiskers. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
B1: one client edits, the other applies each update as it arrives. The x axis is logarithmic wherever the libraries span more than a 40× range.
2026-09-10T01:40:10.391099 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 6.03 kB 1.57× 6.03 kB 1.57× 12.4 kB 3.22× 3.84 kB best 6.05 kB 1.58× 6.03 kB 1.58× 6.03 kB 1.58× 12.3 kB 3.22× 3.82 kB best 6.05 kB 1.58× 6.04 kB 1.57× 6.04 kB 1.57× 15.4 kB 4.02× 3.84 kB best 29.9 kB 7.79× 29.6 kB 1.21× 29.6 kB 1.21× 39 kB 1.6× 24.5 kB best 29.9 kB 1.22× 87.9 kB 1.01× 87.9 kB 1.01× 136 kB 1.57× 94.3 kB 1.09× 86.6 kB best 6.04 kB 114× 6.05 kB 114× 6.41 kB 121× 3.85 kB 72.6× 53 B best 41.9 kB 1.63× 41.9 kB 1.63× 81.7 kB 3.18× 58.4 kB 2.27× 25.7 kB best 35.6 kB 1.32× 35.6 kB 1.32× 71.6 kB 2.65× 27 kB best 108 kB 3.99× 35.7 kB 1.32× 35.7 kB 1.32× 71.6 kB 2.65× 27 kB best 83.1 kB 3.08× 35.7 kB 1.32× 35.7 kB 1.32× 76.8 kB 2.84× 27 kB best 108 kB 3.99× 59.1 kB 1.24× 59.1 kB 1.24× 101 kB 2.11× 47.6 kB best 108 kB 2.26× 12.2 kB 1.61× 12.2 kB 1.61× 24.7 kB 3.27× 7.57 kB best 12.2 kB 1.61× 66.5 kB 1.33× 70.2 kB 1.4× 79.8 kB 1.59× 50.2 kB best 60.4 kB 1.2× 179 kB 1.02× 181 kB 1.03× 269 kB 1.53× 181 kB 1.03× 176 kB best 281 kB 1.2× 282 kB 1.21× 391 kB 1.68× 289 kB 1.24× 234 kB best 36.8 kB 593× 46 kB 742× 78.8 kB 1,272× 86.2 kB 1,390× 62 B best 72.7 kB 826× 81.9 kB 931× 84.8 kB 964× 110 kB 1,246× 88 B best 7.81 MB 1,666× 7.82 MB 1,668× 242 kB 51.5× 125 kB 26.6× 4.69 kB best 26.6 kB best 31.2 kB 1.17× 101 kB 3.8× 96.3 kB 3.62× 37.1 kB 1.4× 24.3 kB best 28.9 kB 1.19× 103 kB 4.23× 90.7 kB 3.73× 24.9 kB 1.03× 227 kB 1.76× 227 kB 1.76× 231 kB 1.78× 129 kB best 171 kB 1.32× 4.91 MB 1.24× 4.91 MB 1.24× 6.75 MB 1.71× 5.34 MB 1.35× 3.96 MB best 739 kB 11,919× 919 kB 14,822× 1.54 MB 24,831× 1.74 MB 28,068× 62 B best Encoded document size after each task Bytes of the encoded document. Shade: multiple of the smallest in that row (log scale). Yjs and Ywasm run with gc: false and keep deleted content; json-joy's snapshot keeps no history for overwritten map values. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:14.476968 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 6.03 kB 1.57× 6.03 kB 1.57× 12.4 kB 3.22× 3.84 kB best 6.05 kB 1.58× 6.03 kB 1.58× 6.03 kB 1.58× 12.3 kB 3.22× 3.82 kB best 6.05 kB 1.58× 6.04 kB 1.57× 6.04 kB 1.57× 15.4 kB 4.02× 3.84 kB best 29.9 kB 7.79× 29.6 kB 1.21× 29.6 kB 1.21× 39 kB 1.6× 24.5 kB best 29.9 kB 1.22× 87.9 kB 1.01× 87.9 kB 1.01× 136 kB 1.57× 94.3 kB 1.09× 86.6 kB best 6.04 kB 114× 6.05 kB 114× 6.41 kB 121× 3.85 kB 72.6× 53 B best 41.9 kB 1.63× 41.9 kB 1.63× 81.7 kB 3.18× 58.4 kB 2.27× 25.7 kB best 35.6 kB 1.32× 35.6 kB 1.32× 71.6 kB 2.65× 27 kB best 108 kB 3.99× 35.7 kB 1.32× 35.7 kB 1.32× 71.6 kB 2.65× 27 kB best 83.1 kB 3.08× 35.7 kB 1.32× 35.7 kB 1.32× 76.8 kB 2.84× 27 kB best 108 kB 3.99× 59.1 kB 1.24× 59.1 kB 1.24× 101 kB 2.11× 47.6 kB best 108 kB 2.26× 12.2 kB 1.61× 12.2 kB 1.61× 24.7 kB 3.27× 7.57 kB best 12.2 kB 1.61× 66.5 kB 1.33× 70.2 kB 1.4× 79.8 kB 1.59× 50.2 kB best 60.4 kB 1.2× 179 kB 1.02× 181 kB 1.03× 269 kB 1.53× 181 kB 1.03× 176 kB best 281 kB 1.2× 282 kB 1.21× 391 kB 1.68× 289 kB 1.24× 234 kB best 36.8 kB 593× 46 kB 742× 78.8 kB 1,272× 86.2 kB 1,390× 62 B best 72.7 kB 826× 81.9 kB 931× 84.8 kB 964× 110 kB 1,246× 88 B best 7.81 MB 1,666× 7.82 MB 1,668× 242 kB 51.5× 125 kB 26.6× 4.69 kB best 26.6 kB best 31.2 kB 1.17× 101 kB 3.8× 96.3 kB 3.62× 37.1 kB 1.4× 24.3 kB best 28.9 kB 1.19× 103 kB 4.23× 90.7 kB 3.73× 24.9 kB 1.03× 227 kB 1.76× 227 kB 1.76× 231 kB 1.78× 129 kB best 171 kB 1.32× 4.91 MB 1.24× 4.91 MB 1.24× 6.75 MB 1.71× 5.34 MB 1.35× 3.96 MB best 739 kB 11,919× 919 kB 14,822× 1.54 MB 24,831× 1.74 MB 28,068× 62 B best Encoded document size after each task Bytes of the encoded document. Shade: multiple of the smallest in that row (log scale). Yjs and Ywasm run with gc: false and keep deleted content; json-joy's snapshot keeps no history for overwritten map values. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
Size of the encoded document. Yjs and Ywasm run with garbage collection disabled, as upstream, so they keep deleted content; that is why their B3.3 documents are 7.8 MB. json-joy's snapshot keeps no history for overwritten map values.
2026-09-10T01:40:10.835531 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 31 ms 2.11× 16 ms 1.1× 17 ms 1.16× 28 ms 1.95× 15 ms best 17 ms 1.14× 15 ms best 16 ms 1.05× 15 ms 1.02× 15 ms 1.01× 24 ms 1.46× 18 ms 1.06× 17 ms best 24 ms 1.42× 21 ms 1.24× 40 ms 2.58× 18 ms 1.16× 15 ms best 24 ms 1.57× 26 ms 1.69× 33 ms 2.06× 22 ms 1.39× 16 ms best 43 ms 2.69× 31 ms 1.96× 16 ms 1.16× 16 ms 1.14× 14 ms best 15 ms 1.08× 16 ms 1.12× 34 ms 2.13× 19 ms 1.18× 16 ms best 39 ms 2.39× 22 ms 1.38× 20 ms 1.1× 24 ms 1.29× 18 ms best 28 ms 1.55× 55 ms 3.01× 20 ms 1.23× 18 ms 1.14× 16 ms best 18 ms 1.15× 33 ms 2.09× 40 ms 2.11× 22 ms 1.17× 19 ms best 25 ms 1.3× 35 ms 1.82× 30 ms 1.62× 25 ms 1.33× 19 ms best 28 ms 1.49× 43 ms 2.35× 16 ms 1.09× 16 ms 1.04× 19 ms 1.24× 23 ms 1.55× 15 ms best 47 ms 3.35× 18 ms 1.31× 14 ms best 22 ms 1.56× 45 ms 3.21× 58 ms 3.9× 24 ms 1.6× 15 ms best 53 ms 3.59× 43 ms 2.88× 79 ms 4.95× 33 ms 2.06× 16 ms best 81 ms 5.05× 55 ms 3.45× 41 ms 1.72× 24 ms best 29 ms 1.24× 24 ms 1.01× 25 ms 1.04× 42 ms 2.01× 21 ms best 27 ms 1.3× 33 ms 1.6× 23 ms 1.1× 81 ms 3.64× 29 ms 1.29× 100 ms 4.52× 59 ms 2.65× 22 ms best 30 ms 1.46× 20 ms best 41 ms 2.02× 31 ms 1.53× 28 ms 1.39× 26 ms 1.5× 17 ms best 40 ms 2.31× 44 ms 2.55× 22 ms 1.3× 19 ms 4.21× 10 ms 2.31× 4.5 ms best 652 ms 145× 11 ms 2.51× 1.27 s 25.2× 633 ms 12.6× 50 ms best 1.25 s 24.8× 1.16 s 23× 6.45 s 58.4× 5.13 s 46.4× 351 ms 3.18× 1.69 s 15.3× 110 ms best Time to load the encoded document Median of 10 runs. Shade: multiple of the fastest library in that row (log scale). Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:14.955815 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ Yjs Ywasm Loro Automerge json-joy B1.1 Append N characters B1.2 Insert string of length N B1.3 Prepend N characters B1.4 Insert N characters at random positions B1.5 Insert N words at random positions B1.6 Insert string, then delete it B1.7 Insert/Delete strings at random positions B1.8 Append N numbers B1.9 Insert Array of N numbers B1.10 Prepend N numbers B1.11 Insert N numbers at random positions B2.1 Concurrently insert string of length N at index 0 B2.2 Concurrently insert N characters at random positions B2.3 Concurrently insert N words at random positions B2.4 Concurrently insert & delete B3.1 20√N clients concurrently set number in Map B3.2 20√N clients concurrently set Object in Map B3.3 20√N clients concurrently set String in Map B3.4 20√N clients concurrently insert text in Array B3.5 20√N clients concurrently insert text B4 Apply real-world editing dataset C1.1 Concurrently insert & delete 100K C1.2 Concurrently set Map 100K 31 ms 2.11× 16 ms 1.1× 17 ms 1.16× 28 ms 1.95× 15 ms best 17 ms 1.14× 15 ms best 16 ms 1.05× 15 ms 1.02× 15 ms 1.01× 24 ms 1.46× 18 ms 1.06× 17 ms best 24 ms 1.42× 21 ms 1.24× 40 ms 2.58× 18 ms 1.16× 15 ms best 24 ms 1.57× 26 ms 1.69× 33 ms 2.06× 22 ms 1.39× 16 ms best 43 ms 2.69× 31 ms 1.96× 16 ms 1.16× 16 ms 1.14× 14 ms best 15 ms 1.08× 16 ms 1.12× 34 ms 2.13× 19 ms 1.18× 16 ms best 39 ms 2.39× 22 ms 1.38× 20 ms 1.1× 24 ms 1.29× 18 ms best 28 ms 1.55× 55 ms 3.01× 20 ms 1.23× 18 ms 1.14× 16 ms best 18 ms 1.15× 33 ms 2.09× 40 ms 2.11× 22 ms 1.17× 19 ms best 25 ms 1.3× 35 ms 1.82× 30 ms 1.62× 25 ms 1.33× 19 ms best 28 ms 1.49× 43 ms 2.35× 16 ms 1.09× 16 ms 1.04× 19 ms 1.24× 23 ms 1.55× 15 ms best 47 ms 3.35× 18 ms 1.31× 14 ms best 22 ms 1.56× 45 ms 3.21× 58 ms 3.9× 24 ms 1.6× 15 ms best 53 ms 3.59× 43 ms 2.88× 79 ms 4.95× 33 ms 2.06× 16 ms best 81 ms 5.05× 55 ms 3.45× 41 ms 1.72× 24 ms best 29 ms 1.24× 24 ms 1.01× 25 ms 1.04× 42 ms 2.01× 21 ms best 27 ms 1.3× 33 ms 1.6× 23 ms 1.1× 81 ms 3.64× 29 ms 1.29× 100 ms 4.52× 59 ms 2.65× 22 ms best 30 ms 1.46× 20 ms best 41 ms 2.02× 31 ms 1.53× 28 ms 1.39× 26 ms 1.5× 17 ms best 40 ms 2.31× 44 ms 2.55× 22 ms 1.3× 19 ms 4.21× 10 ms 2.31× 4.5 ms best 652 ms 145× 11 ms 2.51× 1.27 s 25.2× 633 ms 12.6× 50 ms best 1.25 s 24.8× 1.16 s 23× 6.45 s 58.4× 5.13 s 46.4× 351 ms 3.18× 1.69 s 15.3× 110 ms best Time to load the encoded document Median of 10 runs. Shade: multiple of the fastest library in that row (log scale). Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
Time to load the encoded document and read the content back. About 15 ms of every cell is fixed cost; the differences appear on large or heavily edited documents.
2026-09-10T01:40:11.290629 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0 B 2 kB 4 kB 6 kB 8 kB 10 kB 12 kB Yjs Ywasm Loro Automerge json-joy B2.1 Concurrently insert string of length N at index 0 · updateSize 6.09 kB 6.1 kB 6.19 kB 9.51 kB 6.1 kB 0 B 20 kB 40 kB 60 kB 80 kB 100 kB Yjs Ywasm Loro Automerge json-joy B2.2 Concurrently insert N characters at random positions · updateSize 33.3 kB 35.1 kB 23.8 kB 27.5 kB 80.4 kB 0 B 25 kB 50 kB 75 kB 100 kB 125 kB 150 kB Yjs Ywasm Loro Automerge json-joy B2.3 Concurrently insert N words at random positions · updateSize 89.5 kB 90.6 kB 62.9 kB 123 kB 115 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B2.4 Concurrently insert & delete · updateSize 140 kB 141 kB 124 kB 300 kB 220 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B3.1 20√N clients concurrently set number in Map · updateSize 49.2 kB 53.8 kB 132 kB 296 kB 42.7 kB 0 B 100 kB 200 kB 300 kB 400 kB Yjs Ywasm Loro Automerge json-joy B3.2 20√N clients concurrently set Object in Map · updateSize 85.1 kB 89.7 kB 171 kB 387 kB 89.7 kB 0 B 2 MB 4 MB 6 MB 8 MB 10 MB Yjs Ywasm Loro Automerge json-joy B3.3 20√N clients concurrently set String in Map · updateSize 7.83 MB 7.83 MB 7.91 MB 8.08 MB 7.82 MB 0 B 100 kB 200 kB 300 kB 400 kB Yjs Ywasm Loro Automerge json-joy B3.4 20√N clients concurrently insert text in Array · updateSize 52.7 kB 57.4 kB 137 kB 325 kB 58.9 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B3.5 20√N clients concurrently insert text · updateSize 48.1 kB 52.7 kB 133 kB 310 kB 51.2 kB 0 B 2 MB 4 MB 6 MB 8 MB 10 MB 12 MB Yjs Ywasm Loro Automerge json-joy C1.1 Concurrently insert & delete 100K · updateSize 4.91 MB 4.91 MB 4.27 MB 10.3 MB 7.54 MB 0 B 2 MB 4 MB 6 MB Yjs Ywasm Loro Automerge json-joy C1.2 Concurrently set Map 100K · updateSize 981 kB 1.07 MB 2.6 MB 5.78 MB 838 kB Size of update messages exchanged Total bytes sent between peers during the task. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:15.411921 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0 B 2 kB 4 kB 6 kB 8 kB 10 kB 12 kB Yjs Ywasm Loro Automerge json-joy B2.1 Concurrently insert string of length N at index 0 · updateSize 6.09 kB 6.1 kB 6.19 kB 9.51 kB 6.1 kB 0 B 20 kB 40 kB 60 kB 80 kB 100 kB Yjs Ywasm Loro Automerge json-joy B2.2 Concurrently insert N characters at random positions · updateSize 33.3 kB 35.1 kB 23.8 kB 27.5 kB 80.4 kB 0 B 25 kB 50 kB 75 kB 100 kB 125 kB 150 kB Yjs Ywasm Loro Automerge json-joy B2.3 Concurrently insert N words at random positions · updateSize 89.5 kB 90.6 kB 62.9 kB 123 kB 115 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B2.4 Concurrently insert & delete · updateSize 140 kB 141 kB 124 kB 300 kB 220 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B3.1 20√N clients concurrently set number in Map · updateSize 49.2 kB 53.8 kB 132 kB 296 kB 42.7 kB 0 B 100 kB 200 kB 300 kB 400 kB Yjs Ywasm Loro Automerge json-joy B3.2 20√N clients concurrently set Object in Map · updateSize 85.1 kB 89.7 kB 171 kB 387 kB 89.7 kB 0 B 2 MB 4 MB 6 MB 8 MB 10 MB Yjs Ywasm Loro Automerge json-joy B3.3 20√N clients concurrently set String in Map · updateSize 7.83 MB 7.83 MB 7.91 MB 8.08 MB 7.82 MB 0 B 100 kB 200 kB 300 kB 400 kB Yjs Ywasm Loro Automerge json-joy B3.4 20√N clients concurrently insert text in Array · updateSize 52.7 kB 57.4 kB 137 kB 325 kB 58.9 kB 0 B 100 kB 200 kB 300 kB Yjs Ywasm Loro Automerge json-joy B3.5 20√N clients concurrently insert text · updateSize 48.1 kB 52.7 kB 133 kB 310 kB 51.2 kB 0 B 2 MB 4 MB 6 MB 8 MB 10 MB 12 MB Yjs Ywasm Loro Automerge json-joy C1.1 Concurrently insert & delete 100K · updateSize 4.91 MB 4.91 MB 4.27 MB 10.3 MB 7.54 MB 0 B 2 MB 4 MB 6 MB Yjs Ywasm Loro Automerge json-joy C1.2 Concurrently set Map 100K · updateSize 981 kB 1.07 MB 2.6 MB 5.78 MB 838 kB Size of update messages exchanged Total bytes sent between peers during the task. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
Bytes exchanged between peers during the concurrent-edit tests.
2026-09-10T01:40:09.734987 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 10 kB 100 kB 1 MB 10 MB Yjs json-joy Ywasm Loro Automerge 23.7 kB gzipped · 78.2 kB raw 49.1 kB gzipped · 172 kB raw 349 kB gzipped · 1.03 MB raw 1.08 MB gzipped · 3.32 MB raw 1.14 MB gzipped · 3.65 MB raw Bundle size Minified ESM bundle of the library entry point plus its WebAssembly, as shipped to a browser. Bar: gzipped. Ghost: raw. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:13.866367 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 10 kB 100 kB 1 MB 10 MB Yjs json-joy Ywasm Loro Automerge 23.7 kB gzipped · 78.2 kB raw 49.1 kB gzipped · 172 kB raw 349 kB gzipped · 1.03 MB raw 1.08 MB gzipped · 3.32 MB raw 1.14 MB gzipped · 3.65 MB raw Bundle size Minified ESM bundle of the library entry point plus its WebAssembly, as shipped to a browser. Bar: gzipped. Ghost: raw. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
Minified ESM bundle of each library's entry point plus its WebAssembly, measured with esbuild. Solid bar: gzipped. Ghost: raw.
2026-09-10T01:40:13.484240 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0% 5% 10% 15% 20% 25% 30% 35% 40% Yjs Ywasm Loro Automerge json-joy median 5.2% median 6.5% median 4.4% median 1.2% median 7.0% Measurement noise Coefficient of variation (sd / mean) of every timing metric across 10 runs, per library. Each dot is one benchmark. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
2026-09-10T01:40:17.625159 image/svg+xml Matplotlib v3.8.3, https://matplotlib.org/ 0% 5% 10% 15% 20% 25% 30% 35% 40% Yjs Ywasm Loro Automerge json-joy median 5.2% median 6.5% median 4.4% median 1.2% median 7.0% Measurement noise Coefficient of variation (sd / mean) of every timing metric across 10 runs, per library. Each dot is one benchmark. Yjs 13.6.32, Ywasm 0.27.4, Loro 1.16.0, Automerge 3.4.1, json-joy 18.30.0 · Node v24.6.0 · Apple M2 Pro · 2026-09-10
How noisy the measurements are: the coefficient of variation of every timing metric across the ten runs.

All results

Hover a cell for the full statistics and every individual run.

B1

N = 6000yjsywasmloroautomergejson-joy
[B1.1] Append N characters (avgUpdateSize)27 B30 B88 B125 B25 B
[B1.1] Append N characters (docSize)6.0 kB6.0 kB12.4 kB3.8 kB6.1 kB
[B1.1] Append N characters (encodeTime)0.9 ms ±5%0.7 ms ±10%2.2 ms ±6%1.7 ms ±5%0.1 ms ±15%
[B1.1] Append N characters (memUsed)≈0≈09.3 kB≈0258.5 kB
[B1.1] Append N characters (parseTime)31 ms ±7%16 ms ±4%17 ms ±4%28 ms ±2%15 ms ±2%
[B1.1] Append N characters (time)141 ms ±3%141 ms ±4%160 ms ±4%4.73 s ±1%15 ms ±3%
[B1.2] Insert string of length N (avgUpdateSize)6.0 kB6.0 kB6.1 kB6.2 kB6.0 kB
[B1.2] Insert string of length N (docSize)6.0 kB6.0 kB12.3 kB3.8 kB6.1 kB
[B1.2] Insert string of length N (encodeTime)0.1 ms ±12%0.0 ms ±19%0.1 ms ±12%0.2 ms ±17%0.0 ms ±7%
[B1.2] Insert string of length N (memUsed)≈0≈0≈0≈01.5 kB
[B1.2] Insert string of length N (parseTime)17 ms ±28%15 ms ±8%16 ms ±6%15 ms ±5%15 ms ±4%
[B1.2] Insert string of length N (time)0.4 ms ±15%0.2 ms ±13%0.4 ms ±5%10 ms ±5%0.2 ms ±13%
[B1.3] Prepend N characters (avgUpdateSize)27 B30 B87 B120 B32 B
[B1.3] Prepend N characters (docSize)6.0 kB6.0 kB15.4 kB3.8 kB29.9 kB
[B1.3] Prepend N characters (encodeTime)1.0 ms ±11%0.3 ms ±27%2.0 ms ±3%0.4 ms ±4%1.3 ms ±7%
[B1.3] Prepend N characters (memUsed)1.02 MB7.8 kB19.7 kB220.8 kB1.12 MB
[B1.3] Prepend N characters (parseTime)24 ms ±24%18 ms ±6%17 ms ±4%24 ms ±3%21 ms ±5%
[B1.3] Prepend N characters (time)135 ms ±4%33 ms ±7%135 ms ±4%4.63 s ±1%481 ms ±3%
[B1.4] Insert N characters at random positions (avgUpdateSize)29 B32 B88 B125 B25 B
[B1.4] Insert N characters at random positions (docSize)29.6 kB29.6 kB39.0 kB24.5 kB29.9 kB
[B1.4] Insert N characters at random positions (encodeTime)2.1 ms ±30%0.3 ms ±4%2.0 ms ±5%1.0 ms ±5%1.3 ms ±4%
[B1.4] Insert N characters at random positions (memUsed)1.16 MB≈0≈0≈01.07 MB
[B1.4] Insert N characters at random positions (parseTime)40 ms ±18%18 ms ±4%15 ms ±5%24 ms ±3%26 ms ±5%
[B1.4] Insert N characters at random positions (time)155 ms ±5%109 ms ±5%134 ms ±3%5.40 s ±0%76 ms ±4%
[B1.5] Insert N words at random positions (avgUpdateSize)36 B39 B95 B135 B31 B
[B1.5] Insert N words at random positions (docSize)87.9 kB87.9 kB135.7 kB94.3 kB86.6 kB
[B1.5] Insert N words at random positions (encodeTime)1.6 ms ±13%0.7 ms ±8%2.8 ms ±5%4.1 ms ±3%5.6 ms ±27%
[B1.5] Insert N words at random positions (memUsed)2.40 MB496 B976 B33.4 kB2.05 MB
[B1.5] Insert N words at random positions (parseTime)33 ms ±8%22 ms ±5%16 ms ±6%43 ms ±3%31 ms ±8%
[B1.5] Insert N words at random positions (time)158 ms ±3%262 ms ±4%136 ms ±3%30.35 s ±0%21 ms ±6%
[B1.6] Insert string, then delete it (avgUpdateSize)6.1 kB6.1 kB6.2 kB6.4 kB6.1 kB
[B1.6] Insert string, then delete it (docSize)6.0 kB6.0 kB6.4 kB3.8 kB53 B
[B1.6] Insert string, then delete it (encodeTime)0.1 ms ±30%0.0 ms ±5%0.1 ms ±8%0.2 ms ±11%0.0 ms ±15%
[B1.6] Insert string, then delete it (memUsed)≈0≈0≈0≈0≈0
[B1.6] Insert string, then delete it (parseTime)16 ms ±18%16 ms ±4%14 ms ±5%15 ms ±3%16 ms ±5%
[B1.6] Insert string, then delete it (time)0.9 ms ±39%0.6 ms ±3%1.4 ms ±5%64 ms ±2%0.4 ms ±10%
[B1.7] Insert/Delete strings at random positions (avgUpdateSize)31 B34 B100 B139 B31 B
[B1.7] Insert/Delete strings at random positions (docSize)41.9 kB41.9 kB81.7 kB58.4 kB25.7 kB
[B1.7] Insert/Delete strings at random positions (encodeTime)2.2 ms ±22%0.5 ms ±9%3.0 ms ±5%2.2 ms ±6%1.6 ms ±15%
[B1.7] Insert/Delete strings at random positions (memUsed)1.29 MB832 B144 B≈0920.8 kB
[B1.7] Insert/Delete strings at random positions (parseTime)34 ms ±24%19 ms ±5%16 ms ±8%39 ms ±2%22 ms ±9%
[B1.7] Insert/Delete strings at random positions (time)160 ms ±4%112 ms ±5%153 ms ±4%14.26 s ±1%24 ms ±7%
[B1.8] Append N numbers (avgUpdateSize)32 B35 B94 B129 B41 B
[B1.8] Append N numbers (docSize)35.6 kB35.6 kB71.6 kB27.0 kB107.7 kB
[B1.8] Append N numbers (encodeTime)0.2 ms ±150%0.2 ms ±7%1.5 ms ±7%1.1 ms ±7%3.9 ms ±8%
[B1.8] Append N numbers (memUsed)≈048.0 kB≈07.5 kB4.37 MB
[B1.8] Append N numbers (parseTime)20 ms ±17%24 ms ±6%18 ms ±6%28 ms ±3%55 ms ±3%
[B1.8] Append N numbers (time)141 ms ±4%38 ms ±9%155 ms ±5%4.08 s ±0%34 ms ±5%
[B1.9] Insert Array of N numbers (avgUpdateSize)35.7 kB35.7 kB35.7 kB31.2 kB93.8 kB
[B1.9] Insert Array of N numbers (docSize)35.7 kB35.7 kB71.6 kB27.0 kB83.1 kB
[B1.9] Insert Array of N numbers (encodeTime)0.4 ms ±23%0.1 ms ±7%1.2 ms ±6%0.9 ms ±15%2.5 ms ±5%
[B1.9] Insert Array of N numbers (memUsed)≈0≈02.7 kB61.1 kB2.38 MB
[B1.9] Insert Array of N numbers (parseTime)20 ms ±13%18 ms ±5%16 ms ±9%18 ms ±5%33 ms ±17%
[B1.9] Insert Array of N numbers (time)5.8 ms ±22%2.6 ms ±4%10 ms ±3%22 ms ±6%15 ms ±4%
[B1.10] Prepend N numbers (avgUpdateSize)32 B35 B93 B124 B47 B
[B1.10] Prepend N numbers (docSize)35.7 kB35.7 kB76.8 kB27.0 kB107.7 kB
[B1.10] Prepend N numbers (encodeTime)1.6 ms ±2%0.3 ms ±6%2.6 ms ±6%1.1 ms ±4%3.3 ms ±14%
[B1.10] Prepend N numbers (memUsed)2.30 MB464 B1.2 kB49.1 kB4.48 MB
[B1.10] Prepend N numbers (parseTime)40 ms ±6%22 ms ±8%19 ms ±6%25 ms ±4%35 ms ±5%
[B1.10] Prepend N numbers (time)126 ms ±5%38 ms ±6%218 ms ±4%4.06 s ±1%514 ms ±5%
[B1.11] Insert N numbers at random positions (avgUpdateSize)34 B37 B94 B129 B41 B
[B1.11] Insert N numbers at random positions (docSize)59.1 kB59.1 kB100.6 kB47.6 kB107.7 kB
[B1.11] Insert N numbers at random positions (encodeTime)0.9 ms ±7%0.4 ms ±15%2.6 ms ±4%1.6 ms ±7%4.8 ms ±8%
[B1.11] Insert N numbers at random positions (memUsed)2.04 MB≈0696 B19.3 kB4.43 MB
[B1.11] Insert N numbers at random positions (parseTime)30 ms ±9%25 ms ±3%19 ms ±4%28 ms ±3%43 ms ±2%
[B1.11] Insert N numbers at random positions (time)138 ms ±2%108 ms ±2%224 ms ±2%4.70 s ±1%163 ms ±8%

B2

N = 6000yjsywasmloroautomergejson-joy
[B2.1] Concurrently insert string of length N at index 0 (docSize)12.2 kB12.2 kB24.7 kB7.6 kB12.2 kB
[B2.1] Concurrently insert string of length N at index 0 (encodeTime)0.2 ms ±8%0.7 ms ±6%2.1 ms ±11%1.5 ms ±7%0.1 ms ±10%
[B2.1] Concurrently insert string of length N at index 0 (memUsed)34.7 kB≈013.2 kB14.2 kB283.9 kB
[B2.1] Concurrently insert string of length N at index 0 (parseTime)16 ms ±3%16 ms ±10%19 ms ±14%23 ms ±4%15 ms ±7%
[B2.1] Concurrently insert string of length N at index 0 (time)1.0 ms ±6%1.1 ms ±9%5.1 ms ±13%47 ms ±1%0.4 ms ±5%
[B2.1] Concurrently insert string of length N at index 0 (updateSize)6.1 kB6.1 kB6.2 kB9.5 kB6.1 kB
[B2.2] Concurrently insert N characters at random positions (docSize)66.5 kB70.2 kB79.8 kB50.2 kB60.4 kB
[B2.2] Concurrently insert N characters at random positions (encodeTime)1.2 ms ±15%0.6 ms ±5%3.6 ms ±3%1.8 ms ±5%1.9 ms ±12%
[B2.2] Concurrently insert N characters at random positions (memUsed)2.43 MB≈0≈08.0 kB3.17 MB
[B2.2] Concurrently insert N characters at random positions (parseTime)47 ms ±2%18 ms ±5%14 ms ±5%22 ms ±4%45 ms ±9%
[B2.2] Concurrently insert N characters at random positions (time)37 ms ±3%165 ms ±4%55 ms ±4%318 ms ±2%73 ms ±6%
[B2.2] Concurrently insert N characters at random positions (updateSize)33.3 kB35.1 kB23.8 kB27.5 kB80.4 kB
[B2.3] Concurrently insert N words at random positions (docSize)179.3 kB181.4 kB269.2 kB181.4 kB175.7 kB
[B2.3] Concurrently insert N words at random positions (encodeTime)2.5 ms ±3%1.3 ms ±3%5.4 ms ±7%7.6 ms ±3%3.8 ms ±6%
[B2.3] Concurrently insert N words at random positions (memUsed)5.41 MB≈027.3 kB71.9 kB4.05 MB
[B2.3] Concurrently insert N words at random positions (parseTime)58 ms ±2%24 ms ±3%15 ms ±5%53 ms ±4%43 ms ±4%
[B2.3] Concurrently insert N words at random positions (time)69 ms ±4%438 ms ±3%54 ms ±8%617 ms ±3%32 ms ±8%
[B2.3] Concurrently insert N words at random positions (updateSize)89.5 kB90.6 kB62.9 kB122.9 kB114.5 kB
[B2.4] Concurrently insert & delete (docSize)281.0 kB282.0 kB391.5 kB289.1 kB233.7 kB
[B2.4] Concurrently insert & delete (encodeTime)4.6 ms ±7%2.1 ms ±5%9.4 ms ±5%13 ms ±6%4.3 ms ±14%
[B2.4] Concurrently insert & delete (memUsed)8.24 MB624 B416 B78.3 kB5.97 MB
[B2.4] Concurrently insert & delete (parseTime)79 ms ±5%33 ms ±4%16 ms ±4%81 ms ±3%55 ms ±5%
[B2.4] Concurrently insert & delete (time)96 ms ±3%1.17 s ±3%108 ms ±7%2.02 s ±1%62 ms ±5%
[B2.4] Concurrently insert & delete (updateSize)140.4 kB140.9 kB124.1 kB300.4 kB219.9 kB

B3

N = 6000yjsywasmloroautomergejson-joy
[B3.1] 20√N clients concurrently set number in Map (docSize)36.8 kB46.0 kB78.8 kB86.2 kB62 B
[B3.1] 20√N clients concurrently set number in Map (encodeTime)1.8 ms ±6%1.3 ms ±10%13 ms ±4%2.4 ms ±7%0.1 ms ±10%
[B3.1] 20√N clients concurrently set number in Map (memUsed)766.9 kB≈010.5 kB9.3 kB≈0
[B3.1] 20√N clients concurrently set number in Map (parseTime)41 ms ±3%24 ms ±6%29 ms ±3%24 ms ±3%25 ms ±9%
[B3.1] 20√N clients concurrently set number in Map (time)47 ms ±4%49 ms ±4%28 ms ±3%1.00 s ±1%5.8 ms ±5%
[B3.1] 20√N clients concurrently set number in Map (updateSize)49.2 kB53.8 kB132.4 kB295.6 kB42.7 kB
[B3.2] 20√N clients concurrently set Object in Map (docSize)72.7 kB81.9 kB84.8 kB109.7 kB88 B
[B3.2] 20√N clients concurrently set Object in Map (encodeTime)2.7 ms ±4%0.7 ms ±12%11 ms ±3%3.4 ms ±4%0.1 ms ±23%
[B3.2] 20√N clients concurrently set Object in Map (memUsed)1.04 MB≈0≈0≈0≈0
[B3.2] 20√N clients concurrently set Object in Map (parseTime)42 ms ±4%21 ms ±5%27 ms ±5%33 ms ±2%23 ms ±5%
[B3.2] 20√N clients concurrently set Object in Map (time)51 ms ±3%49 ms ±5%28 ms ±3%1.86 s ±0%8.3 ms ±7%
[B3.2] 20√N clients concurrently set Object in Map (updateSize)85.1 kB89.7 kB171.4 kB387.4 kB89.7 kB
[B3.3] 20√N clients concurrently set String in Map (docSize)7.81 MB7.82 MB241.6 kB124.5 kB4.7 kB
[B3.3] 20√N clients concurrently set String in Map (encodeTime)34 ms ±6%2.6 ms ±8%34 ms ±4%43 ms ±3%0.1 ms ±9%
[B3.3] 20√N clients concurrently set String in Map (memUsed)8.79 MB≈0≈06.8 kB6.4 kB
[B3.3] 20√N clients concurrently set String in Map (parseTime)81 ms ±3%29 ms ±22%100 ms ±5%59 ms ±3%22 ms ±7%
[B3.3] 20√N clients concurrently set String in Map (time)93 ms ±3%55 ms ±12%45 ms ±4%2.14 s ±1%3.8 ms ±8%
[B3.3] 20√N clients concurrently set String in Map (updateSize)7.83 MB7.83 MB7.91 MB8.08 MB7.82 MB
[B3.4] 20√N clients concurrently insert text in Array (docSize)26.6 kB31.2 kB101.0 kB96.3 kB37.1 kB
[B3.4] 20√N clients concurrently insert text in Array (encodeTime)1.8 ms ±7%0.2 ms ±27%9.3 ms ±6%2.1 ms ±5%2.0 ms ±7%
[B3.4] 20√N clients concurrently insert text in Array (memUsed)900.9 kB≈01.9 kB45.0 kB1.33 MB
[B3.4] 20√N clients concurrently insert text in Array (parseTime)30 ms ±2%20 ms ±7%41 ms ±9%31 ms ±2%28 ms ±7%
[B3.4] 20√N clients concurrently insert text in Array (time)43 ms ±4%45 ms ±7%353 ms ±1%2.08 s ±1%11 ms ±12%
[B3.4] 20√N clients concurrently insert text in Array (updateSize)52.7 kB57.4 kB137.5 kB324.7 kB58.9 kB
[B3.5] 20√N clients concurrently insert text (docSize)24.3 kB28.9 kB102.9 kB90.7 kB24.9 kB
[B3.5] 20√N clients concurrently insert text (encodeTime)1.4 ms ±11%0.3 ms ±9%8.6 ms ±6%2.3 ms ±6%1.0 ms ±16%
[B3.5] 20√N clients concurrently insert text (memUsed)546.9 kB488 B2.2 kB7.1 kB421.7 kB
[B3.5] 20√N clients concurrently insert text (parseTime)26 ms ±4%17 ms ±2%40 ms ±11%44 ms ±6%22 ms ±10%
[B3.5] 20√N clients concurrently insert text (time)41 ms ±4%43 ms ±4%350 ms ±2%2.59 s ±1%18 ms ±22%
[B3.5] 20√N clients concurrently insert text (updateSize)48.1 kB52.7 kB132.9 kB310.3 kB51.2 kB

B4

N = 6000yjsywasmloroautomergejson-joy
[B4] Apply real-world editing dataset (docSize)227.0 kB227.0 kB230.6 kB129.2 kB171.2 kB
[B4] Apply real-world editing dataset (encodeTime)4.9 ms ±5%2.5 ms ±4%10 ms ±4%18 ms ±3%2.1 ms ±3%
[B4] Apply real-world editing dataset (memUsed)2.96 MB≈023.0 kB≈03.42 MB
[B4] Apply real-world editing dataset (parseTime)19 ms ±8%10 ms ±4%4.5 ms ±5%652 ms ±2%11 ms ±4%
[B4] Apply real-world editing dataset (time)2.56 s ±1%16.87 s ±1%2.43 s ±1%13.48 s ±0%119 ms ±1%

C1

N = 6000yjsywasmloroautomergejson-joy
[C1.1] Concurrently insert & delete 100K (docSize)4.91 MB4.91 MB6.75 MB5.34 MB3.96 MB
[C1.1] Concurrently insert & delete 100K (encodeTime)124 ms ±5%45 ms ±7%141 ms ±5%223 ms ±5%124 ms ±6%
[C1.1] Concurrently insert & delete 100K (memUsed)137.91 MB≈023.7 kB1.31 MB99.22 MB
[C1.1] Concurrently insert & delete 100K (parseTime)1.27 s ±6%633 ms ±4%50 ms ±3%1.25 s ±3%1.16 s ±2%
[C1.1] Concurrently insert & delete 100K (time)24.31 s ±6%773.38 s ±9%2.10 s ±1%451.34 s ±1%1.83 s ±3%
[C1.1] Concurrently insert & delete 100K (updateSize)4.91 MB4.91 MB4.27 MB10.33 MB7.54 MB
[C1.1] Concurrently insert & delete 100K (versionSize)222.6 kB222.6 kB28 B64 B88 B
[C1.2] Concurrently set Map 100K (docSize)739.0 kB918.9 kB1.54 MB1.74 MB62 B
[C1.2] Concurrently set Map 100K (encodeTime)59 ms ±5%23 ms ±4%185 ms ±3%37 ms ±23%0.1 ms ±10%
[C1.2] Concurrently set Map 100K (memUsed)19.03 MB≈0≈0≈0≈0
[C1.2] Concurrently set Map 100K (parseTime)6.45 s ±2%5.13 s ±2%351 ms ±4%1.69 s ±2%110 ms ±8%
[C1.2] Concurrently set Map 100K (time)19.96 s ±1%18.91 s ±3%1.93 s ±1%447.11 s ±1%41 ms ±4%
[C1.2] Concurrently set Map 100K (updateSize)980.8 kB1.07 MB2.60 MB5.78 MB837.8 kB
[C1.2] Concurrently set Map 100K (versionSize)416.2 kB596.2 kB314.9 kB1.95 MB776.3 kB