atomic-server icon indicating copy to clipboard operation
atomic-server copied to clipboard

Consider using yjs / y-crdt for document-related commits

Open joepio opened this issue 1 year ago • 1 comments

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 yjs action to Commits, like we have set and delete.
  • yrs parses the yjs StateVector
  • 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.

joepio avatar Dec 04 '23 13:12 joepio

@colelawrence had some interesting ideas about this:

  • We might consider a blob datatype. The property mimetype can then describe how these are interpreted.
  • We can add operations to Commits that users can define, e.g. YjsAction

joepio avatar Dec 08 '23 08:12 joepio