Parts of a Fediverse application
The design proposed here is about separating concerns, and how stuff is stored. In this part, I want to discuss where what is.
Part | What is stored |
---|---|
cattle_grid | cryptographic identities |
bovine_herd | Own actors, inbox resolution table. Probably a cache for remote objects / actors. The stuff collected here is needed to communicate with other Fediverse servers. This dataset includes the private keys needed to make signed HTTP requests |
bovine_timeline | The ActivityPub objects by the user. The remote objects that are considered part of the user's dataset. This should be the entire dataset a user will want to take with them when moving instances, so for example all private messages and their replies. There are probably some caveats here, as the followers / following collections will be migrated by different means, see FEP-7628 |
Device Gateway | A list of devices, and their state, to e.g. keep what has been read synchronized. Probably also the backlog of stuff to send to each device (parts can be dropped if read on another device). As this is not build yet, it will require more planning |
Device 1/X | The data necessary to work with |
Some of these choices lead to some duplicated work. The worst case are actor updates, that have to be handled by
- cattle_grid to check if a cryptographic identifier was updated
- bovine_herd to update an inbox
- bovine_herd to update the cache
- bovine_timeline to copy the stored copy
On the flip side certain activities such as Announce
or Like
only have side effects in bovine_timeline.