teletype-crdt
DISCONTINUED
automerge
Our great sponsors
- Amplication - open-source Node.js backend code generator
- Appwrite - The open-source backend cloud platform
- SurveyJS - A Non-Cloud Alternative to Google Forms that has it all.
- Mergify - Updating dependencies is time-consuming.
- InfluxDB - Collect and Analyze Billions of Data Points in Real Time
- Sonar - Write Clean JavaScript Code. Always.
teletype-crdt | automerge | |
---|---|---|
3 | 44 | |
732 | 2,104 | |
- | 13.0% | |
0.0 | 9.2 | |
10 months ago | 6 days ago | |
JavaScript | JavaScript | |
MIT License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
teletype-crdt
-
5000x Faster CRDTs: An Adventure in Optimization
Cool! It'd be interesting to see those CRDT implementations added to Kevin Jahns' CRDT Benchmarks page[1]. The LogootSplit paper looks interesting. It looks like xray is abandoned, and I'm not sure about teletype. Though teletype's CRDT looks to be entirely implemented in javascript[2]? If the authors are around I'd love to see some benchmarks so we can compare approaches and learn what actually works well.
And I'm not surprised these techniques have been invented before. Realising a tree is an appropriate data structure here is a pretty obvious step if you have a mind for data structures.
To name it, I often find myself feeling defensive when people read my work and respond with a bunch of links to academic papers. Its probably totally unfair and a complete projection from my side, but I hear a voice in my head reword your comment to instead say something awful like: "Cool, but everything you did was done before. Even if they didn't make any of their work practical, usable or good they still published first and you obviously didn't do a good enough literature review if you didn't know that." And I feel an unfair defensiveness arise in me as a result that wants to find excuses to dismiss the work, even if the work might be otherwise interesting.
Its hard to compare their benchmark results because they used synthetic randomized editing traces, which always have different performance profiles than real edits for this stuff. Their own university gathered some great real world data in an earlier study. It would have been much more instructive if that data set was used here. At a glance their RAM usage looks to be about 2 orders of magnitude worse than diamond-types or yjs. And their CPU usage... ?? I can't tell because they have no tables of results. Just some hard to read charts with log scales, so you can't even really eyeball the figures. So its really hard to tell if their work ends up performance-competitive without spending a couple days getting their enterprise style java code running with a better data set. Do you think thats worth doing?
-
Atom Teletype's peer-to-peer connection
1) crdt
automerge
- Ask HN: What is new in Algorithms / Data Structures these days?
-
Best local database that works on all platforms including web?
Yes. I asked the devs about ideas for this in this ticket and got an interesting response. It's aimed towards server-side handling, but the same ideas apply to local storage as well.
- Show HN: Pg_CRDT – an experimental CRDT extension for Postgres
-
CRDTs: A Beginner's overview for building a collaborative app
There are a lot of implementations of CRDTs out there. In JavaScript, for instance, we have Y.js (https://github.com/yjs/yjs) and automerge (https://github.com/automerge/automerge). There’s also a Y.js demo (https://demos.yjs.dev/prosemirror/prosemirror.html) that allows you to play around with them and have your own collaborative app running in just a few seconds. All messages are exchange via webRTC and manages the state via CRDTs. This can be a great sandbox to understand how CRDTs work and see.
-
Evan Wallace CRDT Algorithms
Anyone unsure of what a CRDT is, this is the perfect intro: https://www.inkandswitch.com/peritext/
The two most widely used CRDT implementations (combining JSON like general purpose types and rich text editing types) are:
- Automerge https://github.com/automerge/automerge
-
Should I Move From PHP to Node/Express?
For instance, practicing "local first web" using automerge with all it's Distributed Persistence Primitives on CRDT's and Vector Clocks - i.e. when the Browser View is treated like a Database replica, essentially; or adopting a real data mapper that's giving you an API from your database Schema, using Prisma or Hasura... or even implementing a custom codegenereted one, as a babel plugin, on top of TSED and Micro-ORM.
- Maintaining Referential Integrity During Insertions And Deletions
- Muse 2.0
-
I created an Excel-like React spreadsheet with collabration support
And about conflict --as already mentioned in comments-- CRDTs is the way to go here. Automerge is an implementation you may want to look into.
- Conflict-Free Replicated Data Types (CRDT)
What are some alternatives?
yjs - Shared data types for building collaborative software
crdt-benchmarks - A collection of CRDT benchmarks
y-websocket - Websocket Connector for Yjs
crdt-woot - Implementation of collaborative editing algorithm CRDT WOOT.
FluidFramework - Library for building distributed, real-time collaborative web applications
slate-yjs - Yjs binding for Slate
SyncedStore - SyncedStore CRDT is an easy-to-use library for building live, collaborative applications that sync automatically.
y-crdt - Rust port of Yjs
rustpad - Efficient and minimal collaborative code editor, self-hosted, no database required
automerge-rs - Rust implementation of automerge [Moved to: https://github.com/automerge/automerge]
diamond-types - The world's fastest CRDT. WIP.