CRDTs: The Hard Parts [video]
See also automerge [1], discussed at the end.  They are currently working on performance improvements [2].  Quoting from the repo, &quot;automerge is a library of data structures for building collaborative applications in JavaScript:<p>* You can have a copy of the application state locally on several devices (which may belong to the same user, or to different users). Each user can independently update the application state on their local device, even while offline, and save the state to local disk.<p>* (Similar to git, which allows you to edit files and commit changes offline.)<p>* When a network connection is available, Automerge figures out which changes need to be synced from one device to another, and brings them into the same state.  (Similar to git, which lets you push your own changes, and pull changes from other developers, when you are online.)<p>* If the state was changed concurrently on different devices, Automerge automatically merges the changes together cleanly, so that everybody ends up in the same state, and no changes are lost. (Different from git: no merge conflicts to resolve!)&quot;<p>[1] <a href="https:&#x2F;&#x2F;github.com&#x2F;automerge&#x2F;automerge" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;automerge&#x2F;automerge</a>
[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;automerge&#x2F;automerge&#x2F;pull&#x2F;253" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;automerge&#x2F;automerge&#x2F;pull&#x2F;253</a>