First, some quick background, just to make sure everyone’s on the same page. Skip the opening if you already know this part!

Wait, what’s the Fediverse?

ActivityPub is a decentralized (for real, not in the way blockchains are “decentralized”) social networking protocol that’s been getting a lot of chatter lately. It’s like “what if RSS, but with more of the interactive features of social media?” Or “what if OpenID, but we actually got it to take off?”

Services built on the ActivityPub protocol include Mastodon, Pleroma, Pixelfed, and Misskey. None of those are single sites — anyone can start and run their own Mastodon server, hosting as many other users as they’re open to — and then all these independently-run setups federate with each other. So, collectively, they’re “the Fediverse.”

And if you have an account on any installation of any of these services, you can follow, comment on, and generally interact with any of the others.

…In theory, anyway. In practice, servers don’t all automatically connect with each other, since there’s no central authority to manage those connections. And sometimes the mods of one server will completely block another server, for good reasons or for bad ones.

But the general idea is nice!

(Here’s my Mastodon account. If you have one of the others, and you can see it, give it a follow.)

Recently, WordPress announced official support for their ActivityPub plugin. Just install it, and it’ll turn your WordPress site into a Fediverse server.

And, listen, for anyone running a webcomic, this is a very cool idea!

If you have your own site, you probably have an array of social-media accounts where you post update notices, which is good for your reach but a pain to keep up. So, what if, instead of your readers on Twitter following your Twitter account, they could just follow your comic site from their Twitters? Or their Tumblrs, or their Instagrams, or whatever else. You don’t need to crosspost on all the sites — you don’t even need an account on all the sites — they act like RSS readers that can all pick each other up directly.

So I gave it a try.

And who are you?

I’m Erin Ptah, webcomic artist since 2003. (…Not all the same comic.)

My first self-hosted webcomic site — the one I’m posting this on now — started in 2011 for But I’m A Cat Person, a dramedy about broke millennials with battle monsters.

Later in 2015 I made another site for Leif & Thorn, a fantasy comedy about a magic knight trying to have a romance in his second language. That’s also where I post general resources and info on making comics, especially if you’re looking to host your own.

Both BICP and Leif & Thorn run on WordPress! I figured I’d try to federate BICP first, because it’s, you know…finished. We’re doing annotated reruns, so there are regular updates to show whether the federation is working — but the audience for them is small, so the stakes are lower. I could mess around, screw up, and/or get ugly results without the embarrassment of a big audience watching.

The Process, step by step

Here’s a walkthrough of how I messed around, screwed up, and/or got ugly results.

Installed and activated the plugin — easy enough.

Customized the settings — the plugin doesn’t have many, so this was fast. Here’s part of how they looked (click for full size):

Screenshot of ActivityPub settings with profiles that should be followable

Tried to find the site from my Mastodon account. No luck. I gave it a couple days/updates, just in case there was some cache that needed to be cycled, but it didn’t make a difference.

Asked the Fediverse for help. Suggestions included:

  1. refresh your permalinks (that’s always worth a try, so I did)
  2. don’t expect the author URL to work, because of a conflict with the Yoast SEO plugin (I’m the only post author here anyway, so I un-checked the “Enable authors” setting)
  3. check your webfinger, yes that’s really what it’s called (BICP didn’t seem to have one)

When I use this webfinger lookup tool, it listed BICP as 403 Forbidden. I followed this series of steps to create one manually. And it seemed to work! I could now follow BICP from my Mastodon account!

Then I realized I didn’t like the username. Something like “” looks fine when it’s fully written out, but some displays will shorten the displayed username to “@comic” (with the full source coming up when you click it). Way too generic, whoops.

So I backtracked and redid a few steps. The username is now “”, which is super clunky when fully written out, but a lot nicer in the short version!

I repeated the “creating a webfinger” process. Ideally the plugin should handle that on its own, and update automatically when you change things…but mine wasn’t.

And I refreshed the permalinks again, just in case.

Sure enough, this worked! Here’s what the newly-updated BICP looked like from Mastodon, the Universeodon server:

BICP feed as viewed from Universeodon

Some notes:

The banner is automatically pulled from your site header. BICP has several randomized rotating header images; Universeodon pulled a different one each time. Can’t find any setting in the AP plugin to change that. (The size/cropping that works for a site header is not optimized for a Mastodon header, and you can tell!)

