TypeScript CRDT

Open-source TypeScript projects categorized as CRDT | Edit details

Top 8 TypeScript CRDT Projects

  • GitHub repo FluidFramework

    Library for building distributed, real-time collaborative web applications

    Project mention: Woe be onto you for using a WebSocket | news.ycombinator.com | 2021-12-22

    Full disclosure I work at MSFT and on the fluid framework.

    If you are interested in this you may also be interested in the fluid framework, https://github.com/microsoft/FluidFramework

    We use websockets and solve a lot of the state management problem called out here by keeping very little state on the server itself. The primary thing on server is a monotonically increasing integer we use to stamp messages, this gives us total order broadcast which we then build upon: https://en.m.wikipedia.org/wiki/Atomic_broadcast

    Here are some code pointers if you want to take a look:

    The map package is a decent place to look for how we leverage total order broadcast to keep clients in sync in our distributed data structures:

  • GitHub repo SyncedStore

    SyncedStore CRDT is an easy-to-use library for building live, collaborative applications that sync automatically.

    Project mention: Show HN: SyncedStore CRDT – build multiplayer collaborative apps for React / Vue | news.ycombinator.com | 2021-12-08

    Hi! Great questions :)

    First of all, SyncedStore does not implement any CRDT algorithms. Credits for this go to Yjs [1] (and its author Kevin), which it uses as underlying CRDT.

    Yjs and Automerge are (afaik) the two most commonly used CRDT implementations. Both have their pros and cons, but Yjs has focused a lot on performance [2].

    Automerge has a bit friendlier "Immer style" [3] API. I'm not too familiar with @localfirst/state, but it seems to add a Redux style API on top of Automerge.

    My approach with SyncedStore was really to provide an API on top of Yjs that's as simple as possible to use in React / Vue / Svelte or plain JS app. I.e.: only use a single React Hook to observe changes, and use regular Javascript assigments to update values. The API is inspired mostly by Reactive Programming libraries such as MobX [4] (from the same author as Immer).

    Hope you're still following along :) Maybe it helps to compare the TODO-MVC applications, as both SyncedStore (https://github.com/YousefED/SyncedStore/tree/main/examples) and @localfirst/state (https://github.com/local-first-web/state/tree/main/examples/...) have implemented these as examples!

    [1]: https://github.com/yjs/yjs

  • Scout APM

    Less time debugging, more time building. Scout APM allows you to find and fix performance issues with no hassle. Now with error monitoring and external services monitoring, Scout is a developer's best friend when it comes to application development.

  • GitHub repo state

    A Redux-based state container for local-first software, offering seamless synchronization using Automerge CRDTs. (Formerly known as 🐟 Cevitxe). (by local-first-web)

    Project mention: Show HN: SyncedStore CRDT – build multiplayer collaborative apps for React / Vue | news.ycombinator.com | 2021-12-08

    Hi! Great questions :)

    First of all, SyncedStore does not implement any CRDT algorithms. Credits for this go to Yjs [1] (and its author Kevin), which it uses as underlying CRDT.

    Yjs and Automerge are (afaik) the two most commonly used CRDT implementations. Both have their pros and cons, but Yjs has focused a lot on performance [2].

    Automerge has a bit friendlier "Immer style" [3] API. I'm not too familiar with @localfirst/state, but it seems to add a Redux style API on top of Automerge.

    My approach with SyncedStore was really to provide an API on top of Yjs that's as simple as possible to use in React / Vue / Svelte or plain JS app. I.e.: only use a single React Hook to observe changes, and use regular Javascript assigments to update values. The API is inspired mostly by Reactive Programming libraries such as MobX [4] (from the same author as Immer).

    Hope you're still following along :) Maybe it helps to compare the TODO-MVC applications, as both SyncedStore (https://github.com/YousefED/SyncedStore/tree/main/examples) and @localfirst/state (https://github.com/local-first-web/state/tree/main/examples/...) have implemented these as examples!

    [1]: https://github.com/yjs/yjs

  • GitHub repo hyperhyperspace-core

    A library to create p2p applications, using the browser as a full peer.

    Project mention: AWS is playing chess, Cloudflare is playing Go | news.ycombinator.com | 2021-10-18

    I'm thinking there's an interesting parallel between my browser-based p2p project [1] and cloudflare workers / DurableObjects. Instead of DurableObjects, we got HashedObjects [2], and instead of workers running on an edge network somewhere, we got in-browser p2p nodes running a browser-to-browser mesh network.

    [1] Hyper Hyper Space: https://www.hyperhyperspace.org

  • GitHub repo dotted-logootsplit

    A delta-state block-wise sequence CRDT

    Project mention: 5000x Faster CRDTs: An Adventure in Optimization | news.ycombinator.com | 2021-07-31

    Yes, xray was abandoned and teletype is written in JS.

    I understand your point and as a researcher and engineer I know your feeling. I took some cautions by using "Some optimizations". I value engineering as much as research and I'm bothered when I heard any side telling the other side that their work is worthless. Your work and the work of Kevin Jahns are very valuable and could improve the way that researchers and engineers do benchmarks.

    This is still hard for me to determine when position-based list CRDT (Logoot, LogootSPlit, ...) are better than tombstone-based list CRDT (RGA, RgaSplit, Yata, ...). It could be worth to assess that.

    3 year ago I started an update of LogootSplit. The new CRDT is named Dotted LogootSplit [1] and enables delta-synchronizations. The work is not finished: I had other priorities such as writing my thesis... I have to perform some benchmark. However I'm more interested in the hypothetical advantages of Dotted LogootSplit regarding synchronization over unreliable networks. From an engineering point-of-view, I'm using a partially-persistent-capable AVL tree [2]. Eventually I would like to switch to a partially-persistent-capable b-tree. Unfortunately writing a paper is very time consuming, and time is missing.

    I still stick with JS/TS because in my viewpoint Wasm is not mature yet. Ideally, I would like to use a language that compiles both to JS and Wasm. Several years ago I welcomed Rust with a lot of enthusiasm. Now I'm doubtful about Rust due to the inherent complexity of the language.

    [1] https://github.com/coast-team/dotted-logootsplit/tree/dev

  • GitHub repo Matrix-CRDT

    Use Matrix as a backend for local-first applications with the Matrix-CRDT Yjs provider.

    Project mention: Matrix-CRDT: Use Matrix as a backend for local-first applications with the Matrix-CRDT Yjs provider. | reddit.com/r/selfhosted | 2022-01-18
  • GitHub repo osmosis-js

    JS reference implementation of Osmosis, a JSON data store with peer-to-peer background sync

  • OPS

    OPS - Build and Run Open Source Unikernels. Quickly and easily build and deploy open source unikernels in tens of seconds. Deploy in any language to any cloud.

  • GitHub repo crdt-woot

    Implementation of collaborative editing algorithm CRDT WOOT.

    Project mention: Collaborative Editing Using CRDT WOOT | news.ycombinator.com | 2021-10-30

    Hi, I would like to share this collaborative editor I have created using the CRDT WOOT algorithm as described in the paper Data Consistency for P2P Collaborative Editing. You can try it here. (I added some visualisation of what happens in the algorithm, which is the array of value above.

    https://crdt-woot.herokuapp.com/

    It's more of a proof of concept, which would need some more improvements in order to be production ready.

NOTE: The open source projects on this list are ordered by number of github stars. The number of mentions indicates repo mentiontions in the last 12 Months or since we started tracking (Dec 2020). The latest post mention was on 2022-01-18.

TypeScript CRDT related posts

Index

What are some of the best open-source CRDT projects in TypeScript? This list will help you:

Project Stars
1 FluidFramework 3,633
2 SyncedStore 488
3 state 122
4 hyperhyperspace-core 110
5 dotted-logootsplit 27
6 Matrix-CRDT 26
7 osmosis-js 21
8 crdt-woot 3
Find remote jobs at our new job board 99remotejobs.com. There are 29 new remote jobs listed recently.
Are you hiring? Post a new remote job listing for free.
Static code analysis for 29 languages.
Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.
www.sonarqube.org