Hello all,
In this proposal I’d like to discuss the choice of the editor for Cristal.
Detailed analysis can be found in the Rich Editor / Realtime Editing design page.
The list of good quality and maintained (not that all the editors are maintained by a small group of 1 or 2 active committers) editors is:
- quill
- TipTap
- Prosemirror
- Editor.js
Differencing criteria:
- Abstract Document Model: It is important for the framework to provide an abstract document model, decoupled from the actual html of the editor. This abstract document model must also be extensible to be able to define custom elements (e.g., macros).
- Availability of good-looking editor plugins (e.g., image, block, quick actions…). This point is important as we are wiki developers and not editor developers. Therefore, we need to minimize the editor development work to integration and customization of existing UI elements, and not on the development of editor UI elements
- Realtime support: there is no out of the box realtime support for any editor, but we can’t select one where reatime integration is know to be difficult
Editor | Abstract document model | Nice editor plugins | Existing Realtime implementation | Comments |
---|---|---|---|---|
Quill | yes | Good looking but closer to CKEditor (i.e., no quick actions or block drag handles) Missing features such as image aligmnent. |
yes | Version 2 not still officially stable, but should be in the near future |
TipTap | yes since based on Prosemirror | A nice set of available extensions, though not as rich as we’d like, for instance no support for image with captions currently, and the classic block editing left hand side handle to move block is a paying extensions | yes | |
Prosemirror | yes | Very minimal set of available extensions. Prosemirror is a very good technical base to build editors (milkdown, or tiptap are build on top of it), but it does not come with good-looking UI elements. | yes | |
Editor.js | No | - Quick actions out of the box - block drag handles out of the box |
no |
Conclusion:
We are in the difficult situation where there is no clear winner and we’ll need to focus our works.
- Editor.js is not an option as the realtime support seems to be very poor, which is a shame as this is imo the most good looking option and a really good out of the box editor (when one don’t need customization)
- Prosemirror is a very strong choice allowing use a good access to low level APIs. This can come handy when working on retro-compatibility with exiting XWiki pages or the support for advanced macro features. On the other hand, the available plugins are not very good looking and we’ll probably need to rework there design, and possible extend them to add missing features
- TipTap is a good choice as well as it’s based on Prosemirror. The cons being:
- payed model, most of the interesting/advanced UI elements are pro and need a license (with the risk of seeing more UI elements becoming pros over time)
- by limiting ourselves to the free UI elements, we are close to when Prosemirror is offering but with an additional TipTip specific layout that could be cumbersome for advanced customization
- Quill is also a good choice with a version 2.0 in alpha. But the editing experience is more “traditional” (i.e., no notion of block, or no quick action available out of the box). In addition: existing plugins are often only compatible with Quill 1.x
My feeling is that quill will be a good choice in about a year once v2.0.0 will be stabilized.
In the meantime, I’m +1 for prosemirror as it checks all technical requirements except for the availability of nice UI elements. Note that while
I’m +0 for TipTap as I’m afraid that their business model could bite us in the feature with extensions becoming non-free in the future.
WDYT?
3 posts - 2 participants