Building ActivityPub: Day 0

Building ActivityPub: Day 0

They say the best way to predict the future is to create it, so two weeks ago we shared our intention to connect Ghost with the ActivityPub Network to bring back the open web. We were delighted when our ideas managed to spread even further and wider than we'd imagined, and that so many of you signed up to be a part of the journey.

Why ActivityPub? Why now?

While we're getting started with some of the early engineering work to lay the foundations for ActivityPub in Ghost, we wanted to start with some background for anyone who's curious about how we got here.

We've been playing with ideas for networked publishing in Ghost since all the way back in 2016, long before ActivityPub was a thing.

Back then, Medium was all the rage in online publishing for a few reasons: First, it was free. Second, it offered instant social distribution to a built-in audience. And third, they raised a bunch of money and paid celebrities to use it. (Sound familiar?)

By contrast, publishing with open platforms like Ghost or WordPress was a relatively lonely affair that involved putting blog posts on the internet and receiving a slew of anonymous pageviews. It just didn't seem to feel as satisfying.

It was clear that people were a lot more interested in publishing when they had a direct connection with real human readers, and so we had two big ideas to make publishing on the web more social with an open platform.

Our first idea was to make it possible for publications to have registered members so that people would be able to get special access and benefits from publishers — while publishers would be able to collect email addresses and have a direct connection to who they were writing for.

Our second idea was to build an RSS reader into Ghost that would allow people to follow each other in the same sort of format as Medium and Tumblr — but with an API-driven social layer on top. We intended to call it "Pulse", and we even did some prototype demos to a few of our top publishers at the time.

Ultimately though, as a team of only ~7 people, we had to focus in on one big idea.

We focused on memberships.


In the intervening period, the idea of protocols over platforms slowly gained momentum. ActivityPub was published as a web standard in 2018 offering a new set of features that went beyond the 1-way feed of RSS, with a 2-way system for publishing and interacting.

At various points we revisited our old idea for networked publishing in Ghost and tested a few prototypes, but we were never sure how to make it scale; nor how many other platforms would ultimately adopt it. For all its promise, ActivityPub (like many open standards) seemed to generate products with user experiences that were often confusing and convoluted.

But something else happened in the intervening period between 2016 and 2024:

People became increasingly fed up with the behavior of centralized platforms, and increasingly hungry for alternatives. The motivation for exploring and understanding new technologies, rough edges included, meaningfully increased.

In 2024, for the first time, it finally feels like we have a critical mass of people and platforms who are interested in rewilding the internet to bring back what we lost, and create something new.

In the past week alone, we've had conversations with Mastodon, Flipboard, The Verge, Buttondown, WriteFreely, and several co-authors of the ActivityPub spec. There's a palpable feeling that this just might be the year of the linux desktop the open web.

What to expect from this newsletter

We're going to be sharing a mix of project updates, behind the scenes work, and engineering challenges. The truth is that anyone can make a splashy landing page that makes it seem like they know what they're doing, but we've never built a production app with ActivityPub before!

So, we're going to be sharing what we're learning and struggling with in real time, as we do the hard work of figuring out how to turn our ideas into a reality. Some good news, though, is that we already have a few things working.

This is a screenshot of real code output, rather than mockups, using ActivityPub. We're feeling a little daunted by the scope of the work ahead of us, but we're also really excited about starting down this road.

As we get a little further along we'll be sharing details about how you can kick the tires on everything we're building for yourself, and soliciting your feedback about how certain features and functions should ultimately work.

💡
If you have any questions you'd like us to answer or ideas you'd like us to see, you can always reply to these emails privately — or leave a comment publicly!

Depending on the volume of replies we get we may not be able to respond to everyone, but we do read every single message.