Hacker News new | ask | show | jobs
by mlajtos 1367 days ago
Really nice article. I think the undo/redo for rich text is a tad bit more complicated than undo/redo for objects with properties.

For starters, in your demo when user A has selected some word and user B writes a letter in it, user A lost the selection. And this isn't even undo/redo yet, just normal collaborative thing.

That "some extra plumbing" you mention is quite big. Please don't get me wrong here – I would love to see you pull it off – Liveblocks.io seems like a good platform from what I read & heard, but you underestimate how hard that problem might be.

2 comments

Notion’s selection and undo/redo with multiplayer are pretty potato. Notion stores selection as grapheme indexes in a text property, so while it won’t lose selection if someone adds/removed characters from a text, your selection won’t make as much sense as one in Google Docs. Likewise with undo/redo or regular typing into the same field - it’s all last-write-wins updates.

On the other hand, Notion’s editor does a much better job with CJK input, Android, etc compared to Slate. Slate has a beautiful API design but its implementation suffers outside of ideal conditions.

Source: I built this: https://twitter.com/jitl/status/1483918085384028163?s=46&t=S...

Awesome to hear from the Notion team who really gets this deeply.

Slate definitely has its own limitations, especially when used on non desktop devices. Seems like ProseMirror would be a good open source alternative to Slate, what do you think?

ProseMirror did the best the last time I tested these libraries. TipTap (a competitor of yours?) provides an API layer on top, which I haven’t spent much time investigating. For my purpose I don’t want intermediary abstractions - but might be useful for your context depending on how much you want to specialize in rich text.
Thank you. I think you misunderstood me. By extra pluming I meant: extra pluming on the block-based text editor as it is.

Supporting multiplayer collaboration at the character level is much more difficult and we’re very well aware of that :)