cudr / Slate Collaborative
Licence: mit
slatejs collaborative plugin & microservice https://slate-collaborative.herokuapp.com/
Stars: ✭ 236
Programming Languages
typescript
32286 projects
Projects that are alternatives of or similar to Slate Collaborative
textbus
Textbus 是一个组件化的、数据驱动的富文本框架,支持在线协同编辑,同时也可以作为一个开箱即用的富文本编辑器,拥有非常好的扩展性和可定制性,是构建复杂富文本的不二之选!
Stars: ✭ 642 (+172.03%)
Mutual labels: collaboration, rich-text-editor, collaborative-editing
Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+2397.46%)
Mutual labels: collaboration, collaborative-editing, crdt
Etherpad Lite
Etherpad: A modern really-real-time collaborative document editor.
Stars: ✭ 11,937 (+4958.05%)
Mutual labels: collaboration, collaborative-editing, rich-text-editor
Text
📑 Collaborative document editing using Markdown
Stars: ✭ 282 (+19.49%)
Mutual labels: collaboration, collaborative-editing, rich-text-editor
Quill Sharedb Cursors
Collaborative editing with multi cursors sync using Quill and ShareDB.
Stars: ✭ 121 (-48.73%)
Mutual labels: collaboration, collaborative-editing, rich-text-editor
Canner Slate Editor
📝Rich Text / WYSIWYG Editor built for Modularity and Extensibility.
Stars: ✭ 1,071 (+353.81%)
Mutual labels: slate, rich-text-editor
Fluidframework
Library for building distributed, real-time collaborative web applications
Stars: ✭ 3,592 (+1422.03%)
Mutual labels: collaboration, crdt
Tandem
Typing in Tandem. Decentralized, cross-editor, collaborative text-editing!
Stars: ✭ 678 (+187.29%)
Mutual labels: collaboration, collaborative-editing
Peer Base
Build real-time collaborative DApps on top of IPFS
Stars: ✭ 208 (-11.86%)
Mutual labels: collaboration, crdt
How To Collaborate On Github
A mini book about collaborating on GitHub
Stars: ✭ 346 (+46.61%)
Mutual labels: collaboration, collaborative-editing
Teletype Crdt
String-wise sequence CRDT powering peer-to-peer collaborative editing in Teletype for Atom.
Stars: ✭ 637 (+169.92%)
Mutual labels: collaborative-editing, crdt
Slate Edit Table
Slate plugin for table edition
Stars: ✭ 97 (-58.9%)
Mutual labels: slate, rich-text-editor
Slate Edit Code
A Slate plugin for code block editing
Stars: ✭ 44 (-81.36%)
Mutual labels: slate, rich-text-editor
Subethaedit
General purpose plain text editor for macOS. Widely known for its live collaboration feature.
Stars: ✭ 1,183 (+401.27%)
Mutual labels: collaboration, collaborative-editing
diamond-types
The world's fastest CRDT. WIP.
Stars: ✭ 654 (+177.12%)
Mutual labels: crdt, collaborative-editing
mute-structs
MUTE-structs is a Typescript library that provides an implementation of the LogootSplit CRDT algorithm.
Stars: ✭ 14 (-94.07%)
Mutual labels: crdt, collaborative-editing
demo
slate-collaborative. Checkslatejs collaborative plugin & microservice
A little experiment for co-editing.
Based on idea of https://github.com/humandx/slate-automerge
API
Client
Use it as a simple slatejs plugin
import { withIOCollaboration } from '@slate-collaborative/client'
const collaborationEditor = withIOCollaboration(editor, options)
Check detailed example
Options:
{
docId?: // document id
url?: string // url to open connection
connectOpts?: SocketIOClient.ConnectOpts // socket.io-client options
cursorData?: any // any data passed to cursor
onConnect?: () => void // connect callback
onDisconnect?: () => void // disconnect callback
onError?: (reason: string) => void // error callback
preserveExternalHistory?: boolean // preserve slate-history operations form other clients
}
You need to attach the useCursor decorator to provide custom cursor data in renderLeaf function
import { useCursor } from '@slate-collaborative/client'
const decorator = useCursor(editor)
Backend
const { SocketIOConnection } = require('@slate-collaborative/backend')
const connection = new SocketIOConnection(options)
options:
{
entry: Server // or specify port to start io server
defaultValue: Node[] // default value
saveFrequency: number // frequency of onDocumentSave callback execution in ms
onAuthRequest: ( // auth callback
query: Object,
socket?: SocketIO.Socket
) => Promise<boolean> | boolean
onDocumentLoad: ( // request slate document callback
pathname: string,
query?: Object
) => Promise<Node[]> | Node[]
onDocumentSave: (pathname: string, doc: Node[]) => Promise<void> | void // save document callback
}
Contribute
You welcome to contribute!
start it ease:
yarn
yarn dev
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].