ActivityPub: Let's try to understand the Like Activity for 3 actors

Continuing the discussion from ActivityPub protocol: Rich message-oriented vs. CRUD-based interop?:

I also started a new topic as I want to take us on a tangent. While @aschrijver focuses on the semantics, I want to focus on the pure technical side. I actually want to make the bold statement: We don’t understand how to federate the Like Activity. This is probably too bold, a more careful formulation would be: There is no agreed upon standard on how to federate the Like activity.

Mean spirited people, i.e. people that don’t like Likes, might claim that the effort to properly federate the Like activity is not justified. As this is the simplest activity to federate I disagree.

Federation for a note

Let’s review how federation work for a note:


The picture stays the same for an Update or Delete. It is clear that Alice is the one who sends activities related to her note. There is little ambiguity on the direction of the arrows, information on the Note should always pass from Alice to either Bob or Claire.

Federation for a Like

Let’s say Bob likes Alice’s Note and sends her a Like activity. This is still pretty clear what happens. Now how can we let Clair know about it? I illustrate the two options below


Mastodon’s answer is not to federate Like activities. Friendica federates Likes, but I so far could not determine what they expect to happen with it. The ActivityPub Specification, tells us to add the Like to a like collection. Unfortunately, this is an object that exists at most on Alice’s server, and probably was not shared with Claire.

Our goal here is to provide Claire with the information on Likes to Alice’s note. I personally see two options:

  • Claire keeps her own like collection for Alice’s note and is in charge of updating it.
  • Claire keeps a cached copy of Alice’s like collection. This means Alice is the only authority for the like collection of her Note.

Are there more options? Which one do we want to use? Is either option already implemented somewhere? I’m no expert on communication protocols, so I don’t know if this problem is discussed somewhere. I’m not even sure what the advantages/disadvantages are of either solution.

The main take away for me from all this: I’m not convinced we understand yet, how to properly federate activities.