-
automerge
A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
-
SurveyJS
Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.
-
chronofold
Chronofold is a conflict-free replicated data structure (a.k.a. CRDT) for versioned text.
I haven't yet done this but based on some research it seems to me like the core of any collaborative app today is easiest served by picking some CRDT library.
There are a couple of open-source CRDT libraries that provide both clients and servers (yjs [0] and automerge [1] are two big ones for JavaScript I'm aware of).
My basic assumption is that as long as you put all your relevant data into one of these data structures and have the CRDT library hook into a server for storing the data, you're basically done.
This may be a simplistic view of the problem though. For example I've heard people mention that CRDTs can be space inefficient so you may want/have to do periodic compaction.
[0] https://github.com/yjs/yjs
[1] https://github.com/automerge/automerge
I haven't yet done this but based on some research it seems to me like the core of any collaborative app today is easiest served by picking some CRDT library.
There are a couple of open-source CRDT libraries that provide both clients and servers (yjs [0] and automerge [1] are two big ones for JavaScript I'm aware of).
My basic assumption is that as long as you put all your relevant data into one of these data structures and have the CRDT library hook into a server for storing the data, you're basically done.
This may be a simplistic view of the problem though. For example I've heard people mention that CRDTs can be space inefficient so you may want/have to do periodic compaction.
[0] https://github.com/yjs/yjs
[1] https://github.com/automerge/automerge
If this [0] is what you're talking about, at the moment yjs and automerge are significantly more full-featured and used by many major companies.
[0] https://github.com/dkellner/chronofold
At FastComments we store every change as an event, which can either be pushed or polled. Clients subscribe, and poll on reconnect.
Also, integrations use polling: https://github.com/FastComments/fastcomments-integrations/tr...
The integrations work kind of like DB slave replication. They do an initial sync and then maintain state via the event stream.
Related posts
-
Show HN: Collaborate on your YC Application with CRDT-powered forms
-
Wormholers, what can CCP and wormholers do to improve J-Space?
-
How does Google docs send the changes done by other users in real-time?
-
Show HN: Nostr-CRDT – real-time collaborative apps over Nostr
-
Yjs: Shared data types for building collaborative software