All Projects → josephg → diamond-types

josephg / diamond-types

Licence: other
The world's fastest CRDT. WIP.

Programming Languages

rust
11053 projects
typescript
32286 projects
javascript
184084 projects - #8 most used programming language
Svelte
593 projects
CSS
56736 projects
HTML
75241 projects
shell
77523 projects

Projects that are alternatives of or similar to diamond-types

Yjs
Shared data types for building collaborative software
Stars: ✭ 5,894 (+801.22%)
Mutual labels:  crdt, collaborative-editing
slate-operational-transform
Slate Operational Transform Demo (used in production at Narration Box)
Stars: ✭ 34 (-94.8%)
Mutual labels:  crdt, collaborative-editing
Cause
An EDN-like CRDT (Causal Tree) for Clojure & ClojureScript that automatically tracks history and resolves conflicts.
Stars: ✭ 68 (-89.6%)
Mutual labels:  crdt, collaborative-editing
mute-structs
MUTE-structs is a Typescript library that provides an implementation of the LogootSplit CRDT algorithm.
Stars: ✭ 14 (-97.86%)
Mutual labels:  crdt, collaborative-editing
Teletype Crdt
String-wise sequence CRDT powering peer-to-peer collaborative editing in Teletype for Atom.
Stars: ✭ 637 (-2.6%)
Mutual labels:  crdt, collaborative-editing
Crdt Playground
Stars: ✭ 215 (-67.13%)
Mutual labels:  crdt, collaborative-editing
Slate Collaborative
slatejs collaborative plugin & microservice https://slate-collaborative.herokuapp.com/
Stars: ✭ 236 (-63.91%)
Mutual labels:  crdt, collaborative-editing
ron
Haskell implementation of RON and RON-RDT
Stars: ✭ 65 (-90.06%)
Mutual labels:  crdt
nvim
Repository for the Tandem NeoVim Plugin
Stars: ✭ 23 (-96.48%)
Mutual labels:  collaborative-editing
y-crdt
Rust port of Yjs
Stars: ✭ 854 (+30.58%)
Mutual labels:  crdt
kyte
A single-command CLI for sharing and collaboratively editing a file in real-time
Stars: ✭ 33 (-94.95%)
Mutual labels:  collaborative-editing
SyncedStore
SyncedStore CRDT is an easy-to-use library for building live, collaborative applications that sync automatically.
Stars: ✭ 1,053 (+61.01%)
Mutual labels:  crdt
dynamic-data-and-capabilities
[ARCHIVED] Dynamic Data and Capabilities in IPFS Working Group
Stars: ✭ 57 (-91.28%)
Mutual labels:  crdt
m-ld-js
m-ld Javascript engine
Stars: ✭ 18 (-97.25%)
Mutual labels:  crdt
CRDT-Redis
CRDTs implemented in Redis
Stars: ✭ 35 (-94.65%)
Mutual labels:  crdt
live-editor
Real-time collaboration editing service with integrated editor component.
Stars: ✭ 35 (-94.65%)
Mutual labels:  collaborative-editing
textbus
Textbus 是一个组件化的、数据驱动的富文本框架,支持在线协同编辑,同时也可以作为一个开箱即用的富文本编辑器,拥有非常好的扩展性和可定制性,是构建复杂富文本的不二之选!
Stars: ✭ 642 (-1.83%)
Mutual labels:  collaborative-editing
tableaunoir
An online blackboard 🖉 with fridge magnets 🌈🧲 for teaching, and making animations 🏃 and presentations ⎚.
Stars: ✭ 149 (-77.22%)
Mutual labels:  collaborative-editing
Operational-Transformation
A collection of Algorithms to Synchronise changes across multiple clients using Operational Transformation
Stars: ✭ 25 (-96.18%)
Mutual labels:  collaborative-editing
jylis
A distributed in-memory database for Conflict-free Replicated Data Types (CRDTs). 🌱 ↔️
Stars: ✭ 68 (-89.6%)
Mutual labels:  crdt

Diamond Types

Note: This code is currently a work in progress. Do not use it for anything serious yet. It is missing important features.

This repository contains a high performance rust list CRDT. This is a special data type which supports concurrent editing of lists or strings (text documents) by multiple users in a P2P network without needing a centralized server.

This project was initially created as a prototype to see how fast a well optimized CRDT could be made to go. The answer is really fast - faster than other similar libraries. This library is currently in the process of being expanded into a fast, feature rich CRDT in its own right.

For much more detail about how this library works, see:

For now there is only a list implementation here. And it only supports plain text editing). At some point I'll add other data structures (objects, tuples, etc).

As well as being lightning fast, this library is also designed to be interoperable with positional updates. This allows simple peers to interact with the data structure via operational transform.

Internals

Each client / device has a unique ID. Each character typed or deleted on each device is assigned an incrementing sequence number (starting at 0). Each character in the document can thus be uniquely identified by the tuple of (client ID, sequence number). This allows any location in the document to be uniquely named.

The internal data structures are designed to optimize two main operations:

  • Text edit to CRDT operation (Eg, "user A inserts at position 100" -> "user A seq 1000 inserts at (B, 50)")
  • CRDT operation to text edit ("user A seq 1000 inserts at (B, 50)" -> "insert at document position 100")

Much more detail on the internal data structures used is in INTERNALS.md.

LICENSE

This code is published under the ISC license.

Acknowledgements

This work has been made possible by funding from the Invisible College.

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].