Both Mastodon and Bluesky offer decentralized alternatives, but only one puts users first. While Bluesky’s VC-backed model serves shareholder interests, Mastodon’s nonprofit structure safeguards a truly open internet. The future of social media shouldn’t be for sale.
I've been considering what to add in the next version of BotKit (v0.2.0) and wanted to share my current plans. After reviewing feedback and examining the #ActivityPub ecosystem, I've identified three key features that would significantly enhance the framework's capabilities:
Custom emoji support. This would allow bots to use server-defined custom emojis in their messages, making communication more expressive and allowing better integration with instance culture.
Emoji reactions. I plan to implement both sending and receiving emoji reactions to messages. This provides a lightweight interaction model that many users prefer for simple acknowledgments or responses. This would manifest as new event handlers (like Bot.onReaction) and methods (like Message.react()).
Quote posts. The ability to reference other posts with commentary is an important discourse feature in the fediverse. Supporting both sending quotes and detecting when bot posts have been quoted would enable more sophisticated conversational patterns.
These additions should make #BotKit more capable while maintaining its simple, developer-friendly API. I expect implementation to involve extending the Message class and adding new Text processing capabilities, all while keeping backward compatibility with existing bots. Having built both Hollo and Hackers' Pub, I already have deep familiarity with how various ActivityPub implementations handle these features across the fediverse. I welcome any community feedback on priorities or implementation details before I begin coding.
Thoughtful critique of Mastodon. Discusses my main gripe, that it's hard to assess whether to follow somebody. A person's bio might sound fascinating but there are usually zero posts displayed for me to see to confirm. So I end up not following new people, and meanwhile vast majority of the people I do follow (biologists, largely) have stopped posting. #mastodon#ActivityPub#fediverse#bluesky#twitterhttps://v.cx/2025/04/mastodon-exit-interview
We want our users to share their knowledge in multiple languages, but we need to ensure compatibility with existing ActivityPub servers. I'm considering several approaches:
Creating separate posts for each language with clear language indicators, linking them through inReplyTo relationships (so translations appear as replies to the original post)
Using the primary language in content while storing translations in contentMap
Adding "View in other languages" links at the bottom of each post
Implementing inline language dividers that degrade gracefully on non-supporting servers, for example:
<div lang="en"> <h3>English</h3> <p>This is the English content…</p></div><hr><div lang="ko"> <h3>한국어</h3> <p>한국어 내용입니다…</p></div>
I'm leaning toward a hybrid approach—showing content in the user's preferred language when possible while providing easy access to other language versions.
Has anyone tackled this problem effectively? I'd love to hear about your experiences or ideas for making multilingual content work well in the fediverse, especially when dealing with server implementations that don't fully support ActivityPub's multilingual features.
sad I missed this one. we need a social media for the public square and attention democracy, and an agreed upon best way to do groups. maybe they overlap but people need to think about what they are doing and what they want out of both. otherwise we'll get lots of complaining and both won't get to be as nice as they could be.
I love #ActivityPub for the former, and wish #matrix could be more like discord for the latter (with messaging and audio/video calls). then interoperate!
So its done! I finally released a fairly easy to install (from scratch) Hugo based Static Site generator with full ActivityPub support.
It has step-by-step instructions on how to set it up for your own blog or static website.
One of the coolest features for me, other than having your static site blog posts show up as posts in the Fediverse is the support for interacting with those posts. Any replies you leave, likes, or boosts will show up in the "comments" section of the website on the page associated with the post. How cool is that!
A list of alternative webclients for various #fediverse software:
Notes: * webclient: you use your own credential from your own instance * Listed are: official webclient hosts; or an instance list. * Optional: other instances. * In alphabetical order.
Don't build #ActivityPub from scratch! It's complex. See why using the #Fedify framework is the smarter way to develop for the fediverse in my new post:
I wish #ActivityPub allowed for a single identity to be used on myltiple services.
I don't want to create a mastodon account AND a loops account AND a pixelfed account AND a lemmy account. Why can't I just have @res260Émilio Gonzalez? :(
If AP steals one idea from #ATProto, it should be this.
A few facts and thoughts about #BlueSky being decentralized or not:
#ATProto (the protocol behind bluesky) is decentralized and open-source, but is controlled by a for-profit (albeit fiscally a public benefit) organization, "Bluesky Social PBC".
"Bluesky" refers to a sum of ATProto concepts, notably the AppView (bsky.app), the main Personal Data Servers (PDS, bsky.social), and the Relays (or firehose, bsky.network). There are others, but they're the 3 important ones.
Anyone can run their own AppView, PDS or Relay AND consume the content from/get their content consumed by the Bluesky infrastructure. HOWEVER, not everything is trivial or cheap to run.
3.0 A PDS, which contains your data (account details but also posts, likes, follows, etc), is trivial and cheap to self-host. Cheaper than hosting a mastodon instance, even, because it does way less stuff and receives way less requests. See https://github.com/bluesky-social/pds
3.1 An AppView (the presentation layer, where users interact with ATProto content) can be created by anyone, but the bsky.app backend is NOT open-source, so there are not a ton of options right now. EDIT: seems like I was wrong and that the bsky.app AppView is open-source: https://github.com/bluesky-social/atproto/tree/main/packages/bsky
3.2 Running a relay is trivial but expensive to self-host. This is because its purpose is to act as an aggregator for all the PDS so that AppViews can consume the data in a way that scales better. The Bluesky relay implementation (bigsky) is open-source: https://github.com/bluesky-social/indigo/blob/main/cmd/bigsky/README.md About 2.5 months ago, 4.5TB of storage was needed and an OVH server costing 150$/month worked to host a full-atmosphere relay (more on that later).
4.0 To make a comparison with #ActivityPub (the protocol behind #mastodon ), the AppView and PDS is the same thing in ActivityPub, and the concept of relay doesn't exist. There are advantages and drawbacks to both architectures, I might do a future post highlighting those.
5.0 With those definitions out of the way, some observations:
5.1 A lot of users self-host their PDS, but the vast majority of users chose the simpler option.
5.2 There are some alternative AppViews built on ATProto, but the vast majority of users visit bsky.app.
5.3 There are very little non-bluesky self-hosting of relays, mostly because of their prohibitive cost. Running the bigsky relay is expensive partly because of design decisions for ATProto and partly because it takes ALL content from ALL accounts for ALL the network on the atmosphere (in this case atmosphere == fediverse but for ATProto). This is like if your Mastodon instance queried ALL servers for ALL accounts querying ALL posts. In the future, there might exist relays that don't scrape ALL data but only a subset of it, which would bring down costs, but it's not yet the case.
6.0 So "is Bluesky decentralized?"
6.1 In theory, yes, everything that bluesky does on ATProto can be.
6.2 In practice, however, the most decentralized part of Bluesky is the PDS, where the user data is stored, and even that is not that decentralized.
6.3 Will it stay this way? I'm hopeful it won't, but I don't know. ATProto is fairly new compared to ActivityPub, and the ecosystem around it was mostly built by the BlueSky company, but I expect this to change in the future. However, the cost of entry for things built on ATProto will always be more than the cost of entry for things built on ActivityPub.
6.4 Things built on ActivityPub will always be more decentralized than things built on ATProto, because of design decisions from both of these protocols.
Among other things, this release brings more helpful details to Site Health and upgrades the Reply block—it now embeds the referenced post, even if oEmbed isn’t supported!
Fetching remote #ActivityPub objects or actors often involves handling #WebFinger lookups, content negotiation, and then parsing potentially untyped JSON.
With #Fedify, it's much simpler: use Context.lookupObject(). Pass it a URI (e.g., https://instance.tld/users/alice) or a handle (e.g., @alice@instance.tld), and Fedify handles the lookup and content negotiation automatically.
The real power comes from the return value: a type-safe Activity Vocabulary object, not just raw JSON. This allows you to confidently access properties and methods directly. For example, you can safely traverse account moves using .getSuccessor() like this:
let actor = await ctx.lookupObject("@alice@instance.tld");
while (isActor(actor)) {
const successor = await actor.getSuccessor();
if (successor == null) break;
actor = successor;
}
// actor now holds the latest account after moves
Starting to feel, more and more, like I need to build my own #ActivityPub thing. This book sounds like a good foundation to build off of. Authored by @evan@cosocial.ca.
I'm working on an equivalent to #BookWyrm but for films (an alternative to #IMDB, #TMDB, #Letterboxd, etc.). I already have a very simple but usable code.
Anyone want to help me with the #ActivityPub stuff?
By quickly glancing through the ATP docs, it seems like a much more pleasant experience to work with over AP but there's probably more to it than just the technical part.
Can anyone #help me understand any atproto downsides?
🚨 INTRODUCING: a new in-progress #rubyonrails#activitypub engine that aims to make it able to add AP features to any Rails app.
It's still a work in progress but i would really love to hear your feedback and ideas on that! Feel free to message me here or open a discussion on github repo.
I believe this is possible and can be built over the ActivityPub protocol, based on what we've learned from the library of things, makerspaces, commons, permaculture, alternative currencies, and so many other amazing concepts and their incredible success stories...
I am currently drafting this project. Let me know if it makes any sense to you...
It's nice when you finish a bit of work that goes well and requires no yak shaving in order to get done.
For the past week I've been struggling again with the #frontend bits of #ONI, the single user #ActivityPub server, when I decided to take a little break and work on something else.
So today I've add support for the traversal resistant file API for the FS storage part of #GoActivityPub. I'm still waiting for the symlink support to be added in the next major #Go version, but other than that we've increased robustness a little bit despite it being designed mainly for full transparency development work and not being run in production environments.
#Fedify is an #ActivityPub server framework in #TypeScript & #JavaScript. It aims to eliminate the complexity and redundant boilerplate code when building a federated server app, so that you can focus on your business logic and user experience.
The key features it provides currently are:
• Type-safe objects for Activity Vocabulary (including some vendor-specific extensions) • #WebFinger client and server • HTTP Signatures • Middleware for handling webhooks • #NodeInfo protocol • #Node.js, #Deno, and #Bun support • CLI toolchain for testing and debugging
If you're curious, take a look at the Fedify website! There's comprehensive docs, a demo, a tutorial, example code, and more:
Unfortunately I need to cancel the #SocialCG#ActivityPub issue triage today. I had a travel mixup and won't have a quiet, private place to hold the meeting. Sorry for the late notice, and please plan on attending next week.
Ich habe auf eigenpod.de auch #ActivityPub aktiviert, d.h. die Webseite selbst ist jetzt im #Fediverse und ihr könnt ihr direkt folgen. So siehts jetzt aus:
Unter @eigenraum_folgen_feedEigenraum postet die Webseite sofort neue Folgen und sonst nichts. Wenn ihr diesen Account auf Mastodon erwähnt, merkt aber keiner was davon!
You can put web+ap URIs into a message (or room description) and ideally a click on those will open your Mastodon client. However if no installed app supports those (the only app that I’m aware of is Fedilab) Conversations will open a browser instead.
Currently no app will create web+ap links but it is fairly easy to handcraft them.
Congrats to @johnonolanJohn O'Nolan and the team at Ghost, which today announced a public beta for users to connect their publications to the fediverse. If you're in their beta, you'll be able to find, follow and interact with people and publications on platforms including Ghost, WordPress, Threads, Mastodon, BlueSky, Flipboard and more. Get details in the blogpost here. If you want to know more about Ghost's approach to decentralization and the open social web, check out John's DotSocial conversation with @mikeMike McCue at the second link.
Listen, as someone that follows many fediverse platforms, @thisismissemEmelia 👸🏻 is one of the most active in the community. She has jumped in and assisted with security and ActivityPub issues across them all.
Please consider contributing to her tip jar if you can, especially for this last bit of advocacy work. Find her contribution options on her profile.
* A Mastodon import (beta) * Improvements to the Welcome-Page * Basic Move functionality * A bunch of Outbox improvements * A ton of smaller changes and fixes
It’s a jam-packed release, led by a beta importer to bring your Mastodon posts into WordPress—plus improvements to make setup smoother when activating the plugin.
Migrated to my own Mastodon. Looks like 27 followers haven't made it here yet, let's see if they arrive later.
I was planning to write my own ActivityPub server, and I even made some progress, but I didn't want to have a non-functional profile in the meantime, so Mastodon it is.