July 16, 2024

New Features for ActivityPub.Academy

The Mastodon mascot wearing a university gown

Last year, I released ActivityPub.Academy, a modified Mastodon instance that allows you to study the ActivityPub protocol in real life. With just two clicks you can create a fully functioning Mastodon account and interact with other Fediverse instances, such as following other accounts, posting messages, and liking other posts. On the protocol level, these interactions are turned into activities. They are usually invisible to an end user, but on ActivityPub.Academy, the activities are shown in real-time in the Activity Log. There, you can inspect the activities in detail, who sent them and where they were sent to. You can also open them in the Activity Explorer and navigate the linked data structures that make up the ActivityPub data. (To learn more about this, check out the original announcement post.)

I have used the Academy to explore various aspects of the ActivityPub protocol and have documented this in the Understanding ActivityPub series. During this series, I sometimes came to the limit of what the Academy can do, especially when it comes to features that Mastodon does not support natively. That’s why today, the Academy received three new features.

In the Activity Workshop, you can craft now your own activities and send them to any inbox. Whereas before you could only send activities that Mastodon supports natively, now you can send arbitrary activities. For example, you can send a Dislike activity to a Lemmy community, a View activity to a Peertube instance, or an emoji reaction to a post on a Firefish instance, and see how those instances react.

A screenshot of the new Activity Workshop

The workshop allows you to craft your own activities and sent them to arbitrary inboxes

I have found that the best way to craft these activities is not by writing them from scratch, but by taking activities that were sent to the Academy as a template. That’s why every activity in the Activity Log has a button that allows to open it in the Workshop, modify it, and send it to someone else.

A screenshot of the Open In Workshop link

Every Activity has a link to open it in the Workshop

In the WebFinger Forge, you can change the response that the Academy sends when someone queries the .well-known/webfinger endpoint for your actor. For example, you can change the WebFinger response of your Academy actor to point to a different actor id and study how this affects the interactions from other instances.

A screenshot of the new WebFinger Forge

In the WebFinger Forge, you can control what ActivityPub Academy responds on the WebFinger endpoint

Finally, you can now change the type of your actor on the profile page. By default, an actor is of type Person, but you can change it to Service, Group, Organization, or Application. Some Fediverse services send different activities to different types of actors. Lemmy, for instance, interprets a group actor as a community. By changing your actors’ type to Group, you can pretend that your actor is in fact a community and use this to study Lemmy’s implementation of the ActivityPub protocol.

A screenshot of the Actor Type dropdown

Set the actor type on the profile page

Taken together, these new features greatly expand the set of Fediverse services that can effectively be analyzed with ActivityPub Academy. They are now live on ActivityPub.Academy for you to try out. If you have any feedback or comments, send me a message on @crepels@mastodon.social.

(I have been sitting on this change for several months now. Originally, I intended to write another blog post where I use these new features to study further ActivityPub services. Unfortunately, I don’t have the time to do this right now, and it’s unclear when this changes. I still hope that these features are useful though, and maybe someone else can use them for their own investigations and publish a blog post about it. If you do, please let me know!)

—Written by Sebastian Jambor. Follow me on Mastodon @crepels@mastodon.social for updates on new blog posts.