EditTogether FAQ
Below, get more detail about how EditTogether works, today. Head back to the main EditTogether page here.
![EditTogether Workflow, Feb 2025](/files/styles/hero/public/hero/2025-02/ETworkflow_Feb25-taller.png?h=89e486dd&itok=gsO3nMVg)
What is EditTogether? Is it a text editor?
EditTogether is a framework for adding real-time collaboration to your Drupal site. Though EditTogether does provide a text editor build using ProseMirror, it also provides collaborative functionality for other fields and form elements, making entire forms collaborative in the process.
What is ProseMirror?
ProseMirror is an open-source framework for building rich-text editors. As a framework, it allows for extension and composition.
ProseMirror is extendable in that new functionality can be introduced by writing new code. EditTogether’s text editor uses a base package that manages the bundling of all feature extensions into a text editor; from there, multiple feature extension packages provide specific features to the base package. For developers, this means that new features can be written for EditTogether’s text editor without modifying the text editor code directly.
Because EditTogether’s base package is feature-agnostic, any number of features can be composed into a text editor that supports a specific use case. For Drupal text formats where users should only have access to minimal styling options, a text editor can be assembled to only support the styling options you choose. In a separate Drupal text format intended to provide a more robust feature set, you can assemble a text editor using all the features provided by EditTogether’s various extension packages.
Why did we choose ProseMirror over other text editors like CKEditor5 or TipTap?
We chose ProseMirror over other text editor solutions because:
It enables us add real-time collaboration to all text elements, not just rich-text fields.
It is fully open-source and does not provide any premium collaboration features with which real-time collaboration would conflict.
There are pain points in shifting to a new text editor framework within Drupal; because of this, we explored every existing text editor solution as a potential fit for form-level real-time collaboration. What we found is this: ProseMirror is the only open-source solution that enables form-level collaboration while also adhering to Drupal’s open-source vision.
Real-time collaboration for all text elements
At a technical level, ProseMirror provides a structured representation of HTML content. This allows us to computationally compare changes to HTML content and apply those changes in different environments, facilitating real-time collaboration. This also enables us attach important editorial features such as comments and suggestions to specific sections of text within the editor.
Because we’ve designed EditTogether’s text editor to be composable, we can create minimal text editors that mimic non-rich-text form elements such as plain text fields. At the code level, this creates a structured representation of the text content of each element, enabling us to compute content changes and attach comments to any and all text-based elements on a Drupal form.
Premium collaboration features
ProseMirror, CKEditor5, and TipTap (build on ProseMirror) are all open-source. However, both CKEditor5 and TipTap provide premium subscription-based features for real-time collaboration.
Premium feature subscriptions often support the development and maintenance of the underlying product—and this is a reasonable solution to funding open-source projects! However, extending either text editor to support open-source real-time collaboration poses an unjustifiable business risk, as such a feature has the potential to conflict with the revenue streams of the supporting organizations.
Because of this, we see ProseMirror as the best and only solution for a Drupal-based text editor. ProseMirror offers all of the structural back-end required to facilitate real-time collaboration without any reliance on premium features to support its development. Members of the Drupal community can contribute to EditTogether and ProseMirror in the same way they’d contribute to any other Drupal module, and the community retains full control of the development and maintenance performed against either.
Can I use EditTogether with my existing moderation workflows?
Yes! EditTogether acts at the form level, so you can add real-time collaboration to your content without any modification to your workflow itself.
I have custom CKEditor5 plugins. Can I use them with EditTogether’s text editor?
Custom CKEditor5 plugins cannot be used directly with EditTogether’s text editor. However, using EditTogether’s plugin system, you can port a CKEditor5 plugin to work with EditTogether.
Can I privately draft content prior to collaborating with my peers?
Yes.
As many of us know, the first step to collaborating on a document is drafting said document until you feel comfortable sharing it. By design, EditTogether does not support collaborating on content during during the “creation” step (before it’s been saved for the first time).
However, some users may want to create content and continuously save revisions until they’re ready to share the content with their team. You can use Workbench Approver to create this sort of workflow, where, upon creation, content enters a custom “private draft” state that disables publishing and restricts other users from viewing or editing the content. Then, once the content state is changed to “draft”, other users can view, edit, and publish the content according to your existing moderation workflows.
How does it work when someone wants to review my work?
Using Drupal’s various core and contributed workflow modules, you can set various states for content. We often implement “in review” or “requires approval” states for our clients; these states denote that the content must be reviewed by a specific user or user role before being published.
Commenting and Review
EditTogether enhances the review process through the addition of threaded commenting. Reviewers can collaboratively identify and comment upon issues they see in the content, and editors can respond to comments and resolve issues asynchronously or in real time. Then, once all issues have been addressed, a reviewer can move the content state to “approved” as they would in a traditional Drupal workflow.
“It’s extensible”: What does this mean regarding my custom fields, entities, and workflows?
We’ve attempted to address the most important use cases for collaboration using EditTogether. However, we can’t anticipate the structure or feature set of custom fields, entities, and workflows. We’ve designed EditTogether to be extensible for these instances.
EditTogether is extensible in that it allows developers to create feature add-ons in custom modules without modifying the EditTogether module directly. Within the custom modules that define custom fields or entities, developers can write EditTogether plugins that add collaborative functionality to said fields or entities. For fields or entities provided by contributed modules, developers can write collaborative plugins from a custom module or contribute the collaborative plugins back to the contributed module directly.
What parts of a content creation workflow does EditTogether handle? What parts do other modules handle?
At a high level, we can separate a content creation workflow into two layers:
The form layer, where content is edited → handled by EditTogether
The workflow layer, where content moves through different states → handled by other modules
The form layer
EditTogether facilitates real-time collaboration by modifying the forms on your Drupal site. For content managed by a workflow, this means that you only see EditTogether’s features when you draft, edit, or review content.
Actions that you might perform while in the edit form—writing content, adding comments, and changing the state of different fields—fall under EditTogether’s purview. EditTogether will track content changes and sync any comments made in real-time, meaning that changes to the edit form will be visible to all users. Any other form-level actions you wish to perform in a collaborative way may be possible using EditTogether.
The workflow layer
Drupal workflows facilitate the moving of content from one state to another. With any number of core and contrib modules, you can manage review processes, assign reviewers to content, restrict actions to specific user roles, or push content through various workflow states. While some workflow-related actions may be performed from within the edit form, most workflow processes act on the targeted content as a whole. Generally, these actions can be provided by modules other than EditTogether.
Can I use EditTogether’s text editor in combination with CKEditor5?
CKEditor5 can be alongside EditTogether’s text editor, but the text editor state will not update in real time.
For fields that don’t support real-time collaboration, EditTogether implements a “locking” system that enables users to restrict access to the field until they’re finished editing it. CKEditor5 can be used in this fashion—”locking” the CKEditor5 field will prohibit other users from editing it, and once saved and unlocked, other users will receive the updated state of the field.
Using Entity Browser and Entity Embed, other entities using CKEditor5 can be embedded in EditTogether’s text editor. We’ve used this to create reusable content entities containing CKEditor5 rich-text fields and embedding those entities in EditTogether. Any number of core or custom entities using CKEditor5 fields can be embedded in this fashion.
How do comments work? How will they work in the future?
EditTogether’s commenting feature allows users to make inline threaded comments against the node edit form. Comments are associated with user-highlighted text and can be edited, replied to, and deleted in real-time, enabling content editors to collaborate on the state of their content without using an external system for communication. Currently, the commenting feature is limited to fields that use EditTogether’s text editor.
Go back to the main EditTogether page here.