Kevin Jahns
Overview, scope, challenges
Desirable Properties:
Tracking changes example:
Yjs for collaborative application state
Challenges
Observation
Compressing Changes
A
client="Bob"
clock=0
B
client="Bob"
clock=1
C
client="Bob"
clock=2
ABC
client="Bob"
clock=0
Compressing Changes
A
client="Bob"
clock=0
B
client="Bob"
clock=1
C
client="Bob"
clock=2
ABC
client="Bob"
clock=0
len = 3
deleted=true
client="Bob"
clock=0
Compressing Changes
More details: Kevin's Blog
A
client="Bob"
clock=0
B
client="Bob"
clock=1
C
client="Bob"
clock=2
ABC
client="Bob"
clock=0
len = 3
deleted=true
client="Bob"
clock=0
[B4] Real-world editing trace
Results
Yjs | Automerge | Automerge (performance branch) | delta-crdts | |
---|---|---|---|---|
Time to apply changes | 6 s | 490 s | 750s | 20134 s |
Encoded document | 0.160 MB | 84 MB | 0.296 MB | 7.9 MB |
Memory usage | 3.2MB | 1.1 GB | ~ | 34.4 MB |
Loading to memory | 0.086 s | 38 s | 208 s | 52 s |
[B4x100] Real-world editing trace
Results
Yjs | |
---|---|
Time to apply changes | 167 s |
Encoded document | 16 MB |
Memory usage | 466 MB |
Loading to memory | 2.2 s |
Offline, p2p over WebRTC, collaboration with change-tracking support!
Live Demo with a large Audience: FOSDEM
Applications that use Yjs
Full overview: docs.yjs.dev
Editor Support
Connection Provider
Database Provider
Application State
twitter.com/kevin_jahns