On 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 the same parent."
My hunch is that the winning strategy in this space is going to be a CRDT version of a Piece Table (the data structure that VS Code uses). Big advantage is that you can separate content (text buffer) from the ordering.
I also hope there's more energy spend thinking about how to adapt these data structures to popular databases which is the biggest hurdle in adopting them. I'm personally invested; trying to create the best first party solution for Triplit.
"... 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 the same parent."
My hunch is that the winning strategy in this space is going to be a CRDT version of a Piece Table (the data structure that VS Code uses). Big advantage is that you can separate content (text buffer) from the ordering.
I also hope there's more energy spend thinking about how to adapt these data structures to popular databases which is the biggest hurdle in adopting them. I'm personally invested; trying to create the best first party solution for Triplit.
A researcher at CMU has been thinking about this and got his sequence CRDT working with Triplit among other database systems. https://mattweidner.com/2024/04/29/list-positions.html