Awesome
Awesome CRDT
A collection of awesome CRDT resources
Know Before You Go
Set Theory
Order Theory
- Partially ordered set (Wikipedia)
- Total Order (Wikipedia)
- Causal Ordering
- Semilattice (Wikipedia)
- A CRDT Primer Part I: Defanging Order Theory
Clocks
- Logical Clock (Wikipedia)
- Lamport Timestamps (Wikipedia)
- Assigning Lamport & Vector Timestamps
- Vector Clock (Wikipedia)
- Version Vector (Wikipedia)
- Why Logical Clocks are Easy
Papers
Foundations
- Achieving Convergence, Causality-Preservation, and Intention-Preservation in Real-Time Cooperative Editing Systems - Sun et. al. (1998)
- Designing a commutative replicated data type - Marc Shapiro et. al. (2007)
- CRDTs: Consistency without concurrency control - Mihai Letia et. al. (2009)
- A commutative replicated data type for cooperative editing - Nuno Preguiça (2009)
- A comprehensive study of Convergent and Commutative Replicated Data Types - Marc Shapiro et. al. (2011)
- Convergent and Commutative Replicated Data Types - Marc Shapiro et. al. (2011)
- Conflict-free Replicated Data Types - Marc Shapiro et. al. (2011)
- Pure Operation-Based Replicated Data Types - Carlos Baquero et. al. (2017)
- Evaluating CRDTs for Real-time Document Editing - Mehdi Ahmed-Nacer et. al.
- Large-Scale Geo-Replicated Conflict-free Replicated Data Types - Carlos Bartolomeu
- Pure Operation-Based Replicated Data Types - Carlos Baquero et. al. (2017)
- Consistency, Availability, and Convergence - Mahajan et. al.
Clocks
- Time, Clocks, and the Ordering of Events in a Distributed System - Leslie Lamport (1978)
- Virtual Time and Global States of Distributed Systems - Friedemann Mattern (1988)
- Timestamps in Message-Passing Systems That Preserve the Partial Ordering - Colin Fidge (1988)
- Dotted Version Vectors: Efficient Causality Tracking for Distributed Key-Value Stores - Carlos Baquero et. al.
Applications
- WOOT: Real time group editors without Operational transformation - Gérald Oster et. al. (2005)
- RGA, RHT, RFA: Replicated abstract data types: Building blocks for collaborative applications - Hyun-Gul Roh (2011)
- Logoot: A Scalable Optimistic Replication Algorithm for Collaborative Editing on P2P Networks - Weiss et. al. (2009)
- TreeDoc: A commutative replicated data type for cooperative editing (2009)
- SwiftCloud: Fault-Tolerant Geo-Replication Integrated all the Way to the Client Machine - Marek Zawirski et. al. (2013)
- LSEQ: an Adaptive Structure for Sequences in Distributed Collaborative Editing - Brice Nédelec et. al. (2013)
- WOOTR: Abstract unordered and ordered trees CRDT - Stéphane Martin et. al. (2011)
- Logoot-Undo: Distributed Collaborative Editing System on P2P Networks - Stéphane Weiss et. al.
- Yjs: A Framework for Near Real-Time P2P Shared Editing on Arbitrary Data Types (2015)
- Causal trees: towards real-time read-write hypertext - Victor Grishchenko
- RGASplit: High Responsiveness for Group Editing CRDTs
- COPS: Don’t Settle for Eventual: Scalable Causal Consistency for Wide-Area Storage with COPS
Clocks
Proof and Verification
- A framework for verifying Conflict-free Replicated Data Types (CRDTs) - Dominic Mulligan (2017)
- Verifying Strong Eventual Consistency in Distributed Systems - VICTOR B. F. GOMES (2017)
- On Verifying Causal Consistency - Bouajjani et. al. (2017)
Blogs
- A Look at Conflict-Free Replicated Data Types
- Distributed data structures with Coq
- Towards a unified theory of Operational Transformation and CRDT
- Working code for Operational Transformation/CRDT hybrid
- Convergent Replicated Data Types
- Logs and docs
- CRDTs explained - supercharge your serverless with CRDTs at the Edge (Russell Sullivan)
- Good Spirits: Syncing Data Statelessly
- Delta State Replicated Data Types
- Datanet: a New CRDT Database that Let's You Do Bad Bad Things to Distributed Data
- Data Laced with History: Causal Trees & Operational CRDTs
- Serverless collaboration - (03/03/2019)
- Code together in real time with Teletype for Atom - (15/11/2017)
- A CRDT Primer Part II: Convergent CRDTs
Skepticism
- Real Differences between OT and CRDT for Co-Editors
- Why CRDT didn't work out as well for collaborative editing xi-editor
Videos
- CRDTs: The Hard Parts - Martin Kleppman
- Strong Eventual Consistency and Conflict-free Replicated Data Types - Marc Shapiro (ThisByGustav)
- CRDTs in Practice - Marc Shapiro & Nuno Preguiça (Erlang Solutions)
- Automerge: Making servers optional for real-time collaboration - Martin Kleppmann (J On The Beach 2018)
- "Transactions: myths, surprises and opportunities" by Martin Kleppmann (Strange Loop)
- "CRDTs Illustrated" by Arnout Engelen (Strange Loop)
- Dmitry Ivanov & Nami Naserazad - Practical Demystification of CRDT (Lambda Days 2016) (Erlang Solutions)
- ElixirConf 2015 - CRDT: Datatype for the Apocalypse by Alexander Songe (Confreaks)
- Using Erlang, Riak and the ORSWOT CRDT at bet365 (...) - Michael Owen - Erlang User Conference 2015 (Erlang Solutions)
- Kappa Day - Practical demystification of CRDT - Tomtom (Jug Łódź)
- "Distributed, Eventually Consistent Computations" by Christopher Meiklejohn (Strange Loop)
- Lightning Talk: Just-Right Consistency: Closing The CAP Gap - Christopher Meiklejohn (Erlang Solutions)
- Tutorial: How to build an Collaborative Editing Application with IPFS using CRDT (IPFS)
- WOOT: an algorithm for concurrency and collaborative authoring! (Julien Genestoux)
- CRDTs for Non Academics (Russell Sullivan)
- Datanet Website Slideshow
Playlists
Implementations
Data Structures
- KSeq: A continuous sequence CRDT based on Logoot/LSEQ
- LSEQ: CRDT for sequences
- LSEQTree: A data structure for distributed arrays using the LSeq allocation strategy
- LSEQArray: aims to provide an implementation of a CRDT-based array using the allocation strategy LSEQ
- Automerge: A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically
- Yjs: framework for offline-first p2p shared editing on structured data like text, richtext, json, or XML
- RON: Replicated Object Notation, a distributed live data format (implementations in C++, Elixir, Go, Haskell, Java, JavaScript, Rust)
- teletype-crdt: The string-wise sequence CRDT powering peer-to-peer collaborative editing in Teletype for Atom
- Peer CRDT: An extensible collection of operation-based CRDTs that are meant to work over a p2p network
- Distributed Data Structures in Coq
- Akka CRDT: An Eventually Consistent REST/JSON database using CRDTs, Akka Cluster and LevelDB
- Akka Distributed Data
- wurmloch-crdt: Experimental implementations of conflict-free replicated data types (CRDTs) for the JVM
Toy Implementations
- Companion to the article "Data Laced with History: Causal Trees & Operational CRDTs"
- Meangirls: Convergent Replicated Data Types
Editors
- SandEdit: a project aiming to provide a distributed collaborative editor based on Conflict-free Replicated Data Type
- Teletype for Atom: Share your workspace with team members and collaborate on code in real time in Atom
- Xi Editor: an attempt to build a high quality text editor, using modern software engineering techniques
- IPFS CRDT Shared Editing: Decentralized Real-Time Collaborative Documents - Conflict-free editing in the browser using js-IPFS and CRDTs
- Shared editing demo using IPFS and CRDT
- Co: collaborative text editor, uses woot. front end in Elm, back in node
- woot-collaborative-editor: A real time collaboration toy project based on WOOT. Implemented with node.js and ws
- cljs-collab: Browser-to-browser collaborative editor
- Xray: An experimental next-generation Electron-based text editor
Databases and Logs
- Concordant
- AntidoteDB
- Riak KV
- Hypermerge: combines Automerge, a CRDT, with hypercore, a distributed append-only log
- Roshi: a large-scale CRDT set implementation for timestamped events
- Swarm: JavaScript replicated model (M of MVC) library
- Datanet: an open source CRDT based data synchronization system
- Kuhirō: The Near Cloud