March 3, 2026
Two canvases, one internet fight
An Interactive Intro to CRDTs
Cute collab demo sparks “no server!” dreamers vs “just use a server” realists
TLDR: A playful tutorial shows how to build a pixel‑art app that syncs across devices without a central server. Commenters split: fans praise the teaching, skeptics say “just use a server” for real apps, and purists want deeper examples beyond quick fixes—spotlighting a bigger fight over how to build collaborative tools.
A breezy, hands-on guide to CRDTs—think: a way for copies of data on different computers to eventually agree without constant check-ins—drops a charming pixel‑art collab demo, and the internet immediately split into two camps. Team Heart Eyes swooned over the teaching style (“well written!”), while Team Side‑Eye muttered, “Cool toy, but please ship real products.”
The post promises an easy path from basics to building a two‑canvas drawing app that syncs even when “offline,” then reconciles later. That had fans cheering the no‑server freedom. But the loudest chorus was the pragmatists: one veteran warned that permissions, locks, and real‑world rules make these “no server needed” dreams messy. Another commenter waved the “just elect a leader and move on” flag, arguing you can pick a main computer and sidestep the drama entirely.
Meanwhile, CRDT purists grumbled the demo leans on “last write wins” (the simplest tie‑breaker) instead of showing the real magic—non‑destructive merges like counters that combine everyone’s changes without overwriting them. A longtime thread‑watcher even dropped a previous 2023 debate like, “We’ve been here before.”
Jokes flew about “reinventing Google Docs” and “two canvases, one fight.” The vibe: fun tutorial, spicy reality check—with idealists, realists, and purists all drawing their lines in the sand (and the pixels).
Key Points
- •The article introduces CRDTs and outlines a series to build them in TypeScript, culminating in a collaborative pixel art editor.
- •CRDTs enable local updates on multiple peers with eventual convergence, suitable for collaborative apps without central servers.
- •It distinguishes state-based CRDTs (merge full state) from operation-based CRDTs (send operations), noting communication constraints for the latter.
- •The CRDT interface comprises a value (T), a state (S), and a merge(state: S) function used to synchronize peers.
- •Merge must satisfy properties guaranteeing convergence; the article details commutativity and associativity and previews practical features like offline and latency simulation.