Asynchronous collaboration


I’m investigating the best architecture to handle asynchronous collaboration with ProseMirror. A lot has been said and done on real-time collaboration, but I’d like a tool with a workflow more similar to git where you can work on separate branches and upstream your changes.

So far I took some inspiration from the Track Changes example and used prosemirror-changeset to calculate diff between versions but I would be very interested in advice and gotchas if you had some experience with this use case (especially about persistence, I’ve been storing Steps so far but I’m not sure how scalable it is).

Thank you very much!

Storing steps sounds like a good idea. I haven’t worked with an implementation of a collaboration tool in this style yet, so I don’t have much practical experience there, but indeed, showing the differences via prosemirror-changeset and using that to create an interface for merging when necessary seems like a reasonable direction.

ok thanks, good to know I’m not being delusional about this!

One more time, it’s pretty amazing to see how flexible PM is and how it can adapt to so many use cases, huge thanks for that!

I would recommend looking at the yjs project which has a library for prosemirror: it can handle both offline editing and online collaborative with CRDTs.

Yes y-prosemirror looks very promising, but I’d need plugin support though, I’ll check what are the plans regarding this and I’ll take a deeper look at the offline experience too.

1 Like

If you dont mind, could you report your findings?

Sorry for not coming back to you earlier, I checked how y-prosemirror merges offline edits and I’m not really convinced, that’s the difficulty of CRDTs with text editor, it’s not that easy to make it both conflict free and logical, there’s been a few posts about that here and there that I found on this forum, I can try to find it back if you’re interested. The whole point of my tool is to handle collaboration (and merges) explicitly so I don’t think I’ll go on with y, especially since prosemirror built-in rebase features work quite well.

@tsnobip, Thanks and no problem at all for the delay. I’ve done some quick tests using y-js and also have read as much as I can find about opinions on the ramifications of it’s architecture, including marijns. Just wanted to hear yours. Thanks, again!