Top all-time · #5621
Matthew Weidner
Personal blog · mattweidner.com · on HN as mweidnerprogrammingsystems
Matthew Weidner's personal blog at mattweidner.com covers programming and systems. Since 2022, 14 different Hacker News readers have linked it 20 times, most often “Collaborative Text Editing Without CRDTs or OT”. It is still writing: the last post was on 2025-05-21, and you can follow it by feed.
Too few sampled comments (7) to say how often HN recommends it.?
Why HN links it
HN readers link this blog for its writing on collaborative editing, covering server architectures for sync, CRDT alternatives, and designing collaborative data. Posts are cited as sources in discussions of local-first apps.
Summarised by Claude from a sample of 7 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Most-linked posts?
- Collaborative Text Editing Without CRDTs or OT3 people · 3 mentions · first linked 2025-05-21
- Architectures for Central Server Collaboration3 people · 3 mentions · first linked 2024-06-04
- CRDT Survey, Part 2: Semantic Techniques2 people · 2 mentions · first linked 2023-10-17
- CRDT Survey, Part 1: Introduction2 people · 2 mentions · first linked 2024-02-15
- "Position Strings" for Collaborative Lists and Text2 people · 2 mentions · first linked 2023-11-28
What Hacker News says?
Matthew Weidner's blog post has been enlightening [1]. When a centralised server is involved, CRDTs and OT are merely optimisations over server reconciliation so yes CRDTs aren't always the best approach. It is a compelling approach for text editing though. [1] https://mattweidner.com/2024/06/04/server-architectures.html
Comment linking /2024/06/04/server-architectures.html
on “Local First, Forever”Submitted Collaborative Text Editing Without CRDTs or OT as a story · 284 points
HN discussionAgreed @ not for the faint of heart. There is at least one alternative "CRDT-free" approach for the less brave among us: https://mattweidner.com/2025/05/21/text-without-crdts.html
Comment linking /2025/05/21/text-without-crdts.html
on “Why haven't local-first apps become popular?”Submitted Architectures for Central Server Collaboration as a story · 85 points
HN discussionIndeed, the simple approach of "send your operations to the server and it will apply them in the order it receives them" gives you good-enough conflict resolution in many cases. It is still tempting to turn to CRDTs to solve the next problem: how to apply server-side changes to a client when the client has its own pending local operations. But this can be solved in a fully general way using server reconciliation, wh…
Comment linking /2024/06/04/server-architectures.html
on “Sync Engines Are the Future”Submitted CRDT Survey, Part 1: Introduction as a story · 13 points
HN discussionEven in the absence of a central server, you can still avoid CRDT/OT complexity if you have a decentralized way to eventually total order operations & apply them in that order: https://mattweidner.com/2025/05/21/text-without-crdts.html#d... As others in the comments argue, this is technically a CRDT (though a fully general one); also, undoing/replaying ops is itself non-trivial to implement. However, I hope this is…
Comment linking /2025/05/21/text-without-crdts.html
on “Collaborative Text Editing Without CRDTs or OT”Submitted Fugue: A Basic List CRDT as a story · 4 points
HN discussionI believe that Automerge internally stores all operations in an eventually consistent total order, which you can use as a substitute for the server in server reconciliation (cf. https://mattweidner.com/2025/05/21/text-without-crdts.html#d... ). However, Automerge does not actually do that - instead it processes text operations using a traditional CRDT, RGA, probably because (as you point out) undoing and replaying o…
Comment linking /2025/05/21/text-without-crdts.html
on “Collaborative Text Editing Without CRDTs or OT”Submitted "Position Strings" for Collaborative Lists and Text as a story · 2 points
HN discussionCongrats on the launch! Would this fit into the "1. Serialization" strategy described here? https://mattweidner.com/2024/06/04/server-architectures.html... If so, would it run into the same issue ProseMirror-collab did as mentioned in the article? As in: A frequently updating low-latency client can lock out another high-latency client's updates.
Comment linking /2024/06/04/server-architectures.html
on “LiveStore: State management based on reactive SQLite and built-in sync engine”Submitted "Position Strings" for Collaborative Lists and Text as a story · 2 points
HN discussionIs there a good resource on designing collaborative apps with CRDTS, that is which type of CRDT and conflict resolution to pick for a given application? Something like https://mattweidner.com/2022/02/10/collaborative-data-design... but generalizes.
Comment linking /2022/02/10/collaborative-data-design.html
on “Evan Wallace CRDT Algorithms”Submitted CRDT Survey, Part 2: Semantic Techniques as a story · 2 points
HN discussionOn first read I was thinking Evan's approach sounds pretty similar to Y.js but there's a callout at the differences: "... what I implemented is similar to what Yjs does. Some high-level differences are that a) Yjs doesn't store delete sets explicitly and sends all of them all over again each time syncing starts and b) Yjs gives each insert an additional rightward pointer for resolving ordering between children with…
Comment linking /2024/04/29/list-positions.html
on “CRDT: Text Buffer”Submitted Architectures for Central Server Collaboration as a story · 1 points
HN discussionI don't think you need a pure CRDT either but I think locking and presence is a bit of an oversimplification. LWW is a good place to start, and updating the smallest piece of information possible is the right idea in general but there is a lot more nuance to handling complex applications like a spreadsheet (I'm working on one) and whiteboard apps. Things like reparenting or grouping shapes [1], or updating elements…
Comment linking /2022/02/10/collaborative-data-design.html
on “You don't need a CRDT to build a collaborative experience”Submitted Survey of Conflict-Free Replicated Data Types (CRDTs) as a story · 1 points
HN discussionHi Matt! Good to see you here. For those who don't know, Matt also wrote a blog about how to do ProseMirror sync without CRDTs or OT here: https://mattweidner.com/2025/05/21/text-without-crdts.html and I will say I mostly cosign everything here. Our solution is not 100% overlap with theirs, but if it had existed when we started we might not have gone down this road at all.
Comment linking /2025/05/21/text-without-crdts.html
on a deleted threadSubmitted CRDT Survey, Part 2: Semantic Techniques as a story · 1 points
HN discussion