All Projects → Immortalin → slate-operational-transform

Immortalin / slate-operational-transform

Licence: other
Slate Operational Transform Demo (used in production at Narration Box)

Programming Languages

javascript
184084 projects - #8 most used programming language
CSS
56736 projects
HTML
75241 projects

Projects that are alternatives of or similar to slate-operational-transform

collaborative-editor
A collaborative editor that supports authorship display, image uploading placeholder and CJK characters composition based on Quill and ShareDB.
Stars: ✭ 78 (+129.41%)
Mutual labels:  sharedb, operational-transformation, collaborative-editing
Slate Collaborative
slatejs collaborative plugin & microservice https://slate-collaborative.herokuapp.com/
Stars: ✭ 236 (+594.12%)
Mutual labels:  crdt, collaborative-editing
coeditor
Yet Another Pair Programming Package for Atom.
Stars: ✭ 27 (-20.59%)
Mutual labels:  operational-transformation, collaborative-editing
slate-yjs-example
Minimal example project for slate-yjs
Stars: ✭ 43 (+26.47%)
Mutual labels:  slatejs, slate-editor
Cause
An EDN-like CRDT (Causal Tree) for Clojure & ClojureScript that automatically tracks history and resolves conflicts.
Stars: ✭ 68 (+100%)
Mutual labels:  crdt, collaborative-editing
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+17235.29%)
Mutual labels:  crdt, collaborative-editing
Crdt Playground
Stars: ✭ 215 (+532.35%)
Mutual labels:  crdt, collaborative-editing
diamond-types
The world's fastest CRDT. WIP.
Stars: ✭ 654 (+1823.53%)
Mutual labels:  crdt, collaborative-editing
mute-structs
MUTE-structs is a Typescript library that provides an implementation of the LogootSplit CRDT algorithm.
Stars: ✭ 14 (-58.82%)
Mutual labels:  crdt, collaborative-editing
Teletype Crdt
String-wise sequence CRDT powering peer-to-peer collaborative editing in Teletype for Atom.
Stars: ✭ 637 (+1773.53%)
Mutual labels:  crdt, collaborative-editing
Operational-Transformation
A collection of Algorithms to Synchronise changes across multiple clients using Operational Transformation
Stars: ✭ 25 (-26.47%)
Mutual labels:  operational-transformation, collaborative-editing
am-editor
A rich text collaborative editor framework that can use React and Vue custom plug-ins. 一个富文本实时协同编辑器框架,可以使用React和Vue自定义插件。
Stars: ✭ 542 (+1494.12%)
Mutual labels:  sharedb
live-editor
Real-time collaboration editing service with integrated editor component.
Stars: ✭ 35 (+2.94%)
Mutual labels:  collaborative-editing
svelte-slate
slate svelte view layer
Stars: ✭ 43 (+26.47%)
Mutual labels:  slatejs
Redwood
A highly-configurable, distributed, realtime database that manages a state tree shared among many peers.
Stars: ✭ 218 (+541.18%)
Mutual labels:  crdt
richtextpy
An operational transformation library for rich text documents
Stars: ✭ 41 (+20.59%)
Mutual labels:  operational-transformation
Peer Base
Build real-time collaborative DApps on top of IPFS
Stars: ✭ 208 (+511.76%)
Mutual labels:  crdt
counter-interview.dev
a collaborative collection of interview questions collected from both sides of the game: Interviewer(s) and Interviewee.
Stars: ✭ 102 (+200%)
Mutual labels:  collaborative-editing
caracara
GEUT LABS. An experimental Dat based collaborative editor.
Stars: ✭ 33 (-2.94%)
Mutual labels:  crdt
tableaunoir
An online blackboard 🖉 with fridge magnets 🌈🧲 for teaching, and making animations 🏃 and presentations ⎚.
Stars: ✭ 149 (+338.24%)
Mutual labels:  collaborative-editing

Slate JS Editor Operational Transform Example using ShareDB

Instructions

Cursors are WIP, for testing please use https://github.com/Immortalin/slate-operational-transform/tree/00e56152355535416a1007ffca296b7bfcfd7b22

cd slate-operational-transform
npm install
npm start

And in another shell

cd slate-operational-transform/collab_editor 
yarn install
yarn start

Open two different browsers and navigate to localhost:3000, all changes in one browser should be mirrored in another.

Caveat Emptor

  • This is a demo, there are a lot of optimizations and features missing.
  • Invoking JSON0-ot-diff on every edit is not very efficient.
  • A better way would be to either manually annotate the various slate operations or to add a debounce of some sort. A debounce would trade off between granularity (important for good UX) versus performance. Of course there are other ways such as separate thread of computing operations using WebWorkers, or perhaps rewrite the core algorithm in WebAssembly. If you paste a large body of text there is a second or two of lag as diff function has to catch up. The holy grail would be to implement the transformation function using Slate's native Operation type. (there are 9 operations, but that takes a lot of time to build and debug so it is faster to piggy back off ShareDB unless you have a team of engineers willing to build a solution from ground up.)
  • Multi-cursors, presence, live chat etc. are left as an exercise to the reader.

Literature

https://www.tiny.cloud/blog/real-time-collaborative-editing-slate-js/ https://blog.aha.io/text-editor/ https://ckeditor.com/blog/Lessons-learned-from-creating-a-rich-text-editor-with-real-time-collaboration/

https://medium.com/@david.roegiers/building-a-real-time-collaborative-text-editor-for-the-web-draftjs-sharedb-1dd8e8826295 https://hackernoon.com/operational-transformation-the-real-time-collaborative-editing-algorithm-bf8756683f66 https://hackernoon.com/analysing-different-operational-transformation-algorithms-for-collaborative-editing-60fcc49ef24b https://medium.com/@srijancse/how-real-time-collaborative-editing-work-operational-transformation-ac4902d75682 https://medium.com/coinmonks/operational-transformations-as-an-algorithm-for-automatic-conflict-resolution-3bf8920ea447 https://github.com/qqwee/slate-ottype https://github.com/ksimons/ot-slatejs https://github.com/quilljs/delta/blob/e5517726f6665e293e851457b1cc0c7a17576e50/src/Delta.ts#L390

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].