I wonder how performance would change if using SQLite instead. You would get those range trees and indexes for free (hence much simpler implementation). Plus persistent storage, some guarantees, etc.

Which parts of SQLite have range trees? How would you see a CRDT implemented using SQLite? I've been thinking a lot about fitting SQLite into the world of CRDT, but haven't come up with a good-enough generalized approach.

https://github.com/vlcn-io/cr-sqlite/

> Tables are modeled as GSets...

> Rows are currently modeled as LWW maps. I.e., each column in a row is a LWW Register.

Multi value registers are also planned - though I'm not sure how that'll be implemented.

(One also has the opportunity to see failing writes to the LWW register, so for my app I can (in theory) potentially surface those somewhere to the user as a resolvable conflict.)