jrollans.com is a Fediverse instance that uses the ActivityPub protocol. In other words, users at this host can communicate with people that use software like Mastodon, Pleroma, Friendica, etc. all around the world.
This server runs the snac software and there is no automatic sign-up process.
As part of my book “ActivityPub: Programming for the Social Web“, I created a coding example to show how to program for the ActivityPub API. ap is a command-line client, written in Python, for doing basic tasks with ActivityPub.
For example, you can log into a server using this command:
ap login yourname@yourserver.example
Once you’re logged in, you can follow someone:
ap follow other@different.example
Or, you could post some content:
ap create note --public "Hello, World"
This isn’t enough to have a real social networking experience, but I think it’s pretty useful for testing an ActivityPub API server, or automating some repetitive tasks.
I should note quickly here that not all ActivityPub servers support the ActivityPub API. It’s an under-utilized part of the ActivityPub standard. In particular, Mastodon, Threads, Flipboard, and other services don’t support the API. There’s a pretty good list of servers and clients that do support the API in this Codeberg issue.
Suffice it to say, unless you’re actively working with one of those platforms, or you are writing your own, you’re not going to get much use out of ap. It will probably give you an error message like “No OAuth endpoints found” if it can’t use the service.
I’ve never packaged ap for distribution; it was always supposed to be example code. But given the recent interest in the ActivityPub API, including the work going on in the ActivityPub API task force, I decided to get it into shape for installation by developers working on other apps. My friend Matthias Pfefferle of Automattic asked me about it when we were at FOSDEM this year, and I was embarrassed to see how difficult it was for him to use.
So, I’ve made two big upgrades to the package. The first was actually making it a package, and distributing it! I upgraded the package management framework to uv, which seems like a good bet for now, and pushing the application to PyPI, the Python Package Index. It’s visible at https://pypi.org/project/activitypub-cli/ now. (Note: different package name from the command name! The PyPI “ap” package name was taken a while ago.)
You can now install the application in one shot with this command on a computer that has Python on it:
pipx install activitypub-cli
You can test that the application installed correctly in your path by running the version command:
ap version
That should show the same version as is currently on the pypi.org page for the project.
The second change was implementing the current OAuth 2.0 profile best practices. I’ve upgraded the login flow so it tries a lot of different options for identifying itself to the server: CIMD, FEP d8c2, and Dynamic Client Registration. It tries to do them in preferential order; it uses permanent, global client identifiers before dynamic ones.
I’m especially interested in testing this command-line client against other servers. If you’re developing an ActivityPub API server, please install the ap command and try it out against your (development!) server. Report a bug if it doesn’t work well, or send me a DM at @evanprodromou if it works OK. Given time, I think ap can be a useful first smoke test for ActivityPub API implementations.
Today, I will be importing the Mastodon archive of @hashtaggames into our new #ActivityPub #Wordpress blog where the games are now being federated across the Open Web. It is not supposed to import as new posts and the dates are supposed to be retained. I hope this works and I hope I don’t spam the #HashTagGames tag. But, if they do federate as new posts, and those of you that get notifications of new posts, I’m sorry and please feel free to play any old games that comes your way.
With that said, I am not sure if my replies will also come through as new posts or not because the WordPress Mastodon import plugin is lacking really good documentation, as far as I can find.
Fingers cross that I don’t blew this up
Your host, @paul
#ActivityPub #HashtagGames #Wordpress https://hashtaggames.online/2026/03/11/111436/RE: https://example.viii.fi/posts/69b029a4-2ee5-0f49-b23b-333d1e8ee38b.json
OK! Editing posts now works.
A fully complete #ActivityPub server in under 80KB of code.
https://gitlab.com/edent/activity-bot/
I think supporting polls will be too hard, so I'm declaring this feature complete (although not bug free) for now.
If you have any suggestions for how to improve it - let me know 🙂
#ActivityBot
Starter Kit Federation is ready 🚀
This will be compatible with Mastodon Feature Collections.
Shipping soon!
cc @dave
#ActivityPub support in #Madblog
https://blog.fabiomanganiello.com/article/Madblog-federated-blogging-from-markdown
I am glad to announce that Madblog has now officially joined the #Fediverse family.
If you want to test it out, search for this URL on your Fediverse client.
Madblog has already supported #Webmentions for the past couple of weeks, allowing your blog posts to be mentioned by other sites with Webmentions support (WordPress, Lemmy, HackerNews…) and get those mentions directly rendered on your page.
It now adds ActivityPub support too, using #Pubby, another little Python library that I’ve put together myself (just like Webmentions) as a mean to quickly plug ActivityPub support to any Python Web app.
Webmentions and Pubby follow similar principles and implement a similar API, and you can easily use them to add federation support to your existing Web applications - a single bind_webmentions or bind_activitypub call to your existing Flask/FastAPI/Tornado application should suffice for most of the cases.
Madblog may have now become the easiest way to publish a federated blog - and perhaps the only way that doesn’t require a database, everything is based on plain Markdown files.
If you have a registered domain and a certificate, then hosting your federated blog is now just a matter of:
mkdir -p ~/madblog/markdown
cat <<EOF > ~/madblog/markdown/hello-world.md
# My first post
This is my first post on [Madblog](https://git.fabiomanganiello.com/madblog)!
EOF
docker run -it \
-p 8000:8000 \
-v "$HOME/madblog:/data" \
quay.io/blacklight/madblogAnd Markdown files can be hosted wherever you like - a Git folder, an Obsidian Vault, a Nextcloud Notes installation, a folder on your phone synchronized over SyncThing…
Federation support is also at a quite advanced state compared to e.g. #WriteFreely. It currently supports:
Interactions rendered on the articles: if you like, boost, quote or reply to an article, all interactions are rendered directly at the bottom of the article (interactions with WriteFreely through federated accounts were kind of lost in the void instead)
Guestbook support (optional): mentions to the federated Madblog handle that are not in response to articles are now rendered on a separate /guestbook route
Email notifications: all interactions can have email notifications
Support for quotes, also on Mastodon
Support for mentions, just drop a @joe@example.com in your Markdown file and Joe will get a notification
Support for hashtag federation
Support for split-domain configurations, you can host your blog on blog.example.com but have a Fediverse handle like @blog@example.com. Search by direct post URL on Mastodon will work with both cases
Support for custom profile fields, all rendered on Mastodon, with verification support
Support for moderation, either through blocklist or allowlist, with support for rules on handles/usernames, URLs, domains or regular expressions
A partial (but comprehensive for the provided features) implementation of the Mastodon API
If you want you can follow both the profiles of my blogs - they are now both federated:
My personal blog: @fabio (it used to run WriteFreely before, so if you followed it you may need to unfollow it and re-follow it)
The #Platypush blog: @blog
Imagine being able to curate lists of accounts by topics, allowing others to easily follow them after they consented to be included.
Meet Starter Kits.
Consent driven discovery that federates across servers and software.
With a rich browsing experience so you can explore kits without an account.
Shipping Soon 🚀
Hmm.. In case you're wondering which topics could be discussed on an unconference about fediverse integration in/for public institutions...
check out this preliminary overview:
https://www.fedivariety.org/noaw-session-proposals
wow... all kinds of topics still to be shaken *and* stirred at http://noaw.org of course—looking fwd!
#jugglingthefediverse #fedivariety #noaw #unconference #fediverse #opensocialweb #socials #publicspaces #activitypub #research #activism #ccc #amsterdam
Every day I’m more convinced that the Fediverse’s slow mainstream adoption isn’t really about usability.
People say it’s because it’s hard to join, the terms are confusing, or the apps aren’t polished enough. Maybe a little. But honestly… look at the platforms people already use.
Finding anything on LinkedIn is painful.
Trying to locate the original video on TikTok is a scavenger hunt.
Facebook is still full of weird bugs and odd UI choices.
Instagram hides posts behind algorithms.
Twitter/X constantly changes the rules of engagement.
None of these platforms are exactly “easy.”
People stay because their friends are there. Because the big creators are there. Because that’s where the conversation already lives.
And, if we’re honest, because these platforms are engineered around a very effective reward loop: notifications, likes, infinite scroll. A dopamine machine. You learn the confusing terms and awkward interfaces because there’s a constant reward for doing so.
So yes, making the Fediverse easier to join absolutely helps.
But what would help even more is something simpler:
more mainstream, recognizable, official accounts showing up here.
That’s how networks grow.
People follow people not platforms.
PRs must not incorporate any material generated by or with the assistance of any so-called "generative AI" tool or LLM.
Sharkey.Feddit.Social更新完毕!
2025.4.6 "Security fixes 2, electric boogaloo"
This PR fixes several security issues that will be disclosed in further detail at a future date.
fd36256b 2025.4.6 Created 5 hours ago by julia's avatarhttps://sharkey.feddit.social
https://activitypub.software/TransFem-org/Sharkey/-/releases/2025.4.6
https://sharkey.team/notes/ajka8rybkjf80061
https://transfem.social/notes/ajkq30j9wury01jb
When someone asks me what the #Fediverse, #Mastodon or #ActivityPub is I'll use this illustration from UNIX Review, April 1985.
I wish #ActivityPub was a "pull" protocol instead of a "push" protocol. The way it works, whenever you take an action, it sends that action to all followers. I would prefer if it simply stored them and then let each follower pull them when they see fit.
That would introduce latency and more async comms as your messages wouldn't pop up into someone elses feed until their software fetch the data, but I think it would make it easier to self host.
@soapdog There's a poll-based version specced at https://fediverse.codeberg.page/fep/fep/b06c/, sadly with no notable implementations (wouldn't be interactable by Mastodon etc.), but it's an opportunity to break new ground as an implementer if you know anyone who'd like to experiment with it.
RE: https://indieweb.social/@laurenshof/116103545853411360
This thread talks about going back to an #ActivityPub users's home server to validate a user's content, because you can't trust that the event you got for it is unmodified.
But you can't trust what the home server tells you the content of the message is either! There's nothing stopping a home server from serving a modified version of your content every time it's requested, say, to inject ads into it, or censor bits it doesn't like.
Or to just completely fabricate new content from you.
Recently, there was a discussion about generic #ActivityPub servers. Several people claimed that they were working on one, but it turned out that their "generic" servers only support activities defined in the ActivityPub specification. Such a server shouldn't be called generic. It is not difficult to build, neither it is an interesting concept because competing protocols (e.g. Nostr) already offer much more.
I've been writing a #FEP that describes how to build a real generic server. It is not finished yet, but I feel like now is a good time to publish it:
FEP-fc48: Generic ActivityPub server
This kind of server:
- Can process any object type, and can process non-standard activities like EmojiReact.
- Compatible with FEP-ae97 clients.
- Does not require JSON-LD.
I attempted to implement it when I was researching security properties of FEP-ae97 API: https://codeberg.org/silverpill/fep-ae97-server. Back then I didn't know what to do with side effects, but now I think that we can simply force clients to specify them.
RE: https://mastodon.social/@HolosSocial/116183535316096143
Some news from #HolosSocial development. The latest release moves media processing to the device. Videos are transcoded locally before upload. Users can store media on their own S3 or WebDAV server, and the resulting URLs are used directly in #ActivityPub activities. The relay server handles neither transcoding nor media storage. Each user brings their own resources to the #Fediverse.
fedicat boosted#Holos 1.0.0-rc-4 published!
Sync is now much faster thanks to Bloom filters. You can set a TTL on posts when composing or configure a default in settings.
If you have a WebDAV/S3 server, the app can upload media there and use public URLs in ActivityPub.
Videos can be compressed before upload. An experimental vertical video feed is available.
A new Discovery timeline lets you explore posts by tags and language.
More: https://codeberg.org/tom79/Holos-App/releases/tag/1.0.0-rc-4
Week in Fediverse 2026-03-06
Servers
- Hollo v0.7.5
- Lemmy v0.19.16
- Ktistec v3.3.2
- Stegodon v1.8.1
- GoToSocial v0.21.1
- ActivityPub for WordPress v8.0.0
- gathio v1.6.2
- Misskey v2026.3.0
- Castopod v1.15.5
- flohmarkt v0.16.1
- NodeBB v4.9.1
- PieFed v1.6.9
- Lemmy Development Update February 2026
- FediProfile: A linktree for the fediverse - ActivityPub enabled profiles
Clients
- Sengi v1.9.0
- Summit v1.79.1
- Blorp v1.10.8
Tools and Plugins
- Poduptime v6.3.0
- share.joinmastodon.org: Share widget for Mastodon
Protocol
- FEP-82f6: Actor statuses (Final comments)
Articles
- Gotosocial Reverse Proxy With Wireguard
- FR#156 – Share Where?
-----
#WeekInFediverse #Fediverse #ActivityPub
Previous edition: https://mitra.social/objects/019ca0a0-4fce-c180-89e4-071244c530a4
Here is the new feature that allows you to save your #ActivityPub media in your own cloud, giving you more sovereignty over your data. Your media stays available even when your device is offline.
Ist schon etwas her, dass sich im Beitrag zum #activitypubplugin etwas getan hat, aber nun war es mal wieder fällig. Später oder im Lauf der nächsten Tage muss ich da wohl nochmal etwas ergänzen. Vorläufig ist aber der Abschnitt über die Buttons in den Fediverse Reaktionen neu hinzugekommen.
Viele Spaß damit.
I'm thinking about setting up and running my own #relay #server for #mastodon and #pleroma as there seems to be a decreasing number of these that take in core and key traffic as times goes by. Resulting in fewer initial servers being maintained long term. The #fediverse and #ActivityPub deserve some love.
The #ActivityPub for #WordPress team is just crushing it. They just released 8.0.0 of the integration. It’s getting better all the time.
Huge thanks to @pfefferle for amazing work!
https://activitypub.blog/2026/03/05/8-0-0-smash-that-like-button/
@wjmaggos @scripting I keep thinking we need a way to tie all of our Fedi profiles together. For example, if my CMS supports #ActivityPub or #ATProto, and I'm also here on Mastodon with Bridgy connecting me to Bluesky, and it's all reasonably open... somehow my profile ought to be a composite of all my available federated resources...
Loops just shipped support for more interactionPolicy types, giving our community more control to limit certain interactions, like disabling comments or QuotePosts.
Huge shout out to GotoSocial and @dumpsterqueer for stewarding this ActivityPub extension to better protect our communities.
Isn't it amazing what is possible when projects that would normally compete with each other, can instead collaborate and build safer communities for all?
We all win when we put people first.
Loops Starter Kits are almost ready to ship!
Consent is crucial to prevent abuse, so you will need to get approval for every account you want to include in each kit.
We will add a setting to auto approve every request, as well as the ability to disable this for your account to auto reject if desired.
Shipping soon!
In the #Fediverse, most software is built around a specific platform model. One for microblogging, one for video, one for photos... and new ones will keep coming.
With #Holos, your phone runs your own #ActivityPub server. You control your data and can use your own domain as your identity.
Built on the protocol, not a platform model, Holos is not limited to a single use case. One account that adapts to your needs.
That's where we're heading, and we hope for your support.
Week in Fediverse 2026-02-27
Servers
- Bookwyrm v0.8.5
- Gush! v0.0.31
- Hollo v0.7.4
- flohmarkt v0.16.0
- Mastodon v4.5.7
- Wafrn v2026.02.02
- GoToSocial v0.21.0
- Loops v1.0.0-beta.10
- Ktistec v3.3.1
- Mitra v4.19.0
- Stegodon v1.8.0
- Hometown v1.2.0
- gathio v1.6.1
- Castopod v1.15.5
- NodeBB v4.9.0
- PieFed v1.6.7
Clients
- Pachli v3.4.0
- tooi v0.22.0
- Summit v1.78.1
- Photon v2.3.0
- Blorp v1.10.3
- Phanpy changelog
Tools and Plugins
- Poduptime v6.2.1
- Fediverse invitation
For developers
Protocol
- FEP-a427: Server Domain Migration
- FEP-fc48: Generic ActivityPub server
Articles
- Self-Hosting Pixelfed: Federated Instagram Without the Algorithm
-----
#WeekInFediverse #Fediverse #ActivityPub
Previous edition: https://mitra.social/objects/019c7c6f-742a-7930-2413-73b1d9611c99
an interesting thread on Bluesky about why people are choosing to build on #ATProto instead of #ActivityPub
https://witchsky.app/profile/did:plc:rtf3bjc3w2yn4syxtm4r7jt2/post/3mfrp6tovy22g
I’m building a new tool and looking for volunteers to test it! A #fediverse linktree.
It’s designed for two types of people:
Normies / newcomers – Think of it like a free, privacy-respecting Linktree. No trackers, no ads. But here's the cool part: it's a Trojan horse for the fediverse. Your profile link is itself an ActivityPub actor. That means people can interact with it directly in the fediverse, and it encourages exploration of open platforms.
Fediverse users, If you have multiple accounts (#Mastodon, #Pixelfed, Loops, a federated blog…), you know the struggle: sometimes you just want one persona to follow. This tool gives you that. It doesn’t post on its own (read-only), but it boosts all your other accounts and even has its own #ActivityPub inbox. PLUS it can receive and show your badges issued by @badgefed !
Interested in testing? Reply here, I will reach out in the next 24-48hrs with an invitation link.
So on the official #matrix page it says there are no bridges for #activitypub is this the case or is it there’s no official ones. Would love to hear from anyone with experience.
Hashtag following also allow URLs to RSS feeds of ActivityPub objects (like e.g. https://mastodon.social/tags/ThankYouTuesday).
Users can now configure a webhook to receive an HTTP POST for every notification. This can be useful for implementing bots that react to activities, like autorepliers, chatbots or interactive textual games (see snac(1) for more information).
The number of pending follow confirmations is shown next to the "people" link.
Faster performance metrics (contributed by dandelions).
Improved lowercasing in hashtags (contributed by postscriptum).
A search-by-url tweak for implementations that return 200 for invalid webfinger queries (e.g. piefed).
Mastodon API: added follow confirmation endpoints, fixed collisions in attachment file names.
Fixed potential crashes in attachment uploads.
If you find #snac useful, please consider buying grunfink a coffee or contributing via LiberaPay.
Notifications are now shown in a more compact way (i.e. all reactions are shown just above your post, instead of repeating the post ad nauseam for every reaction).
New command-line option unmute to, well, no-longer-mute an actor.
The private timeline now includes an approximate mark between new posts and "already seen" ones.
Fixed a spurious 404 error in the instance root URL for some configurations.
If you find #snac useful, please consider contributing via LiberaPay: https://liberapay.com/grunfink/
This release has been inspired by the song The Answers to the Questions by #Christabell and #DavidLynch.