Free text editors for collaboration

Original author: Jure Triglav
  • Transfer

For many years I was haunted by this itch - trying to find the “perfect” text editor for collaboration. But not just any text editor that supports collaboration, oh no, my task is to find (well, at least look for) open text editors with group work in real time (i.e. not only plain text, but also structured content). Thus, the focus of this article is on a fairly niche category of open source tools and the technologies they run on. If your interests are wider, you can refer to this constantly updated list of editors .

So. I jumped off a cliff many times and dived into an almost endless sea of ​​real-time collaboration programs. Flying down, this invigorating dive to the bottom of the pool, I already know well. Usually it begins with some initial excitement and surprise ( leap ) of new low-level technologies and research, followed by a feeling of congestion and a desire to emerge ( hey, it's pretty deep here) and examine the applied part, and then the period when my thoughts are best described with the phrase: "Am I really so stupid for this?" (quite likely), because usually the documentation, demo and code do not quite match or make sense, the collaboration component on the server does not start and there are borderline situations where more than two users enter the same word, and ... that’s it ( surfaced, gasping for air ).

After that, it’s difficult to raise the topic again, the next stage is a kind of winter of thought, in a drill, waiting for severe weather, when I usually let the semi-finished code work for months ... or years. Until we meet again, a conflict-free replicated data type!

Fig. 1. Leap

The fact is that in 2017 I was so excited about the prospects of one algorithm (a kind of CRDT ) described in a research article that I spent several days and implemented it in JavaScript , only to find out that there is a borderline situation in the scientific article for which no solution is given (well ... but maybe all the same?). At that time, I turned to the author, but did not receive an answer, and found that this particular border situation was considered in a similar algorithm by another team, but hell, because of these subtleties in the implementation, maybe I could transfer it to Lisp ... SO STOP! What's going on here? Of course, I don’t want to introduce a new algorithm from research work and fix its problems! What am I doing, how did I get here?Let's rewind!

What I (and probably you too, dear reader) really need is a plug-and-play editor, a finished product . Which solves the problem of real-time collaboration. Which allows several connected users, thousands of miles apart, to edit a structured document by pressing keys on keyboards and see each other's changes on their screens. That's all. However, the editors are difficult ... and I just could not find such a tool.


The year 2019 has come (the itch has returned with force ), and this time not only the magical editor appeared, but in fact even two applicantsto fulfill the long-awaited specification. Initially, I wanted to fly over the field with you and list almost all text editors for collaboration, but it doesn't seem to add much value . Instead, let's focus on two editors that can become “that way.”

But there are two editors, and you need to make a choice - it would be nice to objectively consider which one is really better suited. I offer a deeply scientific classification system with the following categories (using kiwi as a standard unit of good):

  1. Open license: adds 1 qiwi (this is also an exclusion criterion)
  2. Image Support : Adds 1 Kiwi
  3. Table Support : Adds 1 Kiwi
  4. List Support : Adds 1 Kiwi
  5. Math Support : Adds 1 Kiwi
  6. Real-time Collaboration Support : Adds 1 Kiwi
  7. Available server components : 1 kiwi
  8. Support for remote cursor and selection: 1 kiwi (that is, you can see the cursors of other users)
  9. Work offline : 1 kiwi (it's pretty hard to determine)
  10. Production Experience : 1 Kiwi
  11. Mobile Support : 1 Kiwi

With such a scoring system, the editor can get a maximum of 11 kiwi units of good. Let's get started!

Ckeditor 5

Figure 2. CKEditor 5 interface (one of the possible options), source

Let's start with CKEditor 5, the latest version from a large line of quality editors . He is beautiful. I know, I know that this is not a criterion, and it is in reality, it does not matter (and we can not even agree), but I just had to say about its beauty. So, this editor takes a lot of kiwi: it is licensed under the GPL ( some discussion of the limitations here ), (+1), supports images, tables, lists (+3), math is supported by the plugin (+1) and it also supports real-time collaboration time with the deleted cursor and selections (+2). CKEditor creators wrote amazingA detailed blog post on how they developed it using operational transformations.

However, I could not find the necessary server implementation for real-time collaboration, and all the documentation indicates the mandatory need for their cloud service and (paid) component, even in projects compatible with the GPL.

The level of offline support is difficult to determine., but it seems that it is not completely complete (for example, the editor can withstand a disconnected connection for a short time, but not for several days of working offline). Probably half a kiwi? The same applies to mobile support, there is also work on full support (+0.5). And the last moment, CKEditor is certainly used in production, but I could not find a list of products based on it (+0.5).

A good editor, but the lack of an affordable open source collaboration server is really depressing.

Full rating: 8.5 / 11

Atlaskit Editor

Fig. 3. Atlassian Atlaskit Editor

About a year ago, Atlassian launched the open source Atlaskit Design system, and it came with a lot of goodies, including a full-fledged, ready-to-use editor based on ProseMirror . I already feel that this may be the editor we were looking for! It is released under the Apache 2.0 license, according to many, as a very permissive open source license (+1 kiwi). It not only supports images, tables and lists, but supports them exceptionally well (+3 kiwi)! Implementation of tables, which are lacking in most editors, there is executed well:

Fig. 4. Managing tables in Atlaskit Editor

Unfortunately, math is not supported, but the editor itself is based on ProseMirror, so it should not be a problem to add an existing solution (+0.5) to it. It definitely supports real-time collaboration with remote cursors and selections (+2), this is one of the best UI examples of the support I have ever seen (for example, remote cursors are darkened if overlapping with your own, and other great implementation details ) In addition, from my testing, offline support seems very solid (+1) - this is probably due to the “central competency” approach that ProseMirror uses for collaboration . Wow, we already got to 7.5 kiwi, and many more points! Forward!

Unfortunately, it is here that we are faced with a harsh reality. Like CKEditor, there is no server-side implementation available for real-time collaboration. Lazy people. Large bummer. I wonder if this can be fixed? ..

In any case, if you continue to descend according to the criteria, then everything else is worth the Kiwi: it is definitely used in production (millions of users), and it has mobile support (+2). Just as I was about to announce the winner (a total of 9.5 kiwi) and publish this post, something else came up. It turns out that the logos and badges used in the editor and many other Atlaskit components are licensed under a very restrictive ADG licensewhich states that you cannot use them outside the Atlassian universe. However, the same icons are widely used and tightly integrated into the editor. Major bummer number two, and I take the kiwi from them. We returned to 8.5, and if you are counting, you see that the result is now the same. And he is final.

Now, if you could do something with these icons ...

I thought that after all the latest advances in online text editors, it would be very sad to stay with two great editors with amazing features that you still can't use in open source projects - either due to licensing issues, lack of affordable building blocks, or both.

Therefore, first I developed the server side(based on PostgreSQL, PubSweet framework and REST / WebSockets mix), the code is available here . It is quite simple, but it does its job and ensures the persistence of documents and the communication channel in real time. Surprisingly, thanks to the huge ProseMirror community, I was able to figure out how everything should work without having an exact interface specification (+1 kiwi).

And then I replaced the icons used by the editor with the icons from the Feather set. In particular, three packages had to be replaced. Since the ADG license, among other things, prohibits any derivative work, these packages had to be redone from scratch. Probably, because of this, some functions were lost, mainly from the point of view of accessibility for people with disabilities, but a good open base was created for further development. For example, in some cases there are no better alternatives for the icons , so if you want to contribute to this project, here is the first problem (+1 kiwi)!

All this means that now we are only half a qiwi from the perfect result (but we are likely to be able to cope with math). What happened was what I did not believe in when I started this journey. It also means that we have a clear winner in this battle, and ultimately Atlaskit Editor won thanks to the diverse, open, and helpful ProseMirror community . Check out the project documentation for instructions on where to start. I believe that if you are starting a new project and are considering the possibility of cooperation in real time, this is a great place to start, even with all the caveats .

Fig. 5. Demonstration of real-time editing capabilities in Atlaskit Editor

Final (corrected) result: 10.5 / 11

Honorable Mention

There are two editors that I would like to mention, although right now they don’t have a ready-made solution for real-time collaboration, but both are built on top of libraries that support this functionality. Perhaps both have plans.

Fig. 6. Wax editor (ProseMirror-based word processor)

The first is Wax (named after ancient wax tablets) from the Coko Foundation. This word processor was first made on the Substance library ( repository ), and now rebuilt under ProseMirror ( repository) It is exclusively packed with functionality. These are not exactly the functions for which we give kiwi, but nevertheless they are excellent functions. Wax was originally built for typesetting books , it supports notes (numbered annotations common in books), change history, search and replace, ornaments and others. Maybe give oranges for this ? In this case, Wax will receive 4 kiwis (open license, images, lists, use in production) and a couple of oranges, possibly four. . This is a lot of fruit!


Fig. 7. Texture, Substance-based editor

Finally, we have Texture , a very specific, professional (but open source) editor for creating scientific content in JATS format (XML standard for journal articles). If you practice fruit counting, we will almost certainly run out of fingers: an open license, tables, images, deep mathematics support, links and cross-references, lists, metadata support, the list goes on! I repeat, both Wax and Texture are wonderful editors , and the only thing that keeps them from the maximum amount of kiwi is the lack of real-time co-editing features, which this article is devoted to.


If you are creating a system in which real-time collaborative editing is a key component, you have chosen the right time. Last year, the landscape has matured, and now almost plug-and-play open solutions have appeared here . Perhaps, with your help, exactly in a year we will have a whole set of open projects. And perhaps, only possible, we will also use tools built on top of these open layers, without even knowing about it.

Further reading

  1. History-infused data: causal trees and operational CRDTs
  2. Lessons from Creating a Real-Time Text Editor
  3. HTML word processor example
  4. Co-Editing in ProseMirror

Also popular now: