Hey everyone! Happy new year and happy new blog post day! @tsyesika has made a prototype of Mandy: an implementation of ActivityPub built on Goblins. Since ActivityPub and Goblins are both actor-based, they fit together quite nicely.
Iāve had some time today to go through this post in more detail and itās very cool stuff!
Converting nested objects in HTTP requests to their corresponding Goblins actors is very cool, and itās clear to me now why this has motivated the work on sleepy actors. I imagine youād start to blow up the memory usage pretty quickly if you were to do this while keeping all actors in memory!
I havenāt spent as much time understanding the ActivityPub protocol as I would like, but with the Outbox example given in the blog post Iām curious how this might interact with existing fediverse software. Reading the AP spec, itās clear that the typical case is supposed to be that servers send messages posted to an actorās Outbox to the Inboxes of other actors. But reading directly from the actorās Outbox is also supported, and the spec says:
The outbox stream contains activities the user has published, subject to the ability of the requestor to retrieve the activity (that is, the contents of the outbox are filtered by the permissions of the person reading it).
Making the Outbox object return only public posts seems relatively straightforward, but filtering responses depending on whoās asking does not (and is of course more ACL than ocap). In practice, how much of a problem would it be for existing fediverse software if e.g. GETing from my Outbox returned only public posts and private posts were only delivered via federation to Inboxes?
Also, will you be releasing the full code of the prototype? Iād be interested in digging in some more.
Since this blog post is turning out to be popular, Iāve asked @tsyesika to provide some instructions so others can run it. We might move the prototype to a dedicated repo, as well. Weāll update here if/when we do that.
I have pushed to its own repo and added a README: spritely/mandy - Codeberg.org (please remember itās just a prototype I built, itās not fully functional or intended for use).
If Iām understanding things right (and please, Spritely folks, correct me if Iām wrong!)⦠I think itās a bit of both.
Itās partly demonstrating what an AP server written in Goblins might look like (and that ActivityPub maps pretty well into an actor-model system like Goblins) and partly showing off what it can look like to bridge HTTP requests to Goblins actors.
You couldnāt send messages from an AP client to (the current version of) goblin-chat without at least some extra logic, because goblin-chat uses its own bespoke protocol on top of OCapN and doesnāt have knowledge of the ActivityStreams objects used in ActivityPub. But I think you could bridge it if you wanted to; the outbox could post the contents of an incoming Note into a goblin-chat room instead of federating it further via ActivityPub, for example.