Live data from Hacker News

Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

news.ycombinator.com

51–60 of 105 posts

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#51
post #50

We have been using Tiptap in production for more than a year in Notesnook[0]. Glad to see it finally launching here on HN! We have had quite a long and rough ride in search of a stable rich text editor. We began with Quill.js then migrated to TinyMCE and then finally settled on Prosemirror. Unfortunately, contenteditable is still absolutely horrible on web browsers, especially mobile ones. Tiptap is a good choice if…

Did you use Remirror? Both Remirror and Tiptap? Or you just investigated Remirror before landing on ProseMirror + Tiptap?

No. I found Remirror quite a while after Tiptap while searching for a more stable React Node View implementation.

The good news, though, is that it's really simple to mix and match Tiptap and Remirror since both of them use Prosemirror internally.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#52

Currently using TipTap as a higher level abstraction on top of ProseMirror. Mostly for the React node view support which works very well. I try to implement most other stuff as straight ProseMirror plugins. Shameless plug for some ProseMirror FOSS ecosystem contributions I've recently made: A commit-based collab plugin that's far more performant under heavily active client loads than stock. I'm a fan of YJS, but not…

Thank you for your open source contributions and in-depth articles. We think that the field of collaboration is still new and evolving. Because of the pros and cons of the different implementations, we think it might be a good idea to have the choice between libraries like Yjs and Automerge. Would you use it?

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#53
post #2

Since Tiptap is built on top of ProseMirror, do you contribute funds to support ProseMirror's development?

[flagged]

Whoa, can you please make your substantive points without breaking the site guidelines? You broke these:

"Converse curiously; don't cross-examine."

"Assume good faith."

If you wouldn't mind reviewing https://news.ycombinator.com/newsguidelines.html and sticking to those rules, we'd be grateful. I took a quick look at your previous comments and didn't see any pattern of guideline breakage (thank you!), so this should be easy to fix.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#55
post #14

About three years ago I was looking for an editor and while TinyMCE was the absolute best, its pricing model was as bad as CKEditor's, so I ended up testing Tiptap in a Vue project. It's really a great and flexible editor, with a couple of rough corners, but overall the only serious alternative to the above-mentioned editors. And since it has a sensible licensing model it is an overall good choice.

As we continue to improve Tiptap, we would be interested in more details about the "rough corners". Do you have any examples?

The main problem had to do with fields inside a custom component not updating the tree (document JSON?) properly. These components could be nested, they had each a title and another variable-content field into which other components could be nested into. The title was a div.contenteditable and I had a hard time getting it to sync with the tree, some components were never able to do this. https://imgur.com/a/qKg9UUs (SFW, apparently imgur has a new policy?)

It might be somewhat similar to the "details" extension, but they were also drag and droppable. The drag and drop support was also somewhat subpar compared with TinyMCE, I ended up using vue.draggable.next to solve the issues, but this added a layer of huge complexity.

Then there was an issue that the UniqueID is a Pro extension and it would have been required for properly storing the document. I now see that pro extensions are free, after registration, but I'm not sure if it was always like this, I think it was coupled to a GitHub sponsorship back then (maybe around August 2021). For a side project which would then sit at rest for some months this wasn't feasible. I think I implemented a custom UniqueId to get around this, but I haven't touched the project for over a year.

About 2 months ago I was thinking about rewriting it in React and see if I could turn it into something, but I haven't found the time.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#56
post #36

Earlier quoted context omitted.

I also liked it a lot, though I used it in React and had a bit of trouble with getting it to play nicely with useEffect. I see that as an issue with React though, not TipTap. It’s a great editor and I love that it’s headless.

Curious what issues you ran into?

My memory is hazy since it's been a while, but I implemented collaborative editing in TipTap using YJS. This requires coordinating editor state with a socket interface and I had to use a bunch of useEffect trickery to make sure the state didn't get out of sync. I'm afraid I can't elaborate further, but I will say that I'd highly recommend TipTap if you want to build collaborative editing. Once I got it working, it worked perfectly.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#57

