Understanding implications of Y.js vs. core collab


I’m at the start of a new project and deciding whether to go with the Y.js support for collaborative editing, vs the core implementation.

The collaborative features in my app won’t be real-time but more “git like”. Users make changes which other users can interactively apply or revert. So e.g. they might get applied in a different order than they were created. It seems that the built in support for transactions and steps, and even rebasing, are perfect for this kind of feature.

However folks seem to be excited about y-prosemirror and tiptap, so I’m wondering what I might be missing. Is this kind of programatic access to individual change-sets possible with y-prosemirror? I get the impression it’s all more “magical”.

Sorry if I’m posting this in the wrong place - these questions sort of straddle the prosemirror / Y.js boundary.



Neither the built-in collab nor yjs are great for a branching/merging workflow—both will silently resolve conflicts, which is great for real-time interaction, but error-prone when merging changes made separately.

I can’t say a lot about the practical aspects of yjs, since I haven’t really worked with it, but the built-in Step format should indeed provide enough introspection to allow alternative (possibly interactive) merge strategies. prosemirror-changeset might be helpful when working with groups of steps and displaying them to the user.