GoActivityPub library

Overview

Here we have an overview of how we’ve mapped a federated link aggregator web application on top of the ActivityPub vocabulary using GoActivityPub modules, FedBOX and BrutaLinks.

The nomenclature we’re using in the BrutaLinks ecosystem might not match perfectly with what other ActivityPub services might use, so we have compiled a list of the terms and how we are using them. Most of the time we tried to match the high level concepts to the ActivityPub specification vocabulary, but not always.

Service:

A service usually refers to a server that “speaks” the ActivityPub protocol, in our case it is represented by the FedBOX backend. To improve discoverability, we have chosen to map it directly to a Service actor that can be loaded at the root path of the serice. Eg: https://federated.id

Instance

By an instance we understand the frontend application that maps the plain ActivityPub vocabulary into a specific user experience. For our case, we consider the BrutaLinks frontend to represent an instance. It maps to an Application actor on the instance. Eg: https://brutalinks.tech

This is unlike most of the federated service, which generally have both the service and the instance be the same application.

Item

An ActivityPub object that fits the types the instance can operate on. This can map to different types of objects corresponding with what the instance can operate on. BrutaLinks understands objects of type Article, Note, Video, Image, Audio, Page, Document.

For text objects BrutaLinks can use the Content/Summary properties to display, but also can make use of the Source property and render the content for various mime-types: Markdown, plain text.

Voting

As a link aggregator, the way items are listed and popularized on the instance is being governed by democratic user voting instead of strong editorial decisions. We use the Like and Dislike activities to dictate this mechanism.

Tag

A tag represents a way to group items by including hashtag keywords in its content. It maps to an object without a type.

User

A user represents a regular user of the instance. It maps to a Person actor on the service.

Moderator

A user with enhanced permissions. It reprents a normal Person actor, but which has a specific tag in it’s tag collection. This relationship does not have an exact ActivityPub equivalent, the roles and permissions are concepts implemented in BrutaLinks. See the expanded concept in the moderation document.

SysOp

Another special user with enhanced permissions. It represents the “operator” of the server, namely the role which is responsible for the good operation of the server, on both a technical and a community perspective.

Mention

A mention represents a way to include a mention of a user in the content of an item. It maps to an link type object with the type Mention. It also represents a way to include the user in the CC list of recipients.

Moderation request

A request made by a user for moderating a specific item, user or instance. It can map to an activity type object with one of the types Flag, Ignore, Block.

Moderation operation

An action taken by a moderator as a response to one, or multiple moderation requests. It can correspond to different activities: Delete, Update, Remove, Move, etc.

Sections of the link aggregator