We have been using Tiptap in production for more than a year in Notesnook[0]. Glad to see it finally launching here on HN! We have had quite a long and rough ride in search of a stable rich text editor. We began with Quill.js then migrated to TinyMCE and then finally settled on Prosemirror. Unfortunately, contenteditable is still absolutely horrible on web browsers, especially mobile ones. Tiptap is a good choice if…

Thank you for your honest feedback. Our goal is to make ProseMirror with Tiptap even easier to use. The demand for modern content editing continues to grow. Tools like Notion have raised the bar. We don't want to hide ProseMirror, we want to complement it.

We believe that a good editor needs not only a frontend, but also easy-to-use backend services that we try to integrate as seamlessly as possible. With our framework-agnostic approach, we support more than just React.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#59

Will schema versioning be coming to hoscuspocus or will this be locked behind a paywall? We’ve sponsored tiptap for a while now and I’d hate to be locked out of features because we need to self host.

Schema versioning is something I would really like to see in Hocuspocus, but it is currently not scheduled. So it will be a while before we tackle this topic. Currently we are building version history so that you can have a Google Docs-like history of your documents. Version history will not be available in the freeplan.

Re: Launch HN: Tiptap (YC S23) – Toolkit for developing collaborative editors

#60

Currently using TipTap as a higher level abstraction on top of ProseMirror. Mostly for the React node view support which works very well. I try to implement most other stuff as straight ProseMirror plugins. Shameless plug for some ProseMirror FOSS ecosystem contributions I've recently made: A commit-based collab plugin that's far more performant under heavily active client loads than stock. I'm a fan of YJS, but not…

Thank you for your open source contributions and in-depth articles. We think that the field of collaboration is still new and evolving. Because of the pros and cons of the different implementations, we think it might be a good idea to have the choice between libraries like Yjs and Automerge. Would you use it?

Would I use Automerge? Hopefully this isn't TMI :)

I think it would need to clearly be worth the cost. I'm having a hard time imagining use-cases my users would have, and matter enough, that would necessitate it over the commit based backend..

I spent quite a bit of time as an FTE building out a robust-ish and efficient Yjs backend POC. This included refactoring the ProseMirror Yjs bindings into a proper TypeScript project, and specializing them for some funky use-cases. At the end of it all my personal takeaways were:

* State-based CRDT isn't great when you want a central authority in the mix anyway and are fundamentally trying to work with operations

* The exchange rate between ProseMirror's currency, steps, and some other replication strategies building blocks is too high

* ProseMirror should add the concept of range-relocation to its mappings; this is a bit of an aside but it would help retain user intent when reconciling concurrent edits involved in block relocations

As a concrete example for others imagine a knowledge base editor. You want allow certain users ONLY to comment and you want to enforce this on the backend. There are a number of ways this could be implemented but you may want the UX of optimistically allowing them to make that edit in the FE and then submit the ProseMirror steps to the backend. This will typically involve two fundamental ProseMirror steps(of which there are only a few) to set an attribute and set a mark on a node range.

You can relatively easily inspect the submitted changes to verify only the allowed operations are occurring, and authorize the user for them.

However Yjs just cares about syncing state so the documents end up equivalent, and its efficient diff format doesn't really have the info you'd need to determine what's going on. You'd need to have the actual document model loaded, and then diff the docs before/after to figure out exactly what happened. And/or patch into the Yjs binding diff algorithm which works surprisingly well but doesn't produce minimal changes and can often "over edit" the document model.

So something that was relatively simple with ProseMirror steps has become a huge thing with Yjs. And for what?

All that to say, Automerge is supposedly operation based so in theory it sounds like a better route for use cases involving a central authority(which is most if I'm speculating) and want to do extra processing on document operations.. But it'd need to bring a lot to the table to offset the time investment..

Post reply on HN