Shelf: easy way for recursive CRDT documents

In the past we already discussed how to build JSON-like Conflict-free Replicated Data Type [https://www.bartoszsypytkowski.com/operation-based-crdts-json-document/]. We used operation-based approach, with wide support for many operations and characteristics of a…

Deep dive into Yrs architecture

In this blog post we're going to cover the the internals and architecture behind Yrs [https://crates.io/crates/yrs] (read: wires) - a Rust port of popular Yjs [https://yjs.dev/] CRDT library used for building collaborative peer-…

CRDT optimizations

After series of 11 blogs posts about Conflict-free Replicated Data Types, it's time to wrap up. This time let's discuss various optimizations that could be applied to CRDTs working at higher scale. Other blog posts…

Pure operation-based CRDTs

In this blog post we'll continue on topic of operation-based CRDTs and focus on the optimizations and approach known as pure operation-based CRDTs [https://hal.inria.fr/hal-01287738/document]: how can we use them to…

Operation-based CRDTs: arrays (part 2)

Last time [https://www.bartoszsypytkowski.com/operation-based-crdts-arrays-1/] we were discussing how to build a Commutative Replicated Data Types operating as indexed sequences - preserving order of inserted elements - using two different data structures: Linear Sequences (LSeq) and…

Operation-based CRDTs: arrays (part 1)

In this post, we'll continue onto topic of Commutative Replicated Data Types. We already mentioned [https://www.bartoszsypytkowski.com/operation-based-crdts-registers-and-sets/#sets] how to prepare first, the most basic types of collections: sets. This…