A six surrounded by logos of ActivityPub platforms and members
Software Reviews Technology

I love Ghost's vision for the web, but its ActivityPub integration has one glaring drawback

Nick Broughall
Nick Broughall

I switched BTTR from WordPress to Ghost just over a year ago, now. There are a few things I miss about the versatility of WordPress through its multitude of plugins, but for the most part, Ghost is a far cleaner CMS for an independent publisher like myself.

I also love that Ghost is a non-profit organisation and its CMS is open source. At a time when Substack is sending push notifications encouraging you to read Nazi propaganda that it won't remove from its platform, I appreciate the fact that Ghost isn't doing this to make its shareholders richer.

So last week, when Ghost launched version 6.0, I hit the update button straight away. There was a fair amount in the update, led by two flagship features: native website analytics and ActivityPub integration. I don't want to focus on the analytics feature here, other than to say it's pretty great, and the numbers largely track with what I see through my other analytics setup.

Instead, I want to focus on the integration of the ActivityPub protocol into the Ghost platform. It's a big shift for the company, and it indicates a vision for how Ghost wants the future of the Internet to be.

It's a vision I can get behind.

This is the promise of an internet built around protocols rather than platforms, where you can easily move from one place to another while maintaining the connections between you and the rest of the Internet.

Ghost 6 is a decent step along that journey, but it's a far cry from perfect.

A screenshot of the Reader section of Ghost's CMS

Reader vs Notes

At the foundation of Ghost's Fediverse integration is the Network menu option in the CMS. You do need to turn it on, but once activated, it connects your Ghost site to the Fediverse through the ActivityPub protocol. That means that people on other ActivityPub platforms like Mastodon can follow and engage with your website from their platforms.

And while Bluesky doesn't use ActivityPub, you can use a bridging service called Bridgy Fed to automatically share across to Bluesky's ATProto protocol as well.

That means that every article I write on BTTR now is automatically shared through the Fediverse. You can follow me through your own platform of choice. You can "Like" my content and reply to the post without having to leave your social platform.

I love this idea, and think it has the potential to change the internet if these open protocols can sort themselves out to work all the time. Sadly, implementation across platforms is still too inconsistent right now to make it the Internet revolution we all long for.

In Ghost's case, it comes down to how you engage with the Fediverse in the CMS itself. Within the Network menu option, there is a sidebar that offers you access to the different parts of the Fediverse integration. The two main options are called "Reader" and "Notes".

Reader is a Ghost to Ghost connection. If you follow a different Ghost blog and they create a post, it will appear in the Reader list. It will give you access to as much of the post as is available before a paywall, making it a good way to stay on top of a feed of stories.

You can Like, Comment or repost any story you read through the Reader section. But it's not designed to engage with the smaller post types typically found on other ActivityPub platforms like Mastodon or Threads.

For that, you need the Notes menu, which is where I think Ghost's ActivityPub platform needs the most work.

A screenshot of the Notes section of Ghost's CMS

Within Notes, you can follow anyone on the Fediverse. That could be a Mastodon account, someone on Micro.Blog or Threads, a WordPress site with the ActivityPub plugin setup, a Flipboard account or any other number of platforms.

You can also create shorter "notes" to share into the Fediverse here as well. They have a 500-character limit and can include an image, but not a video. Notes you share this way will appear in the feeds of your followers, regardless of the platform they are on.

Except... For some reason, creating a Note here does not create a dedicated location for it on the internet. It is not something designed to be linked to.

Unlike Twitter or Bluesky, creating a short-form Note in Ghost does not create a fixed URL for that note.

This poses a few problems.

Firstly, it means you can't embed your Notes in an actual post on your site. I had an idea earlier this week that I would use Notes to quickly write up news articles, and then embed each note in my weekly roundup. That's currently not possible.

The second challenge I encountered with this was through the automatic bridging to Bluesky. As I mentioned, the Notes app has a character limit of 500 characters, but Bluesky only allows for 300 characters. Bluesky will automatically truncate the Note and try and link back to the original, except... there's no proper URL to link to. You end up with a messy page of code:

Where you end up if you click the link to the original note from Bluesky

The solution seems obvious

My biggest question with this integration is, "Why didn't Ghost just make Notes act like micro-posts?" Each note has a URL, just like tweets or Bluesky posts (I'll never willingly call the "skeets", same as Twitter will never be "X"), and then allows different themes to display them on your website in different ways.

For example, you could have a sidebar on your site that just shows a feed of your Notes. Or, you could display each note in the blog feed in its entirety, without a headline or an obvious link to read more (though, crucially, a link to a dedicated URL for the post).

This ultimately isn't even a novel solution. I host my personal blog over on Micro.Blog, and a big part of the appeal for that platform is the versatility for both short and long-form posts.

Micro.Blog has a slightly different approach, with an integrated syndication functionality that I really appreciate for my personal musings – I can set it up to post and re-post to different platforms fairly effortlessly, all while being hosted on my blog.

It also allows you to "follow" any site or platform with an RSS feed. This is another feature Ghost should be stealing for its "Reader" section. Being able to read other Ghost blog posts is all well and good, but Ghost is still a tiny portion of websites being used to publish great content, so the scope of what the Reader option can be is severely limited.

Still, the future looks bright

There are some quick changes I would love to see implemented into Ghost's ActivityPub integration to improve its usability, but even without those additions, it's still a good indication of what the Internet can be.

A direct connection to your audience on whatever platform they choose to be on.

I do plan on writing a more comprehensive review of Ghost as a platform, but until I manage to pull that together, I can happily say that Ghost is a well-designed, easy-to-use CMS that's especially great for independent publishers.

CTA Image

Curious about Ghost's ActivityPub features? Why not give them a go for yourself?

Try Ghost
BTTR is independent, but we may earn money when you purchase through links on our site.
BlueSky vs Threads: Comparing the Twitter successors | BTTR
As users leave Twitter in droves, let’s take a look at the alternatives and where you should consider posting.
How I tried to connect my social accounts | BTTR
I want to set and forget, but so far my attempt at federating my social media experience has involved a lot of setting, forgetting, then scrambling when I remember…