Replicated Object Notation (RON) is a format for distributed live data. RON’s primary mission is continuous data synchronization. A RON object may naturally have any number of replicas, which may synchronize in real-time or intermittently. JSON, protobuf, and many other formats implicitly assume serialization of separate state snapshots. RON has versioning and addressing metadata, so state and updates can be always pieced together. RON handles state and updates all the same: state is change and change is state.
Every RON object, every change, every version has a globally unique UUID. There is no nesting in the RON syntax. Pieces of data reference each other by UUIDs. RON itself is a regular language; its syntax is as simple as the one of ini files. Thanks to the references, RON can express any nesting and, in general, arbitrary graphs of objects.
RON UUIDs are effectively hybrid timestamps. That makes RON very suitable for expressing distributed/partial-order data structures, especially CRDTs. Thanks to that, different data pieces and versions are always mergeable.
Yet another way to look at it: RON is like the metric system but for data. The imperial system employed various usage-based units: foots, lines, furlongs, links, cables, etc. The metric system defines one unit (the meter), then derives other units from that. RON defines the immutable operation (“op”), then derives other units from that, be that data structures (arrays, maps, sets, etc) or storage/transmission units (snapshots, logs, batches, patches, etc).
Here is a simple object serialized in RON:
1 @1fLDV+biQFvtGV :lww, 2 'id' '20MF000CUS', 3 'type' 'laptop', 4 'cpu' 'i7-8850H', 5 'display' '15.6” UHD IPS multi-touch, 400nits', 6 'RAM' '16 GB DDR4 2666MHz', 7 'storage' '512 GB SSD, PCIe-NVME M.2', 8 'graphics' 'NVIDIA GeForce GTX 1050Ti 4GB', 9 @1fLDk4+biQFvtGV 10 'wlan' 'Intel 9560 802.11AC vPro', 11 'camera' 'IR & 720p HD Camera with microphone', 12 @sha3 'SfiKqD1atGU5xxv1NLp8uZbAcHQDcX~a1HVk5rQFy_nq';
Key RON principles are:
1fLDV+biQFvtGV, the second one is
1fLDV00001+biQFvtGV, the third is
1fLDV00002+biQFvtGVand so on (the notation skips incremental ids). The last two ops (#9-10 and #11) belong to a later changeset, so their ids are
lwwThat is last-write-wins, a simple key-value object. There are many other types.
1 @1fLDV00000+biQFvtGV :lww , 2 @1fLDV00001+biQFvtGV :1fLDV00000+biQFvtGV 'id' '20MF000CUS', 3 @1fLDV00002+biQFvtGV :1fLDV00001+biQFvtGV 'type' 'laptop', ...
RON’s guiding vision is swarms of mobile devices communicating over unreliable wireless networks in an untrusted environment.
For more in-depth reading, please see: