Using the WordPress ActivityPub plugin – what can go wrong?

First of all: this post is not directly related to events, but to the usability of the current ActivityPub implementations in WordPress.

Summary(tl;dr): Yesterday @linos spontaneously gave a good friend personal assistance in setting up ActivityPub on his WordPress site. The following article is a memory log of it. Obviously, it is only a single sample, but what happened is consistent with many of our assumptions. In short, the ActivityPub plugin and Fediverse are great, but there is still a lot of room to improve the user experience, especially for non-technical people, and there could be a lot of small features that could have a big impact in the end that nobody has thought of yet. In addition, the currently missing tombstones and account migration features may be critical for many to be satisfied with the plugin.

How this small private workshop came about

A few days ago I met an old friend I hadn’t seen in a while at a jam session and we got to talking about what’s going on in our lives. Of course, I was excited to talk about my event federation project for WordPress and my friend listened attentively. He had never heard of the Fediverse or Mastodon, he is a freelance artist with a background in architecture, specializing in design, sculpture and jewelry art. In the end he said: “I don’t do events, but I also have a WordPress site where I post my work in a sort of portfolio, so I could use that, couldn’t I? I said “for sure”. I agreed to give him a little help and we scheduled a meeting to set up ActivityPub and get things going. In return, he promised to be willing to overcome pitfalls and showed a willingness to learn about the Fediverse. And so our six hour trip started.


For me, it was a great chance to have a familiar environment to encounter problems that might arise in our evaluation workshop, so I tried to follow as many general guidelines for conducting usability studies as possible, such as not having a direct view of the tester’s computer screen and not daring to touch the machine. I started asking questions about how he got his website. Like many non-technical people, he does not host the site himself, but a close friend of his helped him a few years ago, with the initial design done by an agency that set things up. They chose a hosting provider that offered managed WordPress hosting, but as we found out, they didn’t really use those features, which typically include automatic updates of the core and plugins, and backups including automatic rollbacks in case of failures. Since the last time he asked his friend to fix something was more than a year ago, his site was quite outdated. 20 plugins were asking for updates and the core was on WordPress 6.1. But the dependencies of the ActivityPub plugin were met, so we decided to go ahead and deal with the maintenance procedure later.

First steps

“Can you now install and activate the plugin called ActivityPub”. This was easy. Then the first hurdle appeared. “What now?” “Can I see my profile?” I felt like a setup wizard should have guided him through this. I told him to look at the ActivityPub plugin settings page to get an overview. Since the plugin overview was still open, he clicked the shortcut there, but later had trouble finding the settings page again (it is a submenu in the settings menu).

The main settings page of the plugin has two tabs: Welcome and Settings (and Followers may also appear if the blog profile is enabled). The Settings tab itself didn’t get his attention until I gave him some hints on where to look. But even on the welcome page, he realized that something might not be what he wanted: 13 years ago, when he set up the site, his friend randomly chose a username for him, so the default (and already active!) fediverse handle was <ugly-username>@<lastname>.site. “Hmm, maybe I should change the username.” It took him a while to figure out that the WordPress core does not allow usernames to be changed. “But isn’t there a way?”. “I think there are plugins to do that”, I replied. He understood the underlying meaning in my tone and asked: “Is there a risk of things breaking anything?” and could not guarantee that. Then he asked if he could just create a new user in WordPress and change the author to the new one: “does that have any drawbacks?”.

At this point, I was no longer sure if I was missing something and might give the wrong answer. My guess was that the only thing that might bother him would be the information in the Fediverse profile about how long the user has been there. It would not be “I have been here for 13 years” but “I registered today”. Then I told him there might be another solution and asked him to go back to the settings page (which he was having trouble finding). He quickly understood that the blog profile could solve his problems because it allowed him to choose any user handle he wanted. “But do I need the author profile now? The text didn’t give him a clear answer, so I explained what the results of both configurations would be:

Blog-enabled, Author-enabled -> Author creates, Blog boosts

