{"id":13559085,"url":"https://github.com/coast-team/mute","last_synced_at":"2025-03-16T07:15:08.017Z","repository":{"id":41297294,"uuid":"71768117","full_name":"coast-team/mute","owner":"coast-team","description":"a scalable collaborative document editor with CRDT, P2P and E2EE","archived":false,"fork":false,"pushed_at":"2023-12-28T09:28:47.000Z","size":20831,"stargazers_count":129,"open_issues_count":17,"forks_count":17,"subscribers_count":13,"default_branch":"main","last_synced_at":"2024-10-30T18:33:13.919Z","etag":null,"topics":["collaboration","collaborative","collaborative-editing","collaborative-framework","collaborative-writing","crdt","document","e2ee","offline-capable","p2p","rich-text-editor","webrtc"],"latest_commit_sha":null,"homepage":"https://mute.loria.fr/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coast-team.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2016-10-24T08:28:32.000Z","updated_at":"2024-10-25T04:14:43.000Z","dependencies_parsed_at":"2023-01-20T08:47:58.838Z","dependency_job_id":"16e8aaf9-ae60-49a2-bb6f-4401875e0c4e","html_url":"https://github.com/coast-team/mute","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coast-team%2Fmute","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coast-team%2Fmute/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coast-team%2Fmute/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coast-team%2Fmute/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coast-team","download_url":"https://codeload.github.com/coast-team/mute/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243835999,"owners_count":20355616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["collaboration","collaborative","collaborative-editing","collaborative-framework","collaborative-writing","crdt","document","e2ee","offline-capable","p2p","rich-text-editor","webrtc"],"created_at":"2024-08-01T12:05:20.326Z","updated_at":"2025-03-16T07:15:07.981Z","avatar_url":"https://github.com/coast-team.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","p2p"],"sub_categories":[],"readme":"\u003ca href=\"https://gitlab.inria.fr/coast-team/mute/mute\"\u003e\n  \u003cimg src=\"https://gitlab.inria.fr/coast-team/mute/mute/-/raw/main/src/assets/images/icons/icon-512x512.png?inline=false\" alt=\"MUTE logo\" title=\"MUTE\" align=\"right\" height=\"60\" /\u003e\n\u003c/a\u003e\n\n# MUTE: Multi User Text Editor\n\nEdit 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](#hammer_and_wrench-architecture)) for large scale peer-to-peer collaboration on top of a peer-to-peer message layer ([libp2p](#hammer_and_wrench-architecture)).\n\n\u003cdiv align=\"center\"\u003e \u003c!-- extra line is important for proper markdown evaluation--\u003e\n\u003ca href=\"https://gitlab.inria.fr/coast-team/mute/mute\"\u003e\n\n![](https://gitlab.inria.fr/coast-team/mute/mute/uploads/b2363cb860a073fc277b9b62f2bc4bae/mute.jpeg){width=75%}\n\u003c/a\u003e\n\n[stable demo](https://mute.loria.fr) · [bleeding-edge demo](https://main.mute.loria.fr)\n\u003c/div\u003e\n\n## :package: Deployment\n\nMUTE 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.\n\nRead more in our [deployment documentation](https://gitlab.inria.fr/coast-team/mute/mute/-/wikis/Deployment)\n\n## :book: Development\n\n:pencil2: - *The project's package-lock.json was last generated with NPM@9.5.0 and Node@18.15.0. Developers on the app uses Docker Engine@20.10*  \n\nRun `npm install` then `npm start`. The application is now available at [localhost:4200](http://localhost:4200), the signaling server at [localhost:8010](http://localhost:8010).\n\nDevelopment happens on the INRIA GitLab repository, but external contributions are very welcome on the [GitHub mirror](https://github.com/coast-team/mute/) we maintain.\n\nRead more in our [development documentation](https://gitlab.inria.fr/coast-team/mute/mute/-/wikis/Development)\n\n## :bar_chart: Benchmark\n\nCompared 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.\n\nWhile 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.\n\n### Memory/Latency\n\u003c!-- load graph for local app --\u003e\n[Load testing](https://github.com/coast-team/replication-benchmarker) has been done for the core algorithms that represent the main computation done locally:\n\n\u003e 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\n\n\u003e 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\n\n### Protocol performance\n\nWe 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:\n\n- see performance reports for libp2p: https://blog.ipfs.tech/2022-06-15-probelab/\n- no performance report was made for netflux, which we are now phasing out\n\n## :hammer_and_wrench: Architecture\n\nDocument editing layer:\n\n- [@coast-team/mute-core](https://gitlab.inria.fr/coast-team/mute/mute-modules/mute-core): core component ensuring typical document-editing operations are done in an orderly fashion\n- [@coast-team/mute-structs](https://gitlab.inria.fr/coast-team/mute/mute-modules/mute-structs): an implementation of the [LogootSplit](https://gitlab.inria.fr/coast-team/mute/mute-modules/mute-structs#ref-1) CRDT algorithm. 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).\n\nSecurity layer:\n\n- [@coast-team/mute-crypto](https://gitlab.inria.fr/coast-team/mute/mute-modules/mute-crypto): a group cryptographic key agreement implementation using [Burmester and Desmedt's algorithm](https://gitlab.inria.fr/coast-team/mute/mute-modules/mute-crypto)\n\nP2P Network layer:\n\n- [libp2p](https://libp2p.io): modern peer-to-peer browser communication layer\n  - [@libp2p/webrtc-star-signalling-server](https://www.npmjs.com/package/@libp2p/webrtc-star-signalling-server): signaling for libp2p via WebRTC\n\nLegacy P2P network layer:\n\n- [netflux](https://github.com/coast-team/netflux): peer-to-peer browser communication layer\n- [@coast-team/sigver](https://github.com/coast-team/sigver): signaling for netflux via WebRTC\n\nNon-P2P network layer backup:\n\n- [pulsar](https://github.com/apache/pulsar) for increased reliability in networks banning WebRTC\n\n## License\n\nCopyright (C) 2016-2023 [COAST](https://team.inria.fr/coast)\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU Affero General Public License as published\nby the Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU Affero General Public License for more details.\n\nYou should have received a copy of the GNU Affero General Public License\nalong with this program. If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoast-team%2Fmute","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoast-team%2Fmute","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoast-team%2Fmute/lists"}