Hi everyone! Author here. I'm happy to answer questions.<p>I wrote this a couple years ago. Since then I've been working on my own CRDT called Diamond Types[1], which uses a lot of these ideas to be bonkers fast. I've built several OT based collaborative editing systems, and diamond types is much faster than any of them - though rust and wasm might be the real MVPs here. I wrote a follow-up to this article last year when I got that working, talking about how some of the optimizations work. That article is here[2].<p>A fair bit has changed since I wrote that article. Yjs has started a rewrite in rust (called yrs[3]). And Automerge has apparently dramatically improved performance based on some of the ideas I talk about in this article. Oh, and diamond types has been rewritten from the ground up. Its now about 5x faster than it was last year, by completely changing the internal structure. But thats a story for another day.<p>Unfortunately I still only support collaborative <i>text</i> editing. Adding full JSON support comes soon, after I document some more of the tricks I'm doing. Its really fun work!<p>Why do I only support collaborative text editing? Because I care about performance, and text CRDT performance is hard because you have so many individual changes - generally one for each keystroke! Making text editing (and list CRDTs in general) fast opens up a lot of other design approaches for a general purpose CRDT. But we've still got to do the work itself. To make that happen, my plan is to add full JSON editing support to diamond types using shelf[4]. Shelf is a super simple CRDT which fits in 100 lines of javascript. The next piece of work is marrying them together.<p>[1] <a href="https://github.com/josephg/diamond-types/" rel="nofollow">https://github.com/josephg/diamond-types/</a><p>[2] <a href="https://josephg.com/blog/crdts-go-brrr/" rel="nofollow">https://josephg.com/blog/crdts-go-brrr/</a><p>[3] <a href="https://github.com/y-crdt/y-crdt/tree/main/yrs" rel="nofollow">https://github.com/y-crdt/y-crdt/tree/main/yrs</a><p>[4] <a href="https://github.com/dglittle/shelf" rel="nofollow">https://github.com/dglittle/shelf</a>
I don't really understand why every single article on CRDTs is about collaborative text editing. Is no one else bothering to build systems with CRDTs outside of this space?<p>Not to detract from the article, which I found interesting for a number of reasons - both in terms of the technology and future of that technology as well as the personal realization of "the thing I'm building won't be necessary one day".
I've been delving into CRDTs lately, and one thing I've been wondering is if there's an implementation that is purely SQL-based. All operations and merges would happen through database queries. This may not be suitable for real-time use, but I've noticed that most CRDT implementations expect you to have the entire data structure in memory, forcing you to be clever with the way you model your data and save to disk.
Although I'm not super familiar with CRDTs, respect for being intellectually honest and humble. Its tough separating ego from our work, especially if we spend a lot of time and energy on it.
The three.js JavaScript library can load VRML files and render them using WebGL - demo here: <a href="https://threejs.org/examples/webgl_loader_vrml.html" rel="nofollow">https://threejs.org/examples/webgl_loader_vrml.html</a>