Collabs is a library for collaborative data structures (CRDTs). These are data structures that look like
Array, etc., except that they are synchronized between multiple users: when one user changes a collaborative data structure, their changes show up for every other user. You can use them to build collaborative apps along the lines of Google Docs/Sheets/Slides, shared whiteboards, etc.
npm i --save @collabs/collabs
Consider using our app template.
How it Works¶
Collabs implements hybrid op-based/state-based Conflict-free Replicated Data Types (CRDTs). These ensure that collaborators converge to a consistent state once they apply the same updates, regardless of order. We also try hard to converge to a “reasonable” result when users make concurrent changes.
You can learn more in our paper preprint. The paper also has benchmark results showing that a Collabs rich-text editor can scale to over 100 simultaneous users, and its memory usage and load/save times are comparable to Yjs.
Local-first ready: Collabs lets users work offline and sync up with collaborators later. We use CRDTs to merge changes even with arbitrary latency and concurrency.
Network- and storage-agnostic: Collabs generates updates that you must eventually deliver to all collaborators, but you are free to deliver and store these updates however you like. We also publish providers that handle this for you.
Keep your data model and type safety: A key feature of Collabs is that you can organize your collaborative state using encapsulated, strongly-typed classes.
Flexible and extensible: Collabs is a library for collaborative data structures, not just a menu of built-in options (but we provide those too). So if our data structures don’t meet your needs, you can create your own and even publish them as 3rd-party libraries: new semantics, faster algorithms, CRDT paper implementations…