Back to Writing
Baby Steps in the Fediverse
Monopoly is bad. Most of the era of social tech is characterized by monopolistic (let’s be generous: oligopolistic) “walled garden” communication services: I’m locked in to my Instagram account because if I leave, I lose all my friend connections; my Instagram account and your TikTok account can’t interact together.
The answer to this closed, proprietary internet is what’s called “The Fediverse.” Here, I write about some of my baby steps and early observations in this new -verse.
The Fediverse
A simple way of understanding what The Fediverse is: email. I can use gmail and you can use outlook and we have no problems with our ability to send and receive messages with each other. That is not true of pretty much all social media, since its origins 20ish years ago. A big part of the software systems that underlie social tech are what’s known as “protocols” - structured ways of packaging and moving data. Most social tech has closed protocols, meaning there is no efficient (or terms-of-service compliant) way for programs outside of a given social platform to interact with those protocols. They can’t send and receive the stuff of the social internet: messages, URLs, images, videos, etc.
In contrast, email uses open protocols. This creates an ecosystem characterized by “interoperability,” and it’s unambiguously good. For an individual consumer, it creates freedom and agency. From an economic viewpoint, it puts competitive dynamics into the marketplaces of tech products and internet advertisers. Customers can vote with their feet.
While interoperability is an old concept for lots of physical technology (such as manufactured components of railcars), for social tech, we’re just in the first few years of it. The EU’s Digital Markets Act requires certain kinds of interoperability from large “gatekeeper” social platforms. The law took effect in the first part of 2024, with such players like Apple actively working on specifications to comply.
The Fediverse and interoperability can be a pretty wonky and technically tangled arena to understand and experience. My first explorations into it, in 2023, were humbling, because it entailed lots of “back end” software engineering concepts and capabilities that lay people like me find pretty challenging to navigate. Also, it didn’t really work.
But! Simultaneous to the childhood of the fediverse, we have the boom in generative AI, particularly large-language models. For all their sins and shortcomings, LLMs are very good at creating and interpreting code: software is highly structured and much easier to fact-check (debug) than human-oriented meaning, and I think that makes for a best-case application of LLMs.
So, equipped with Anthropic’s AI chatbot Claude, and inspired by Casey Newton, Kevin Roost, and PJ Vogt’s coverage of “vibe coding” with Claude and building their own fediverse social network, I waded back into things to see what would happen. Here’s what I’ve found.
The Products
I focused first on the category of social tech called “microblogging.” The forebear of this segment was Twitter (now X), and is unfortunately not part of this conversation. Xitter continues to use closed protocols. I experimented with 3 other products:
Mastodon: This is the harbinger of the fediverse. In 2016, founder Eugene Rochko created both the application Mastodon and the open protocol it’s built on - ActivityPub. Any app that is built on ActivityPub has the ability to “interoperate” with Mastodon. Users choose a specific “instance” (server) to join, from which they can interact with users on any other instance. I joined the indieweb.social instance, and my username is @abekatz@indieweb.social.
Threads: When Musk acquired Twitter in the fall of 2022, there was a big emigration of Twitter users concerned with things like poor content moderation, political bias, and worse business models. True to its core business strategy, Meta (fka Facebook, Inc.) built a clone of Twitter in an effort to absorb a bunch of that new demand. Happily, they decided to build it on Rochko’s ActivityPub, marking the first high profile foray of a social tech “walled garden” into the fediverse. In the few years since, the Threads product roadmap has continued to inch along with further interoperability updates, but, as we’ll see, it doesn’t appear to be a major priority for them. My username on Threads is @katz.abe@threads.net. The dark screenshots below are from the perspective of my Threads user account.
Bluesky: At the end of 2019, Twitter CEO Jack Dorsey posted, “Twitter is funding a small independent team of up to five open source architects, engineers, and designers to develop an open and decentralized standard for social media. The goal is for Twitter to ultimately be a client of this standard.” That project was called Bluesky, and resulted in the development of ATProto, a new open protocol for social tech. Musk’s Twitter canceled that work, and Bluesky spun out as its own standalone company, product, and “steward” of ATProto. My username on Bluesky is @abekatz@bsky.social.
My Experience
I have an account with each of these three products. Mastodon and Threads are, ostensibly, directly interoperable because they use the same protocol - ActivityPub. In contrast, Bluesky uses ATProto, so it doesn’t directly interoperate with Mastodon or Threads - but there’s a workaround we’ll see!
Task 1: See my Threads posts on my Mastodon
Shortly after its launch, Threads shipped the ability for users to “enable fediverse sharing.” Notably, this is not a default setting - users have to opt into it. I did.
From my account on Threads, I made a post.
It appeared on Mastodon, viewable from my Mastodon account, about 15 minutes later.
From my Mastodon account, I commented on an older Threads post of mine.
About 10 minutes later, it appeared as a Notification (not as a comment on the post) on my Threads account.
And, more than an hour later, something appeared as a sort-of-comment on my Threads post.
But, it didn’t actually show the substance of the comment under the post.
This is a mixed success. On the one hand, I can read Threads posts on something that isn’t Threads (Mastodon). On the other hand, I can’t really interact with Threads posts yet - such as commenting. This is not a technical limitation of ActivityPub, nor a shortcoming of Mastodon (as we’ll see below), but rather a matter of Threads configuring its instance and application a certain way.
Having worked at Meta, my guess is that there is a small, passionate team of engineers working on shipping evermore functionality for fediverse capabilities, and a resource manager (Adam Mosseri, and ultimately Mark Zuckerberg) determining which Threads features to prioritize; those decision-makers are not prioritizing fediverse functionality. See, for example, the latest feature announced by Mosseri - additional ways for users to tell Instagram what categories of Reels you’d like to see. Not additional Threads compatibility with non-Meta products. Weird!
Moreover, the in-app behaviors of Threads, such as not having fediverse sharing turned on by default, and even periodically asking users who are sharing to the fediverse whether they still want to do so, suggest to me that Meta isn’t really committed to Threads being a tentpole of the fediverse. The realist in me has a hunch that the ActivityPub infra under Threads is little more than DMA compliance work.
Task 2: See many people’s Threads posts on my Mastodon
In the pilot above, I followed myself on these various services. But obviously I want to see other people’s posts. I had been a fairly active consumer on Threads previously and had followed a couple hundred accounts - how could I make it so that my Mastodon account also follows those Threads accounts?
Cue Claude. Meta and Mastodon alike have export/import capabilities, and I was able to export my Threads “followings” into a JSON file. That’s one kind of structured data file. Of course, to import the list of the accounts I’m following into Mastodon, the file needs to be in a different format - a CSV. Converting a file of a few hundred strings (username / domains) from JSON to CSV, with a few weird idiosyncrasies, was a walk in the park with Claude.
I was using the free tier version of Claude, so I had a pretty low ceiling on the amount of data I could send/receive. I couldn’t simply upload the JSON file to Claude and have it spit out the correct CSV file for me (although paying customers probably could).
Instead, I used Claude to come up with some find-and-replace operations in the JSON file, including some fancy logic search known as “regex” that looks to a human like gobbledygook. The result was a fast, clean CSV file of the few hundred accounts I wanted to follow, that I successfully* uploaded to Mastodon! A simple data cleaning task that, without Claude, would have taken me hours to do manually, or days (because software engineer I am not) to write a script to accomplish.
*Successful, insofar as I was able to solve a data transformation problem. But this screenshot, from Mastodon’s import page in my account preferences, shows that only 32 Threads accounts were successfully imported to my Mastodon as accounts I can follow. Those 205 failures? Threads accounts that have not yet enabled “Fediverse sharing.”
Furthermore, this whole task #2 was oriented towards getting a point-in-time list of accounts I followed from one place to another. But can I follow additional Threads accounts from Mastodon? Only if they’ve enabled “Fediverse sharing” will they even appear in Mastodon’s search field. And it’s a large majority of Threads accounts that have not done this, including some conspicuous, disappointing ones.
Task 3: See Bluesky posts on Mastodon
Unlike Meta, Bluesky and Mastodon have a raison d’etre of making the fediverse successful. That’s why I was initially concerned to learn that they were building on two, parallel open protocols - ATProto and ActivityPub, respectively. Bluesky argues for some technical advantages of ATProto in its FAQs. But wouldn’t multiple protocols compete with each other for audience, cannibalizing their own market potential, and thus never achieve a truly viable alternative to Meta? My worries were misplaced: open protocols are open! Let a hundred flowers bloom! Here’s why.
A single open protocol, like ActivityPub, enables multiple services to interoperate, from distinct “instances” (servers, which are blinking boxes in dark rooms) running the same application (Mastodon); or even from different applications- such as Mastodon and WordPress.
Multiple open protocols, like ActivityPub and ATProto, can even interoperate! But they do need further services like Bridgy Fed to make it happen. That means that Bluesky, a microblog application on ATProto, is able to send and receive data with Pixelfed, an image sharing app on ActivityPub. We can still get big Network Effects!
This is great, but does entail a bit more complexity to make happen.
I first needed to get a list of all the accounts I follow on Bluesky. Unlike Meta and Mastodon, as far as I could find, Bluesky does not have a native “export” function. So I had to install an extension to my Chrome web browser that scrapes my Bluesky and spits out a file (you guessed it: JSON) containing a list of these accounts.
Then I went back to Claude and did similar operations to convert it to a simple CSV of usernames / domains; but this time, I also had to append a suffix, *.brid.gy, to each username handle. This tells Mastodon to read “brid.gy” as a Mastodon (ActivityPub) instance, which itself contains a bunch of posts pulled in from some other source - what we know to be Bluesky, an ATProto instance.
And voila, sorta!
We had 64 successes and 323 failures. Just like many Threads users had not clicked the in-app box to “enable Fediverse sharing,” many Bluesky users have not jumped through the hoops of connecting their Bluesky account to Bridgy Fed… including me! I realized I had a few steps yet to do.
With my Mastodon account, I had to follow @bsky.brid.gy@bsky.brid.gy.
With my Bluesky account, I had to follow @ap.brid.gy.
Finally, with my Mastodon account, I searched “abekatz.bsky.social@bsky.brid.gy” - it just trips off the tongue.
It didn’t pull in to Mastodon any previous posts I had made on my Bluesky account. So I made a new post on Bluesky, and after a few seconds I could see it from my Mastodon account when viewing the Bluesky user abekatz.bsky.social@bsky.brid.gy on Mastodon!
Task 4: Escape from Instagram?
While Meta’s decision to build a microblogging app, Threads, in a Fediverse-enabled way is great, the majority of the iceberg remains under the waterline. Almost all other social tech, including Meta’s own products (Facebook, Instagram, WhatsApp), are not on open protocols. And while I appreciate a good tweet, I’ve always been much more of an Instagram user - would that I could enjoy photo posts and stories from outside the garden wall, in those elysian fields of the fediverse!
Two products offer solutions: Pixelfed, built on ActivityPub; and Flashes, owned by Bluesky and built on ATProto.
As far as I can tell, Flashes is not yet Bridgy Fed’d over to ActivityPub, so my goal of having one internet home on ActivityPub that access All The Social Internet is paused on that front. But Pixelfed is on ActivityPub. I created an account and took a perfectly composed, award-worthy photo.
Then, on Mastodon, I searched for the username @abekatz@pixelfed.social, and followed it. And what did I see?
The post from Pixelfed seems to have successfully shown up on Mastodon, although my Pixelfed profile picture did not. Additionally, I didn’t see this post in my Mastodon feed; rather, I had to navigate to this Mastodon user profile page to see it. If Pixelfed posts don’t appear in Mastodon feeds, it’s probably for product design reasons and not for technological compatibility reasons.
Early Observations
What’s Good
Control & Ownership
My primary motivation here is about power. I have felt a righteous rage towards large closed platforms for a long time. One acute episode was Facebook’s 2019 decision to exclude political advertisements from its third-party fact-checking program, and Zuck correctly told employees in a company all-hands “this isn’t a democracy.” Freedom of movement, and the technical ability to “bring my people with me,” represents a small but fundamental change in the power relationships of social tech ownership and control.
I recognize this is a wonky and abstract motivation. It might be analogous to “shop local” and “buy organic” consumer causes: focused more on the nature of one’s participation in a system-sized problem, and less on bite-for-bite experience of eating.
Culture
The first wave of immigrants to the Fediverse are keen on avoiding some of the social pathologies of other platforms, so people are pretty nice. They’re conscientious and active stewards of the network: discussions about blocking individual users, blocking individual servers, and curating whole lists of problematic users/servers is a regular part of the discourse. The product design supports this to, even with nudges like “Make sure to include alt-text when you share an image, for accessibility’s sake.”
Now, I’m nervous about the slippery slope towards “groupthink” all this niceness coule represent, maybe even thought-policing, as well as the fact that a “fun internet” might need a quarter-teaspoon of shitposty, edgelordy, offensive stuff happening on it. I don’t want it personally, but how can I know that it doesn’t shape, by degrees, the flavor of the stuff I do want?
I’d also put “newness” in this culture bucket: there is an excitement, an active engagement, and a curiosity I’m seeing that feels good. People meet new people, respond to one another, and engage on terms that seem first-order about communication for its own sake, rather than about reach expansion and virality.
What Ain’t
Onboarding Friction
The first half of this piece is a testament to the challenges involved in setting up true interoperable fediverse stuff. That means I’m not about to evangelize this to friends and family - I recognize I’m in the biz, and so my efforts are partly professional curiosity and staying-with-the-times. Normies on the internet simply want things to be Easy. In product land, we call this the feeling of “It Just Works.”
The product development cycle of social tech is hyper-sensitive to marginal obstacles - “Friction” - that users may encounter, because such friction points will translate to tenths-of-percentage-points “churn” (users leaving the app or using it somewhat less), which means the PM sees a lower KPI, ultimately that advertisers see a smaller ROAS, the CFO sees the DCF model’s NPV decrease, and PM won’t get as big a bonus. Got it?
The Fediverse, so far, does not seem to demonstrate this killer instinct for growth. That’s not necessarily bad! But if we’re to compete effectively with those shareholder-value-maximizing closed protocol companies, and make the Fediverse a viable alternative for The People, we have a lot of product improvement ahead of us. Network Effects - the feeling that “I’m using this thing because all my people are using this thing” - is not yet part of the Fediverse phenomenon. I’m optimistic product friction will improve, because it already has in the past ~18 months.
Latency
I experienced the passing of many minutes between posting things and seeing things, especially between Mastodon and Threads. If I want federated social tech to have the realtime feel I’ve been used to, the Fediverse backends will need to improve. As long as Threads doesn’t want to, that server will remain a bummer to interact with; but maybe as more servers come online and the Fediverse grows, Threads’s slowness will either be a liability that Meta will fix, or users will leave it for greener pastures. That’s competition, baby.
Strange UX
In these early days, there is some product functionality that is just confusing and probably a deterrent to us normies succeeding here.
User identity
Somebody who’s doing the interoperability dance is going to have multiple versions of themself, for as many “instances” (servers) on which they’ve created an account.
Which one do I follow?
If, to be safe, I follow multiple versions of such a person, I might encounter some annoying UX. Some users post to multiple servers, in order to ensure that they’re reaching audiences who aren’t interoperating / combining products like I am. If I follow each of that person’s accounts, I’m going to see duplicative posts in my interoperating feed.
Moreover, for public figures, how do I know which account is legit? This is a problem in closed platforms that’s historically been addressed by having dedicated staff creating internal rubrics and review processes for “fame etc” - or, more recently, by simply selling a “verified” checkmark to whomever wants to buy one. It’s much harder in open networks, because there’s no centralized way of saying “so-and-so is the real so-and-so.”
Bidirectionality
Today, on Mastodon I can see Threads posts; on Threads I cannot see Mastodon posts. This will always be a possible state of things, because each owner of an “instance” (a server) on the Fediverse can determine these kinds of message behaviors. It’s a very bad UX to see a post, assume you can interact with it, but find that nobody else on the other side of the wall will see your comments or reposts etc.
Quote-Posting
Rendering content (e.g. link embeds) from other places isn’t working yet. It means that a very popular behavior on microblogging services - the “quote tweet” - is DOA on certain interoperating products. In order to see the original content linked in this screenshot, I have to go to its service (Bluesky), which defeats the purpose of The Fediverse.
In another case, the quote-post also fails. But this time, the original poster has evidently enabled fediverse sharing from Threads, because a couple posts later in feed I see his post. So while Mastodon can pull in this post successfully in one context, it fails to do so in a another context that is one step “deeper.”
There are probably many more weird or broken UX moments than what I’ve touched on here. They amount to “bad product experience” which, as a PM will tell you, drives users away.
Other
I haven’t yet dealt with these directly, but I understand there are big complexities with things like:
moderation (trust and safety) - whose rules apply where; are consequences (and appeals?) portable across servers; when is something a matter of user-level moderation or server-level moderation; etc.
encryption (privacy) - Is it technically possible to have an end-to-end encrypted messaging service interoperate with other instances?
Prickly Reflections
Culture
All that I’ve written above assumes that growth is desirable. That’s my bias, because my motivation is about power and viable alternatives to the incumbents. But many people on the fediverse do not want growth. They want small virtual spaces. This can lead to “self-selection-by-design” being an attribute of product development: if a user can’t figure out how to get Fediverse / Interoperability to work, then they’re not active enough of a participant in their own online experience, and we don’t want them.
There was an interesting flashpoint on this front last year, when Bridgy Fed launched the ability to connect Bluesky and Mastodon. Originally, it connected all accounts by default. Some Fediverse users saw this as a massive privacy violation and responded with outrage. In response, Bridgy Fed changed its configuration to be opt-in, rather than opt-out. The consequence of this is the experience I wrote about above: Most of my Bluesky connections haven’t opted in, so I can’t follow them. For how many of these users is that an affirmative choice? For how many is it simply inertia?
So, I tend to agree with Bridgy Fed’s first approach, and I tend to grumble at the outspoken members of The Fediverse who opposed it. That’s a matter of culture, a matter of decentralized ownership, and on balance that very dynamic is a good problem to have; but it makes me more pessimistic about The Fediverse achieving what I want it to achieve: slaying giants!
Business
In 2024, I attended a session at TrustCon by the head of Independent Federated Trust and Safety (IFTAS), Jaz Michael-King, in which he presented survey results of the annual Social Web Trust & Safety Needs Assessment Report. One finding that struck me was how bootstrapped and resource-scarce the builders and operators of The Fediverse are. In writing this, I reviewed the 2025 report.
It collected responses from administrators of 184 servers, hosting a collective 7M users; this is mostly ActivityPub, but did include responses from ATProto (Bluesky).
About a third were Mastodon servers, and the rest were other applications - things like Wordpress, Bluesky, and Ghost.
Almost half (47%) of respondents manage servers with fewer than 100 users. This is the cozyweb!
Interestingly, the survey also includes a couple responses from moderators of Discord Servers (which are not actual technical servers, that’s just branding) and Reddit forums (subreddits), which are not Fediverse entities.
Just 30% of respondents are registered as businesses. Just 8% of respondents compensate their moderators.
This excerpt is powerful: “Of the respondents that chose to share revenue and expense data, these communities collectively raise $13,933 each month, failing to cover fixed costs of $21,402.”
The organizational landscape of the fediverse in 2025 is one of non-profit, mom-and-pop operations. Many services rely on donations, and are cashflow negative. What business models are appropriate? Should non-profit, collaborative organizations like Fediverse servers run ads, as one writer argues of Wikipedia? Subscriptions? Prickly.
Addiction Feels Good
The inventory - the set of posts I might see - on my interoperating fediverse “home feed” is small, because the number of users I’m following is small, and I’m not being recommended content from further afield. So, I have less reason, moment-to-moment, to stay on the app than on Twitter or Threads or Instagram. There are two factors here:
Inventory: On Mastodon, I am a member of the instance (server) called indieweb.social. I can see all posts made by users on my instance in a “local” feed. I can also see all posts made by users on any other servers that the admins of indieweb.social have connected our server to, on a “other servers” feed.
Algos: Completely unrelated to all the network technology (servers, connections, interoperating, etc) I’ve discussed so far, applications on The Fediverse have, so far, overwhelmingly poo-pooed algorithmic ranking of content. Almost all feeds are simple reverse chronological feeds. That means that when a feed has a small inventory, I see stale posts for a while. When a feed has a large inventory, I see firehose of content constantly coming in every few microseconds. Simple chronology, it turns out, has shortcomings as an organizational heuristic.
Too little content and too much content mean that I find myself spending less time on The Fediverse, and get this - I think that’s good. But I seriously think I’m experiencing withdrawal. There is a real habit problem of compulsively opening an app, swipe-swipe-swiping, idly passing time, fidgeting, seeking dopamine; and the Fediverse product experience is not built to enable that.
So I’m confronted with my own demons. None of the political science and economic theory about choice, nor any of the technical and product successes and drawbacks I’m observing, excuse my own brain chemistry. That’s something I’ll need to work on. But I do think that The Fediverse is a tool and sandbox in which I can work on these things. Tools like custom list building, and (in the case of Bluesky) custom feed ranking algorithms, are major facets of Fediverse products that I have yet to dive into.
The Fediverse is a promising future, and I’m eager to see it take root.