2 unstable releases

0.9.0 Mar 26, 2024
0.2.0 Aug 7, 2023

#533 in Data structures

Download history 8/week @ 2024-01-16 17/week @ 2024-01-23 7/week @ 2024-02-20 29/week @ 2024-02-27 2/week @ 2024-03-05 154/week @ 2024-03-26 45/week @ 2024-04-02

199 downloads per month
Used in 10 crates (2 directly)

MIT/Apache and GPL-3.0-or-later

160KB
4K SLoC

Collaborative Objects

Collaborative objects are graphs of CRDTs.

Basic Types

The basic types that are found in radicle-cob are:

  • CollaborativeObject -- the computed object itself.
  • ObjectId -- the content-address for a single collaborative object.
  • TypeName -- the name for a collection of collaborative objects.
  • History -- the traversable history of the changes made to a single collaborative object.

CRU Interface (No Delete)

The main entry for manipulating CollaborativeObjects is by using the CRU like functions:

Storage

The storing of collaborative objects is based on a git backend. The previously mentioned functions all accept a Store as parameter. The Store itself is an accumulation of different storage capabilities:

Resource

The create and update functions take a Resource. It represents the type of resource the collaborative objects are relating to, for example a software project.

History Traversal

The History of a CollaborativeObject -- accessed via CollaborativeObject::history -- has a method History::traverse which provides a way of inspecting each Entry and building up a final value.

This traversal is also the point at which the Entry::author and Entry::resource can be retrieved to apply any kind of filtering logic. For example, a specific author's change may be egregious, spouting terrible libel about Radicle. It is at this point that the actor's change can be filtered out from the final product of the traversal.

Dependencies

~22MB
~494K SLoC