<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij" -->

---
title: What distributed systems and end-to-end encrypted apps...
description: CRDTs (Conflict-free Replicated Data Types) let distributed peers merge edits without a central server, and almost all CRDT libraries except Yjs are written in...
canonical: https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: What distributed systems and end-to-end encrypted apps have in common? CRDTs and Rust! | daily.dev
og:description: CRDTs (Conflict-free Replicated Data Types) let distributed peers merge edits without a central server, and almost all CRDT libraries except Yjs are written in...
og:url: https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij
og:image: https://api.daily.dev/og/posts/AAQShjiIj.png
og:image:alt: What distributed systems and end-to-end encrypted apps have in common? CRDTs and Rust!
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# What distributed systems and end-to-end encrypted apps have in common? CRDTs and Rust!

**[Sylvain Kerkour](https://daily.dev/sources/kerkour)** · 8 min read · 0 upvotes · 0 comments

## Summary

CRDTs (Conflict-free Replicated Data Types) let distributed peers merge edits without a central server, and almost all CRDT libraries except Yjs are written in Rust for performance and cross-platform consistency. Proton Docs uses the Yjs CRDT, Figma uses a 'not 100% true' CRDT with a central server, Fly.io's Corrosion uses cr-sqlite, and Zed uses CRDTs for collaborative editing. Rust libraries covered include Yrs (the Rust port of Yjs), Automerge, and Diamond Types, with code examples for Yrs and Automerge. Rust is favored because it compiles to WebAssembly and native bindings via UniFFI, avoiding reimplementing CRDT logic separately in JavaScript, Swift, and Kotlin.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://kerkour.com/rust-crdt-love>

## Questions this post answers

### Why are most CRDT libraries written in Rust instead of JavaScript or other languages?

Handling large histories of small updates is computationally expensive, so performance matters, and Rust can compile to WebAssembly and get native bindings via UniFFI for Android, iOS, and web from one codebase. This avoids reimplementing the same CRDT logic separately in JavaScript, Swift, and Kotlin, which risks bugs and document corruption across platforms. Signal and Proton both use this approach for secure cross-platform apps.

_Evaluating Rust for a cross-platform sync engine? daily.dev surfaces real implementation write-ups like this._

### What CRDT library does Proton Docs use for real-time collaboration?

Proton Docs, part of Proton's end-to-end encrypted office suite, uses the Yjs CRDT to enable real-time collaboration on office documents without relying on a central server. This matters for end-to-end encrypted apps because they lack a central source of truth, since data can only be decrypted by authorized peers, making CRDTs a natural fit for synchronization.

_Choosing a CRDT for an encrypted app? daily.dev tracks real production examples like Proton's setup._

### What is the difference between Yrs, Automerge, and Diamond Types as Rust CRDT libraries?

Yrs is the Rust port of Yjs, the most deployed CRDT library, benefiting from extensive real-world use and likely a simpler interface. Automerge, from the authors of the 'Local-first software' essay, emphasizes academic rigor in its design and verification but is less widely deployed. Diamond Types bills itself as 'the world's fastest CRDT' but is still focused on text editing and marked work-in-progress.

_Comparing CRDT libraries for a Rust project? daily.dev helps you weigh options like these before committing._

## Similar posts on daily.dev

- [Somtochi Onyekwere on Distributed Data Systems, Eventual Consistency and Conflict-free Replicated Data Types](https://daily.dev/posts/somtochi-onyekwere-on-distributed-data-systems-eventual-consistency-and-conflict-free-replicated-da-n0yuti8bm) · InfoQ · 0 upvotes · 0 comments
- [Building Conflux - My Own Real-time Collaboration Engine in Rust](https://daily.dev/posts/building-conflux---my-own-real-time-collaboration-engine-in-rust-swgs3mwwn) · DEV · 7 upvotes · 0 comments
- [Lies I was Told About Collaborative Editing, Part 2: Why we don't use Yjs](https://daily.dev/posts/lies-i-was-told-about-collaborative-editing-part-2-why-we-don-t-use-yjs-25ealcdwg) · Lobsters · 1 upvotes · 0 comments
- [Moving to a server-aware approach for collaboration](https://daily.dev/posts/moving-to-a-server-aware-approach-for-collaboration-5uxuuwwzi) · Make WordPress Core · 0 upvotes · 0 comments

---

Tags: [#rust](https://daily.dev/tags/rust), [#distributed-systems](https://daily.dev/tags/distributed-systems), [#encryption](https://daily.dev/tags/encryption), [#crdt](https://daily.dev/tags/crdt)

[View this post on daily.dev](https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"What distributed systems and end-to-end encrypted apps have in common? CRDTs and Rust!","url":"https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij"},"datePublished":"2026-10-28T15:59:26.467Z","dateModified":"2026-10-28T16:13:09.502Z","description":"CRDTs (Conflict-free Replicated Data Types) let distributed peers merge edits without a central server, and almost all CRDT libraries except Yjs are written in...","image":"https://media.daily.dev/image/upload/s--HRgLpUt6--/f_auto/v1722860399/public/Placeholder%2003","thumbnailUrl":"https://media.daily.dev/image/upload/s--HRgLpUt6--/f_auto/v1722860399/public/Placeholder%2003","isAccessibleForFree":true,"articleSection":"Sylvain Kerkour","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Sylvain Kerkour","logo":"https://media.daily.dev/image/upload/s--3ngWt4Yp--/f_auto,q_auto/v1786438308/logos/kerkour?_a=BAMAMicg0","url":"https://daily.dev/sources/kerkour"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"rust,distributed-systems,encryption,crdt","timeRequired":"PT8M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Sylvain Kerkour","item":"https://daily.dev/sources/kerkour"},{"@type":"ListItem","position":3,"name":"What distributed systems and end-to-end encrypted apps have in common? CRDTs and Rust!"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/what-distributed-systems-and-end-to-end-encrypted-apps-have-in-common-crdts-and-rust--aaqshjiij#faq","mainEntity":[{"@type":"Question","name":"Why are most CRDT libraries written in Rust instead of JavaScript or other languages?","acceptedAnswer":{"@type":"Answer","text":"Handling large histories of small updates is computationally expensive, so performance matters, and Rust can compile to WebAssembly and get native bindings via UniFFI for Android, iOS, and web from one codebase. This avoids reimplementing the same CRDT logic separately in JavaScript, Swift, and Kotlin, which risks bugs and document corruption across platforms. Signal and Proton both use this approach for secure cross-platform apps. Evaluating Rust for a cross-platform sync engine? daily.dev surfaces real implementation write-ups like this."}},{"@type":"Question","name":"What CRDT library does Proton Docs use for real-time collaboration?","acceptedAnswer":{"@type":"Answer","text":"Proton Docs, part of Proton's end-to-end encrypted office suite, uses the Yjs CRDT to enable real-time collaboration on office documents without relying on a central server. This matters for end-to-end encrypted apps because they lack a central source of truth, since data can only be decrypted by authorized peers, making CRDTs a natural fit for synchronization. Choosing a CRDT for an encrypted app? daily.dev tracks real production examples like Proton's setup."}},{"@type":"Question","name":"What is the difference between Yrs, Automerge, and Diamond Types as Rust CRDT libraries?","acceptedAnswer":{"@type":"Answer","text":"Yrs is the Rust port of Yjs, the most deployed CRDT library, benefiting from extensive real-world use and likely a simpler interface. Automerge, from the authors of the 'Local-first software' essay, emphasizes academic rigor in its design and verification but is less widely deployed. Diamond Types bills itself as 'the world's fastest CRDT' but is still focused on text editing and marked work-in-progress. Comparing CRDT libraries for a Rust project? daily.dev helps you weigh options like these before committing."}}]}
```