Blog-enabled, Author-disabled -> Blog creates, Author is not visible to the outside world

Learn by example what the Fediverse is

Since we started the process, he has been concerned about how his posts would look. I tried to postpone the answer as long as possible and let him read the corresponding part of the ActivityPub plugins settings page. He got even more confused, the settings were too complicated and he kind of gave up early to solve it himself, because he had to ask questions on every line.

I tried to explain that with ActivityPub and Fediverse, you cannot control how the content is presented to others, because the other software decides, and showed him examples of other WordPress blogs and how their posts look like on Mastodon inside desktop on a browser, on the Android app Tusky and the official mobile app, and on a Firefish instance in a browser. He immediately understood the concept of separating design from content and its attachments and said, “Okay, but actually this is fine. And he went on to say, “But you know, I don’t really want the featured image of my posts to show up because it’s tied to the design of the home page, I just want to use the first one or two images within the post itself. I replied that that might be possible, but it’s not currently the case. While he took a break to get some groceries, I coded the necessary extension in a few lines of code.

Right now it’s been 3 hours and we started saying like let’s speed things up and I was helping him out more. He didn’t want to share his entire posts because they contained too much detail, but he also didn’t have any custom excerpts that could be used. He agreed to create custom excerpts for his 30+ posts because he understood the benefits: The ActivityPub object is now configured to be sent as a note with this template. Fortunately, this standard behavior is already being simplified.

Now he asked again “but where can I see my profile now” I want to see what it looks like. “Your website is your profile! O.K., I was being nitpicky, he actually already meant “what does my profile look like to people who read my posts on Mastodon”. I sent his account a follow request and showed him the screen of my browser with the Mastodon web user interface. “But there are no posts! Why don’t I see any of my posts.”. I had to explain caching and when remote content shows up and when it does not. But by copying and pasting the permalink of the posts into my Mastodon search box, he was finally able to see what we wanted. And he was excited!

And what about following others?

I thought we would be done already, then he asked “but how do I get people to follow me?”. I explained to him that either I could boost this post to my followers to get the attention of others, or that it was his duty to communicate his new Fediverse handle, and that he really liked that people could directly search for the website URL to find his profile. And after he saw my reply to his post in his comments admin menu, he was hooked.

We had a break and I thought we were done and he looked up and said “this is cool, actually really cool”. Now that he was even more interested in the Fediverse, he wanted to join (to my surprise) and said “but how can I follow you now?”. At this point we could have just set up a Mastodon account for him, but then he would have ended up with an additional service. I pointed out the benefits and features of Mastodon and that there is an alternative using the “Friends” plugin, which of course is not as feature rich (no public and local timelines, no search, no exploration features, etc.). But since he said he didn’t need those, he was curious to try the Friends plugin.

Again, the installation was done in seconds. And it was easy to add a new follower and type in my Mastodon handle. The preview of my profile reassured him, and he even saw my latest posts.


But our happiness was soon dashed: he did not show up on my follower list. I was also pretty new to the friends plugin and didn’t immediately get the solutions to what was going wrong, there were no error or warning messages anywhere. The reasons the follow request was not handled correctly was that we disabled author profiles in the ActivityPub plugin, but the Friends plugin needs them because it does not fallback to the blog profile.

Now you might say: OK, let us roll back, let us make a backup, change the username and use the author profile. But if we now deactivate the blog user and change the username to the one we used as the blog user: federation problems would surely occur. The reason is that the post has already been published and therefore the blog profile is now known to a lot of instances, they’ve already cached it’s publicKey and the id as well as the url of the ActivityPub actor.

How long would those we cached last? I couldn’t tell and can’t now. It seems we lost the chance to choose the preferred user handle, which would have been something like <firstname>@<lastname>.org.


In the end we had a tea and postponed the decision what to do now. Overall, however, and I think we both shared this, the enthusiasm outweighed the problems we encountered.

All posts are licensed under CC-BY-SA 4.0


Leave a Reply

Your email address will not be published. Required fields are marked *