Those are really only issues with state-based CRDTs. The fundamental concepts behind operation-based CRDTs vs operational transforms vs bespoke hybrid approaches aren't really different. It's all about determining an unambiguous order, then getting everyone to update their state as if it had been applied in that order. Much less democratic but much more practical.
https://www.figma.com/blog/how-figmas-multiplayer-technology...
It’s a client-server architecture with a bit of CRDT inspired algorithm sprinkle on for offline mode. The name of the game remains consensus and CRDTs convoluted approach is there to server a niche in the spectrum of distributed consensus. It is slower, more complex, and less transparent. I wouldn’t really use it outside of long lived and erratic P2P nodes — CRDTs solve that problem and that is what they are really designed for: partition prone, long lived, distributed, peer to peer, collaborative global state changes.
I believe Figma, Notion, Google Docs, etc all use some form of OTs which aren't necessarily a perfect CRDT
https://github.com/actualbudget/actual
The original author has both written about and given presentations about CRDTs.
Also see: https://github.com/yjs/yjs
[1] https://digest.browsertech.com/archive/browsertech-digest-ho...
https://pijul.org/manual/theory.html?highlight=CRDT#conflict...
> When two different authors add lines at the same position in a file, and it is impossible to tell which comes first in the file.
> When one author adds a line in a block of text or code, while another author deletes that block.
I don't think this is true. Two different authors can modify the same line in different ways, which is a conflict that's different than either of these categories.
> It is important to note that conflicts in Pijul always happen between changes, for example we might say that “change A conflicts with change B”.
I also don't think this is true. Conflicts can occur in a history (lineage, sequence, etc.) of concurrent changes, which are different than the delta between any two independent changes.
- Edits can be made on any node at any time independently and without coordinating with other nodes.
- All nodes eventually converge to the same state.