Draw together. Even offline.

A shared whiteboard with a pen, sticky notes, text and images. Lose the Wi‑Fi, keep drawing, come back: everyone's copy merges into the same board, and nobody's work gets thrown away.

Your boards

Those two boards are live. Draw on either one.

Everything on the tray.

Pen with real pressure on a stylus, a highlighter that never covers your writing, arrows, an eraser, sticky notes, text, boxes and photos. Paste a screenshot straight in.

When two people change the same thing.

  1. Asha deletes a note while Rohan rewrites it.

    Deleting only removes the versions you've seen. Rohan's edit re-stamps the note with a tag Asha never saw, so it survives on both screens.

    OR-Set, observed-remove set

  2. Both drag the same note, in opposite directions.

    Every position carries a hybrid logical clock. Both devices pick the later move without asking a server, so they land in the same place.

    LWW register, last writer wins

  3. Both type at the end of the same sentence.

    Each letter remembers which letter it was typed after. Deleted letters stay behind as invisible anchors, so words stay whole instead of mixing letter by letter.

    RGA, replicated growable array

Built from the paper, not a library.

Lattice implements the data types from Conflict-free Replicated Data Types by Shapiro, Preguiça, Baquero and Zawirski (2011) from scratch, in about two thousand lines of TypeScript with no runtime dependencies. The paper proves that copies which have seen the same changes are identical. The test suite tries to prove it wrong.

It runs thousands of random editing sessions over a simulated network that delays, reorders, drops, duplicates and splits messages, then checks every copy matches. Those runs caught two real bugs before launch.

Break the network yourself

How a stroke reaches everyone.

Each browser keeps a full copy of the board. A stroke goes to other browsers over a realtime channel within milliseconds, and to a Postgres log that every browser pulls from to fill any gaps. The server stores and forwards; it never decides who wins. Asha's laptopfull copy of the boardkeeps working offline Rohan's phonefull copy of the boardkeeps working offline Realtime channel Postgres op logstores and forwards, never merges every stroke, saved anything missed, pulled ~50 ms, best effort

Grab a marker.

Make a board, send the link to a friend, and both turn off the Wi‑Fi for a minute.