The display name (pulled from the site title) used a curly apostrophe in “I’m” the first time (which showed up on Mastodon as “I'm”), and a regular apostrophe the second time. I don’t know why! Or whether there’s any way to make it default to regular.

The account icon shows up as a generic WordPress logo. Nothing pulled from the BICP site at all, not even the user icon from my admin account. Can’t find a way to change that either.

Comments from Fediverse accounts will display on the original BICP posts; I left one on a recent page. Here’s a comparative view that shows the user icons don’t get pulled to the BICP site, either:

Comment left by a Mastodon account, from Mastodon
Comment left by a Mastodon account, seen on the BICP site

The “Joined” date is when your site launched, not when you made it ActivityPub-enabled.

The “1.9K Posts” is from the number of combined “update types I told the ActivityPub plugin to care about.” As of this writing, it’s 1764 published comics + 144 blog posts + 14 pages.

Universeodon doesn’t show all of them, just the ones posted since I got the plugin working. It prompts you to visit the original site for older posts.

Can You Get It To Look Good?

…Tough question.

Your posts won’t just get fetched as-is, like they would with an RSS reader. Mastodon, for example, switches the content around to a more Tweet-like format. I haven’t checked from any other Fediverse software, but I’m guessing they each do their own thing.

Comparative screenshots! On the left, annotated chapter 19 Page 4 as it appears on the BICP website: full-size comic at the top, followed by the title, some tags, and the body of the post. Including a little accent image of a woman in a pretty suit:

On the right, the AP plugin’s rendition, using the default “The full content” setting. No title, no tags. The body text shows up at the top, but without the embedded image; that’s attached at the end, tweet-style, along with the comic. Both images have alt text on the BICP site! Neither one has alt text on Mastodon.

I had the plugin set to include 2 images, so it seems that if there were any more in the post content, they just wouldn’t show up. A post with lots of images at specific points, to illustrate what that part of the text is talking about, would be sunk.

So I started playing around with the custom settings.

More comparative screenshots. On the left, annotated chapter 19 page 9 from the BICP site. On the right, the rendition on Mastodon, with the AP plugin content displayed in a custom way:

More things to notice:

You can use HTML in these! In the example above, I just used a direct link and expected it to become clickable, the way URLs do on Twitter. It didn’t. The next version I tried used the good old-fashioned <a> tag.

I haven’t figured out Fediverse hashtags. Also unlike Twitter, the line “#webcomics ” doesn’t come out as clickable tags, just plaintext.

I used the shortcode “[ap_hashtags]”; so far, that hasn’t fetched anything. (And even if it did, the tags you use to organize posts on-site won’t always be the tags you’d use for keyword searchability on social media.)

Post display settings with HTML in them

You’re not going to get a nice-looking excerpt. On the left, page 9 again as it shows up in tags/searches on the BICP site. I put a “read more” flag between the annotation part and the transcript part, so “Read the rest of this entry” shows up neatly after the annotations:

That’s a good place for a readmore! That looks nice! But you can’t tell that to ActivityPub. The “[ap_excerpt]” shortcode (results seen on the right) fetches a fixed number of characters, cuts it off after the last word, and puts “Read the rest of this entry” there.

Long story short…I finally took this down to a really minimalist format. Not much different from what I use in traditional social-media crosspost plugins:

  • Boilerplate text to say it’s an update
  • Page title + link to the original
  • Boilerplate text that there’s a transcript at the source
  • Hashtag shortcode, just in case
  • 1 attached image, so it only fetches the comic

Here’s what the settings page looks like now:

Minimalist ActivityPub plugin settings

And here’s how the result looks from Mastodon:

Minimalist Mastodon display of a post

…And that’s probably the format I’ll leave in place for a while.

So, Is This Worth Doing?


Do you want to offer readers a full-featured “get all the new posts showing up in your personal multi-site feed, the way I originally made them” experience?

…Don’t expect that here. Tell people to use your RSS feed. (Most websites have those built in! Browser plugins like Feed Preview will find them for you.)

Do you want a simple out-of-the-box technical experience that brings your webcomic seamlessly to every user in the Fediverse?

…You, uh, won’t exactly get that either. On top of all the hiccups described above, a poll from my regular Mastodon account found that even now, most of the users can load BICP’s new profile — but not all. Haven’t dug into that enough to figure out why.

Do you like having auto-notifications for new comics set up with other social-media sites? Facebook, Twitter, Tumblr, etc? Do you want to expand that a little farther, reach out to whatever potential follower base you can get?

…Then yeah, grab the ActivityPub plugin. It can’t hurt. It might help! And if you decide to create a “simple update notifications” template from the start, instead of tinkering around a bunch the way I did, the setup shouldn’t even take long.

(Just give your comic a unique username the first time. Learn from my mistakes!)

Edit: More discoveries

As I keep learning new things about how this works, I’ll tack them on the end of this post for easy reference!

First: WordPress already does automatic pingbacks when one blog/site links to a post on another blog/site. With the AP plugin, now it does pingbacks for…possibly any Fediverse account on any software? As I found out when one of the Mastodon users in the earlier links reported that this post showed up in their mentions.

Screenshot of this post in mentions

A good demo of how the AP integration goes deeper than regular cross-site notifications. If this was an auto-update pushed to Twitter or Facebook, the other site would only see anything I put in the “new update!” template text. Mastodon is connecting directly to the original site. It only displays the preview I told it to, but it can have other interactions with anything in the full post.