mute icon indicating copy to clipboard operation
mute copied to clipboard

a scalable collaborative document editor with CRDT, P2P and E2EE

MUTE logo

MUTE: Multi User Text Editor

Edit documents collaboratively in real-time with hundreds of users on the same document, even with a light server. MUTE implements a CRDT-based consistency algorithm for large scale peer-to-peer collaboration: LogootSplit. This algorithm can be seen as an extension for variable-sized elements (e.g. strings) of one of the basic CRDT algorithms for unit elements (e.g. characters).

You can check:

:package: Deployment

MUTE runs in the browser, which means that modifications are sent directly to your peers without any intermediary server. However the peer-to-peer technology requires a few servers for discovery and signaling. A complete MUTE instance relies on the following servers:

  • your web server serving the MUTE static files over HTTPS
  • a WebSocket signaling server which is mandatory in order to establish a connection between two users
  • an (optional but highly recommended) Pulsar server to relay messages in case WebRTC is blocked on a user's network

MUTE comes with a default set of STUN servers configured for WebRTC.

Proceed with the following steps:

  1. Deploy the signaling server (how to)
  2. Build MUTE static files (how to)
  3. Serve static files

TIP: If you serve MUTE via HTTPS, the Signaling server should also be secure, i. e. available via wss protocol.

TIP: You may find a full NGINX configuration example in the conf folder

:book: Documentation

:bar_chart: Benchmark

NOTE: more automated/replicable benchmarks will be added in the future

Compared to existing web-based collaborative text editing tools, MUTE does not require a powerful central server since the server is not performing any computation. You can even work offline and reconnect later without losing your changes.

In our experience, performance drops significantly after reaching tens of users on a document on centralized platforms. MUTE doesn't process changes server-side, allowing much larger groups to collaboratively edit a document.

:hammer_and_wrench: Architecture

MUTE relies on other libraries we develop, which you can reuse in your projects:

MUTE also has a pluggable system of services called Bots. They can act like peers in documents to provide services:

MUTE exchanges messages by default over WebRTC via:

  • netflux: peer-to-peer browser communication layer
  • sigver: signaling for WebRTC

In the future, any communication layer could be used, like Pulsar which we support already for increased reliability!

One of the best ways to contribute to MUTE is to help these libraries!

License

Copyright (C) 2016-2021 COAST

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.