> We were quite seriously scared of repeating the infamous history of Netscape which was a well-known example of failing to successfully release a newer version of a popular software after deciding to rewrite it from scratch. Fortunately it did not happen in our case.<p>Big kudos for pulling it off!<p>> Two main candidates are Operational Transformation (OT) and Conflict-Free Replicated Data Type (CRDT). We chose OT and perhaps one day we will write down our thoughts on the ongoing OT vs. CRDT battle.<p>Please do, I would love to hear your thoughts on OT vs CRDT!
> The number of tests: 12500<p>> Code coverage: 100%<p>> Development team: 25+<p>> Estimated number of man-days: 42 man-years (until September 2018), including time spent on writing tools to support the project like mgit and Umberto (the documentation generator used to build the project documentation)<p>Software is expensive
For anyone interested in this issue I would suggest taking a look a Neil Fraser's Differential Synchronization.[0] It took me 2 weeks as a solo developer to add real time collaborative editing to our product using that method.<p>[0]: <a href="https://neil.fraser.name/writing/sync/" rel="nofollow">https://neil.fraser.name/writing/sync/</a>
Nice article. This is a great example of how Domain-Driven Design pays off. By really paying attention to how users think of the problem and expressing that in their design, they ended up with a richer domain model which in turn let them get better code <i>and</i> a better user experience.
It says on the pricing page that CKEditor 5 has "GPL 2+ copyleft Open Source" license. Can someone ELI5 that?<p><a href="https://ckeditor.com/ckeditor-5/pricing/" rel="nofollow">https://ckeditor.com/ckeditor-5/pricing/</a>
Nice! I too, would love to read more on the OT/CRDT trade-off.<p>Companion reading (the approach taken in ProseMirror, which was implemented in significantly less person-years): <a href="http://marijnhaverbeke.nl/blog/collaborative-editing.html" rel="nofollow">http://marijnhaverbeke.nl/blog/collaborative-editing.html</a>
Is there a sharedb compatible OT type definition? Like how <a href="https://github.com/ottypes/rich-text" rel="nofollow">https://github.com/ottypes/rich-text</a> exists for Quill? <a href="https://quilljs.com/docs/delta/" rel="nofollow">https://quilljs.com/docs/delta/</a><p>Also is it possible for third party plugins to add new operations (defining their own conflict resolution against the existing types)?
Been searching for a bit and it appears that the real-time collaboration part isn't open source and requires you to use their cloud service to make it work. The pricing for that isn't available on their website and instead requires you to contact them.<p>I hope I'm wrong since I have some ideas I'd like to try it out with. Sending my customer's data to their cloud is probably a non-starter.
Is there any difference in editing a structured document which is intended to ultimately be text for presentation and reading, versus a structured document which is describing requirements for code or a storyboard for a design?
Do these different end-results change the collaborative environment?
What is the main use-case for this? I'm looking at it from a coder's perspective. When I'm writing some code I wouldn't want somebody else inserting characters into my code while I am editing it.<p>But I can see that if the app is divided into a multiple code-files then different coders can be working on different files at the same time. Still I prefer some form of code ownership or at least locking of multiple files just for me while I'm working on them.<p>I don't quite see how it would be much different for other kinds of text. While I'm writing this post right now I wouldn't want somebody else modifying its beginning while I'm writing its end.<p>Not saying there aren't any good use-cases, just can't think of any right now. So that's my question, what are they?
Recently saw a fantastic intermediate talk on this subject called CRDTs and the Quest for Distributed Consistency[0]. One product of the research was automerge[1], a library for handling collaborative editing of JSON-like data models<p>[0]: <a href="https://www.youtube.com/watch?v=B5NULPSiOGw" rel="nofollow">https://www.youtube.com/watch?v=B5NULPSiOGw</a><p>[1]: <a href="https://github.com/automerge/automerge" rel="nofollow">https://github.com/automerge/automerge</a>
This is a great blog post.<p>It was interesting to see how they approached moving from a linear data model to a tree structured data model. Is anyone aware of similar work with graph structured data, as you find in electronic design automation? Think collaborative schematic editing.
Nice writeup! A tiny nitpick, shareJS (DerbyJS) had/have an object based OT implementation (ie. tree) since before this was started I think (or around the same time).
> We started building our next generation rich-text editor with the assumption that real-time collaborative editing must be the core feature that lies at its very foundation<p>Am I the only one who doesn't like other people typing through my work? Why not simply let the user choose when to merge their work with others?<p>Honestly, sometimes I feel collaborative text editors have been created "just because we can" or "just because we want to see if we can".
The link at the bottom which said that you could check out a demo was confusing because there was no demo there.<p>Demo can be found at <a href="https://ckeditor.com/docs/ckeditor5/latest/features/collaboration/overview.html" rel="nofollow">https://ckeditor.com/docs/ckeditor5/latest/features/collabor...</a>
Nice write-up. I've seen[0] the blood, sweat and tears that went into this project and I have to say it has come a long way.<p>BTW any timeline on sunsetting the venerable CKEditor 4?<p>[0] I was part of the CKEditor 4 team back when the CKE5 guys were laying down some the first iterations of what is described in this blog post.
This is a disguised ad for their saas offer. Seems interesting but no public pricing. Meaning it's probably very expensive and targeting big customers.
I dont understand why this is so hard. If you take a document and enter each character into a database as a separate entry, then only lock each character as it's changed and unlock it immediately afterwards. The likelihood that all individuals will be modifying the same character at the same time is low. and while it's locked, the person trying to change it will see it's not changing - so they'll try again in a second or two by which time it will be unlocked.