MCPcopy Index your code
hub / github.com/coast-team/mute

github.com/coast-team/mute @v0.14

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.14 ↗ · + Follow
743 symbols 1,449 edges 159 files 103 documented · 14%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

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 (LogootSplit) for large scale peer-to-peer collaboration on top of a peer-to-peer message layer (netflux and soon libp2p).

{width=75%}

stable demo · bleeding-edge demo · experimental network demo (using libp2p instead of netflux)

:package: Deployment

MUTE is browser-based, without any intermediary between you and your peers. However the peer-to-peer initial discovery and signaling requires at least a (lightweight) server.

Read more in our deployment documentation

:book: Development

Run npm install then npm start. The application is now available at localhost:4200, the signaling server at localhost:8010.

Development happens on the INRIA GitLab repository, but external contributions are very welcome on the GitHub mirror we maintain.

Read more in our development documentation

:bar_chart: Benchmark

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.

While centralized alternatives suffer significant performance drops after reaching tens of users on a document, MUTE remains unfazed. This is due to its architecture: MUTE doesn't process changes server-side, allowing much larger groups to collaboratively edit a document.

Memory/Latency

Load testing has been done for the core algorithms that represent the main computation done locally:

Mehdi Ahmed-Nacer, Claudia-Lavinia Ignat, Gérald Oster, Hyun-Gul Roh, and Pascal Urso. 2011. Evaluating CRDTs for real-time document editing. In Proceedings of the 11th ACM symposium on Document engineering (DocEng '11). Association for Computing Machinery, New York, NY, USA, 103–112. https://doi.org/10.1145/2034691.2034717

Loïck Briot, Pascal Urso, and Marc Shapiro. 2016. High Responsiveness for Group Editing CRDTs. In Proceedings of the 2016 ACM International Conference on Supporting Group Work (GROUP '16). Association for Computing Machinery, New York, NY, USA, 51–60. https://doi.org/10.1145/2957276.2957300

Protocol performance

We rely on pluggable network layers, so part of the real use performance not accounted for in our benchmarks can be attributed to the underlying protocols we use for message exchanges:

  • see performance reports for libp2p: https://blog.ipfs.tech/2022-06-15-probelab/
  • no performance report was made for netflux, which we are now phasing out

:hammer_and_wrench: Architecture

MUTE relies on reusable libraries we develop:

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:

We plan to improve messages exchange via:

  • libp2p for a more modern peer-to-peer browser communication layers
  • pulsar for increased reliability in networks banning WebRTC

License

Copyright (C) 2016-2023 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/.

Extension points exported contracts — how you extend this code

ILogDatabase (Interface)
(no doc) [6 implementers]
src/app/doc/logs/ILogDatabase.model.ts
NodeModule (Interface)
(no doc)
src/typings.d.ts
IEnvironment (Interface)
(no doc)
src/environments/IEnvironment.model.ts
Window (Interface)
(no doc)
src/e2e/tools.ts
IRichOperationMsg (Interface)
Properties of a RichOperationMsg. [1 implementers]
src/app/doc/editor/cursor/cursor_proto.d.ts
Window (Interface)
(no doc)
src/typings.d.ts
ISyncMsg (Interface)
Properties of a SyncMsg. [1 implementers]
src/app/doc/editor/cursor/cursor_proto.d.ts
IQuerySyncMsg (Interface)
Properties of a QuerySyncMsg. [1 implementers]
src/app/doc/editor/cursor/cursor_proto.d.ts

Core symbols most depended-on inside this repo

log
called by 62
src/app/doc/logs/logs.service.ts
create
called by 47
src/app/core/Doc.ts
get
called by 28
src/app/doc/logs/IndexdbDatabase.ts
getTextWrittenInTheEditor
called by 28
src/e2e/tools.ts
updateThemeProperty
called by 27
src/app/core/settings/settings.service.ts
open
called by 22
src/app/docs/docs.component.ts
send
called by 18
src/app/doc/logs/ILogDatabase.model.ts
leaveAndRejoin
called by 12
src/e2e/tools.ts

Shape

Method 461
Class 184
Function 48
Interface 37
Enum 13

Languages

TypeScript100%

Modules by API surface

src/app/doc/editor/cursor/cursor_proto.d.ts54 symbols
src/app/doc/network/solutions/libp2p.service.ts29 symbols
src/app/docs/docs.component.ts26 symbols
src/app/doc/network/network.service.abstracted.ts24 symbols
src/app/core/Doc.ts23 symbols
src/app/core/crypto/crypto.service.ts21 symbols
src/app/doc/network/solutions/pulsar.service.ts20 symbols
src/app/doc/network/pulsar.service.ts20 symbols
src/app/core/storage/local/local-storage.service.ts20 symbols
src/app/core/settings/settings.service.ts20 symbols
src/app/doc/editor/cursor/cursor_proto.js18 symbols
src/app/history/history.component.ts17 symbols

For agents

$ claude mcp add mute \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact