Crate agde

source ·
Expand description

A general decentralized sync library supporting text and binary.


Here are some terms I use throughout the codebase and documentation.

  • resource - a piece of data (e.g. a file, online shared document). May also be used to denote the location of a resource.
  • pier - another client on the network.
  • help desire - how much a pier wants to help others in the network.
  • conversation - a exchange of some related data (e.g. MessageKind::LogCheck).
  • [den::Difference] a modification to a resource.
  • UUID - a unique identifier for a unit (e.g. conversation, Message)
  • log - internal list to compensate for inconsistencies in message arrival time.
  • storage - “versions” of the data stored by the implementor
    • current storage - the current data. The resources stored here are the ones edited by the end-user.
    • public storage - what the others think our current storage looks like. Separating these enables getting the difference between the storages. This returns what we need to send to the other piers, how to mutate the public storage to get the current storage.



  • Events are a type of message which manipulate a resource.
  • Mechanics for reading the current data from other piers after being offline for some time.
  • Checking of hashes of crate::resources.
  • Logs for crate::Manager.
  • Handling of getting and setting resources.
  • Module for handling the sync between piers.
  • Utilities for working with some datatypes used by agde.




  • The current version of this agde library.