The left editor runs ymoon, a MoonBit port of Yjs compiled to JavaScript. The right editor runs the official yjs@13.6.33 from npm, bundled unmodified into this page. Every keystroke becomes a binary update that crosses to the other peer. Both peers also replay every update locally, so the bench can check that MoonBit and JavaScript encode the same edit to the same bytes.
Pick an update from the wire to see every byte labelled by the ymoon decoder, next to the bytes yjs produces for the same edit.
An update lists new structs per client (an info byte with the content kind, origins as client:clock IDs, the parent type, the content) followed by a delete set of clock ranges. Hover a field to find its bytes.
Each local edit is replayed on a shadow document of the other implementation that has the same client id and the same history. ymoon and yjs then encode the edit, and the bench compares the two byte strings.
Untick connected on one peer, type on both sides, then reconnect. The peers exchange state vectors and send each other only the missing structs, then converge.