Skip to Content
DocsTutorialComposing CRDTs

Composing CRDTs

In Loro, you can build complex data structures using basic CRDTs such as List, MovableList, Map and Tree. These containers can include sub-containers, which in turn can contain more sub-containers, allowing for the composition of intricate data structures.

It’s important to note that documents in Loro must adhere to a tree structure. This means that while a parent can have multiple children, each child is restricted to only one parent. Therefore, the document forms a tree rather than a graph (like a DAG).

By leveraging these fundamental CRDTs, you can effectively model the states and the updates of documents that conform to the JSON schema.

const = new (); const = .("map"); let = 0; // Events from a child are propagated to all ancestor nodes. .(() => { .(); ++; }); // Create a sub container for map // { map: { list: [] } } const = .("list", new ()); .(0); .(1); // Create a sub container for list // { map: { list: [0, 1, LoroText] } } const = .(2, new ()); (.()).({ : { : [0, 1, ""] } }); { // Commit will trigger the event, because list is a sub container of map .(); await new (() => (, 1)); ().(1); } .(0, "Hello, "); .(7, "World!"); (.()).({ : { : [0, 1, "Hello, World!"] } }); { // Commit will trigger the event, because text is a descendant of map .(); await new (() => (, 1)); ().(2); }
Last updated on