Native CRDT benchmark

July 29, 2026 · View on GitHub

Tasksautomerge v0.10.0 (2026-06-05)loro v1.13.7 (2026-07-15)diamond-types v1.0.0 (2022-08-25)y-octo v0.1.0 (2026-07-27)yrs v0.27.3 (2026-07-13)
automerge - apply3862.98 ± 3.78 ms45.66 ± 0.06 ms9.28 ± 0.02 ms203.74 ± 0.43 ms2387.79 ± 12.86 ms
automerge - decode time206.94 ± 1.17 ms73.09 ± 0.95 us1.49 ± 0.00 ms37.51 ± 0.05 ms2.32 ± 0.01 ms
automerge - encode time1.71 ± 0.05 ms219.52 ± 3.05 us672.47 ± 7.71 us9.70 ± 0.02 ms459.53 ± 0.91 us
concurrent list inserts93.09 ± 0.45 ms164.31 ± 0.41 ms34.10 ± 0.06 ms7.88 ± 0.02 ms7.55 ± 0.03 ms
list_random_insert_1k248.13 ± 0.25 ms10.22 ± 0.10 ms2.61 ± 0.00 ms2.06 ± 0.01 ms3.16 ± 0.00 ms
parallel applying automerge edits57192.59 ± 464.50 ms10216.50 ± 120.33 ms96.83 ± 0.37 ms1157.47 ± 14.51 ms5416.23 ± 54.97 ms

The parallel workload applies the full Automerge trace to two replicas in random batches of 1–1000 local edits, synchronizes after each pair of batches, and verifies replica convergence. Earlier parallel results used an invalid length calculation and are not comparable. With the corrected workload and the complete dependency family pinned, Loro 1.8.1 measures 231.41 ms versus 10216.50 ms for 1.13.7.