atomic-server
atomic-server copied to clipboard
Consider using yjs / y-crdt for document-related commits
Atomic Commits describe how resources update. I'm happy with part of it, but I'm also having some doubts:
- Merging isn't clear yet and requires an implementation (at very least in the server)
- Atomic Commits doesn't have a formal proof of eventual consistency
- No support for inserts / deletions in text, only replace an entire k/v pair.
- No support for formatting changes
- No cursor positioning
- No great front-end
Doing all these things takes a lot of time. It might be nice if we could just use something like Yjs or Gun to deal with all the state updates.
However, there are some things I still want to keep, ideally:
- It would be nice if the changes themselves are understandable. Atomic Commits are pretty simple Yjs seems pretty complicated, which means the user is forced to use a library, and the libraries take a lot of time to build.
- signatures are cool, because we get audit logs
- I want to persist the changes and allow re-applying them to build a version history
What would it mean to use yjs in atomic-server
- Add a
yjsaction toCommits, like we havesetanddelete. - yrs parses the
yjsStateVector - I'm a little concerned as to how big these changes will be. Maybe we should not persist every state/transaction.
- If we switch to NextGraph, we can skip this because it already has a text editor.
@colelawrence had some interesting ideas about this:
- We might consider a
blobdatatype. Thepropertymimetypecan then describe how these are interpreted. - We can add
operationstoCommitsthat users can define, e.g.YjsAction