gritzko / librdx

Replicated Data eXchange format C lib
35 stars 0 forks source link

LibRDX: Replicated Data eXchange format

Today's popular data formats are either "one-way" or "RPC". "One-way" is something like CSV or JSON. I can dump my data into such format, send it to somebody, never see it again. If they send me back my JSON with some changes, that might be a problem. "RPC" formats are likes of Protobuf, Capnproto, etc. Those are "I tell you, you tell me" formats to exchange pre-agreed messages.

RDX is a versioned format for data synchronization. It is designed to send around data patches.

RDX is the greatest-common-denominator data format. Systems should be able to import/export data from/to RDX, be it the entire state or separate patches.

RDX has a formal mutation semantics. In other words, the spec says exactly what the result should be if we merge A and B.

RDX is a very algebraic data format on the inside. First, it employs CRDTs, Conflict-free Replicated Data Types. That means, any two versions of an object can merge deterministically. Second, its basic constructs are neatly orthogonal and arbitrarily composable. For example, {"a":"map"} is not a primitive, it is {"a","set"} "of":"tuples". Tuples "can":"be":"standalone", or they <"can":"nest">:<"in":"other">:"tuples" or [{"any"}, <"other":"containers">].

RDX has a text variant RDX-JDR "JSON Done Right". There is also a binary variant RDX-TLV which is the most straightforward Type-Length-Value. Variants correspond 1:1.

librdx is a low-level RDX system library implemented in ABC C.