  Many applications model their data in a general-purpose storage format such
as JSON. This data structure is modified by the application as a result of user
input. Such modifications are well understood if performed sequentially on a
single copy of the data, but if the data is replicated and modified
concurrently on multiple devices, it is unclear what the semantics should be.
In this paper we present an algorithm and formal semantics for a JSON data
structure that automatically resolves concurrent modifications such that no
updates are lost, and such that all replicas converge towards the same state (a
conflict-free replicated datatype or CRDT). It supports arbitrarily nested list
and map types, which can be modified by insertion, deletion and assignment. The
algorithm performs all merging client-side and does not depend on ordering
guarantees from the network, making it suitable for deployment on mobile
devices with poor network connectivity, in peer-to-peer networks, and in
messaging systems with end-to-end encryption.
