Introduction to Loro

Introduction to Loro

Loro is a developer toolkit designed for building local-first software applications. It simplifies tasks such as:

  • Creating real-time and asynchronous collaborative applications, even using peer-to-peer connections
  • Enabling offline editing
  • Developing applications with built-in version control

We want to provide better DevTools to make building local-first apps easy and enjoyable. You can read our blog post to learn more about our vision.

Loro uses Conflict-free Replicated Data Types (CRDTs) to resolve parallel edits. By utilizing Loro's data types, your applications can be made collaborative and keep the editing history with low overhead.

Differences from other CRDT libraries

The table below summarizes Loro's features, which may not be present in other CRDT libraries.

Features/Important design decisionsLoroDiamond-typesYjsAutomerge
OT-like CRDTs (opens in a new tab)✅ Inventor
Peritext (opens in a new tab) rich text CRDTs✅[1]✅ Inventor
Movable Tree (opens in a new tab)❌ Inventor
Time travel✅[2]
Fugue (opens in a new tab)
JSON types
Merging elements in memory by run length encoding✅ Inventor
  • [1] Loro uses a Peritext-like algorithm to merge the concurrent edits to rich text styles. It's different from the original design but it passes all the criteria listed in the paper.
  • [2] Unlike others, Yjs requires users to store a version vector and a delete set, enabling time travel back to a specific point.
  • Fugue (opens in a new tab) is a text/list CRDTs that can minimize the chance of the interleaving anomalies.

Loro aims to be extensible with new CRDT types, maintaining high performance and ensuring ease of use.

Future Goals

We believe that a significantly improved developer experience can be achieved when working with CRDTs. This is the goal of our next development stage as we approach version 1.0. Specifically, we have several objectives in mind:

  • Stabilizing the encoding format.
  • Providing comprehensive documentation to make Loro easier to adopt.
  • Building a state management library based on CRDTs.
  • Developing DevTools to visualize and manage history.

We are developing additional experimental features that will be unveiled in the future. Stay tuned for updates!