Crates.io | ywasm |
lib.rs | ywasm |
version | 0.19.2 |
source | src |
created_at | 2021-10-14 09:10:38.030285 |
updated_at | 2024-07-17 08:53:24.420762 |
description | High performance implementation of the Yjs CRDT |
homepage | https://github.com/yjs/y-crdt/ |
repository | https://github.com/yjs/y-crdt/ |
max_upload_size | |
id | 464841 |
size | 224,363 |
This project is a wrapper around Yrs and targets Web Assembly bindings.
It's a library used on collaborative document editing using Conflict-free Replicated Data Types. This enables to provide a shared document editing experience on a client devices without explicit requirement for hosting a single server - CRDTs can resolve potential update conflicts on their own with no central authority - as well as provide first-class offline editing capabilities, where document replicas are modified without having connection to each other, and then synchronize automatically once such connection is enabled.
import * as Y from 'ywasm';
const doc = new Y.YDoc()
const text = doc.getText('name')
// append text to our collaborative document
text.insert(0, 'hello world', { bold: true })
// simulate update with remote peer
const remoteDoc = new Y.YDoc()
const remoteText = remoteDoc.getText('name')
// in order to exchange data with other documents
// we first need to create a state vector
const remoteSV = Y.encodeStateVector(remoteDoc)
// now compute a differential update based on remote document's state vector
const update = Y.encodeStateAsUpdate(doc, remoteSV)
// both update and state vector are serializable, we can pass them over the wire
// now apply update to a remote document
Y.applyUpdate(remoteDoc, update)
const str = remoteText.toString()
console.log(str)