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.
One of the requests I (Evan) have heard often over the years about ActivityPub is to make publishing on the Fediverse as easy as publishing with RSS. To make an RSS feed for a person or a site, a publish provides, dynamically or even statically, a single file, with a simple format, and makes it available over the Web. Other people’s feed reader software can download the feed and show the user either the full content of the site, or enough of a summary to get the user to click a link and read in your browser.
So… why can’t ActivityPub be like that? Make a feed, and let others read it if they want to?
The good news is, it can. ActivityPub defines an entire read-only structure for actors, content, and activities. Pushing content to other servers is entirely optional — you can just tell other servers that you don’t accept remote messages, and they won’t push them. The read-only interface to ActivityPub is rich and extensible — it covers content like text, images, video and audio, but also activities like liking, sharing, and replying. It’s not quite as simple as RSS — it requires a lot more, smaller files — but it’s pretty straightforward.
The bad news is that most widely-used ActivityPub software doesn’t recognize read-only ActivityPub feeds. Most ActivityPub servers expect to send messages to every actor, and to receive messages in reply. They don’t have internal facilities to check ActivityPub feeds regularly for new content and activities.
This isn’t just a technical issue; it’s also an adoption issue. If implementing ActivityPub requires all the infrastructure of our message-passing services — queues, signatures, filtering, fanout — it inhibits software developers and publishers from experimenting with the protocol. Implementing RSS can take a day or maybe a week of developer work. Implementing ActivityPub’s federation protocol can take months. Which one is going to be done in a hackday or a medium T-shirt-size sprint task, and which one is going on the back-back-back-backlog?
To make it easier to understand and support this proper subset of ActivityPub, I published FEP-b06c: ActivityPoll last summer. (“Poll” is in contrast to “publish” — emphasizing the read-only structure.) It’s a profile of ActivityPub, identifying parts of the ActivityPub spec that will work, or not, with a static, read-only ActivityPub publisher. It also includes new terms to easily identify a read-only ActivityPub actor, as well as a way to declare how often a feed is updated (very useful for limiting the load on both the reader and the server sides).
In order to test the profile, and identify shortfalls, I implemented a plugin for the static site generator (SSG) software, Jekyll. Using a static site generator keeps this process honest — there’s no temptation to add just a teensy bit of dynamic content generation; it has to be entirely static. If we can show interoperability with actors implemented with an SSG, we’ve shown that static ActivityPub publishing is truly possible.
The plugin is called jekyll-activitypub-static (there’s already a jekyll-activity-pub plugin, which uses off-site dynamic endpoints to implement the federation protocol, so this one emphasizes that it’s static). It’s in the rubygems.org repository, so you can just add the gem name to your Gemfile for your Jekyll site, and it should install correctly. The configuration is pretty straightforward, and has pretty reasonable fallbacks, but you can tweak it to get more specific features.
I’ve got an example actor on GitHub Pages at @evanp . You can search for it in Mastodon, and view the profile, but you can’t follow it directly. Other front ends can view it more directly — please tell me if yours can!
If you’ve got a Jekyll site, please try out jekyll-activitypub-static and let me know what you think. Fair warning — the Webfinger support depends on having your site deployed at the root of the domain. There are probably some ways to work around that — let me know if you find one! If you have changes or enhancements you think can be made to the plugin, let me know.
And if you’ve got a full-featured implementation of the ActivityPub federation protocol, please consider implementing a polling structure for static actors. FEP-b06c covers most of the caveats, but please feel free to leave a comment if you find another gotcha. I’ll be right in there with you — I’m going to implement it in onepage.pub and activitypub.bot.
Thanks to everyone who has commented on FEP-b06c, and to people who’ve tried and contributed to jekyll-activitypub-static. I look forward to more implementations!
Week in Fediverse 2026-09-04
Servers
- Ktistec v3.12.0
- Mastodon v4.7.1
- Vernissage v1.43.0
- snac v2.95
- ActivityPub for WordPress v9.3.0
- Owncast v0.3.0
- gathio v1.6.6
- NodeBB v4.15.2
- tootik v0.25.2
- NeoDB v0.18.0
- Bonfire v1.0.7
Clients
- PleromaFE v2.11.4
- Fedilab v3.43.3
- Tuba v0.11.1
- Pixelix v5.2.0
- Summit v1.85.0
- Shoot Web App v1.3.0
Tools and Plugins
- FediFetcher v8.2.0
- Poduptime v6.3.2
- Enable Mastodon Apps v1.6.3 (WordPress plugin)
For developers
- APx v0.27.0
- Library progress report - September 2026 (GoActivityPub)
Articles
- A reasonably practical guide to validating RFC 9421 HTTP Signatures for ActivityPub in PHP
-----
#WeekInFediverse #Fediverse #ActivityPub
Previous edition: https://mitra.social/objects/01a04a26-eede-72b0-a5e9-f244c3ff2142
«Building a decentralized bulletin board (and accidentally reinventing Nostr)»
Let's build a bulletin board with no account, no sign-up, and no single server behind it. By the time we finish, we'll have accidentally reinvented two technologies that already existed: FidoNet (1984) and Nostr.
🆕 blog! “A reasonably practical guide to validating RFC 9421 HTTP Signatures for ActivityPub in PHP”
If you're reading this, you've probably been hitting your head against a brick wall trying to parse and decipher the new HTTP Signatures sent by Mastodon and other Fediverse servers.
This is a…
👀 Read more: https://shkspr.mobi/blog/2026/09/a-reasonably-practical-guide-to-validating-rfc-9421-http-signatures-for-activitypub-in-php/
⸻
#ActivityBot #ActivityPub #mastodon #php #webdev
Thanks also to: mkljczk, clairemont, Sprite_tm, wincentbalin, koru and anyone else I may have inadvertently overlooked who contributed to the improvements in this release!
I submitted a Pull Request to update MacPorts' snac to 2.95 here:
https://github.com/macports/macports-ports/pull/34472
GitHub Continuous Integration checks passed OK!
It's up to someone else with commit access to merge it.
#snac #MacPorts #OpenSource #ActivityPub #Mastodon #NoDatabaseNeeded
#NoJavaScript #NoCookiesEither #NotMuchBullShit #snacAnnounces
Fixed a bug in the notification page that made snac hang forever while trying to read abnormally big files.
Improved support for text-only web browsers: it's now possible to configure a set of web browser user-agent strings that will receive simpler HTML in the private timeline web UI. Basically, it consists in avoiding details / summary HTML tags as much as possible.
Added some fixes to media proxy code.
Fixed EmojiReact code to allow any emoticon defined in emojis.json, not only those with colon-wrapped identifiers.
Fixed a bug in notification filtering (paging was sometimes incorrect).
Added a notification filter for Webmentions.
Mastodon API: Don't return reactions count as string (contributed by mkljczk), implemented GET /v1/media (contributed by clairemont).
Fixed bug in documentation examples (contributed by Sprite_tm).
Updated Ukrainian and Russian translations (contributed by wincentbalin and koru).
If you find #snac useful, please consider buying grunfink a coffee or contributing via LiberaPay.
I realized we didn't put together any release notes for v4.15.0, so here they are 
For reference, v4.15.0 was released 12 August 2026.
[...]
Security FixesWe receive many reports for vulnerabilities via our bug bounty program, and we encourage people to poke around and find vulnerabilities to report.
Note that as of today (1 September 2026), any reports compiled with the help of large language models are exempt from the bounty payment.
From v4.14.0 to v4.15.0 there were at least five security fixes shipped — we encourage all admins to update to the latest stable version at all times.
Voting on posts used to wait for the round-trip to complete. On high-volume instances this caused a bit of a delay between a vote and its response, so the front-end now just reflects the new vote without waiting for a confirmation from the backend.
@baris says "feat: update uploads to look nicer
" so purportedly, it looks nicer. Check it out 
Chat privileges are now exposed for fediverse users. Existing sites should automatically grant this privilege to the fediverse user. If you want to restrict chat messages from remote users, disable this setting.
A couple of server-side improvements to the ActivityPub note/reply handlers so fewer database calls are made.
Queued topics now automatically pull for replies when accepted, without waiting for someone to enter the topic itself.
Added a configurable age cutoff for auto-categorization filters.
Activity Intents are now properly gated behind the global "activitypub enabled" switch.
#FediHood now supports #Lemmy through #ActivityPub. You can subscribe/unsubscribe from groups, read threaded discussions with their upvote scores, and reply or upvote yourself (through the fav button).
This is the first step: FediHood will also automatically split messages into city, region and country groups that everyone on the fediverse using groups will be able to interact with.
«There is no such thing as full decentralization»
There's always an axis that centralizes: identity, connectivity, discovery, or cost. The useful question isn't "is it decentralized?", it's which of these it sacrificed, and what that costs you the day that point breaks.
https://en.andros.dev/blog/603e4e90/there-is-no-such-thing-as-full-decentralization/
#Web #Fediverso #ActivityPub #XMPP #OrgSocial #IndieWeb #Nostr
lia, a bun type creature
[she/they · sie/ihr oder es/deren/denen] » 🌐
@lianna@micro.webgarden.click
one thing i always wondered but couldnt be bothered to check
if i edit my post here on fedi to add/remove/change semantic information contained therein (e. g. hashtags, mentions, language ...), does it actually cause the events associated with those to still trigger reliably even remotely?
like for example, if I edit my post to mention someone, do they still get a notification? if I add a hashtag to my post afterward, does my post appear in the relevant hashtag subscriptions? is this consistent throughout federation?
abuuba 1.0 is out
A Fediverse server built with Elixir and Phoenix. A drop-in replacement for Mastodon. abuuba.com
All 289 client API endpoints
Keeps your domain, accounts, and existing phone tokens
Timelines at least 12× faster
Fan-out to 10,000 followers 68× faster
Less compute. Lower hosting costs.
MIT licensed
Swap it in. Keep everything. Go faster. Pay less.
And a friendly nudge to our favorite sparring partner @Mastodon@mastodon.social 🐘 meet 🐆.
Your move. Show us how fast a mastodon can run. 😉
Shoutout to @wintermeyer@vutuv.de who built abuuba because vutuv.de needed a fast Fediverse peer.
🆕 blog! “ActivityBot is the recipient of an NLnet grant!”
Back in February, I applied for NLnet's Next Generation Zero grant. They were looking for Fediverse projects to help rewild the social media landscape. Or, as they describe it:
Reclaim the public nature of the internet
Small and medium-sized R&D grants between 5.000 and 50.000 euro,…
👀 Read more: https://shkspr.mobi/blog/2026/08/activitybot-is-the-recipient-of-an-nlnet-grant/
⸻
#ActivityBot #ActivityPub #fediverse #NLnet
I recently discovered that Jorge Aguilera (@jorge) gave a 1 hour introduction to #ActivityPub in Spanish called "ActivityPub: El Protocolo que Impulsa el Fediverso" at Commit Conf in Madrid and the whole thing was recorded:
https://koliseo.com/commit/2026/agenda/1?selected=JNIEz5zgefpMwrJMRpl7 #fedidev #fediverso
If you know anyone working on an ActivityPub project and they need any advice/feedback/help or want to spread the word, tell them to DM me! I am more than willing to help or spread awareness! #activitypub #fediverse
Somewhere else, this is a patent fight. Here it's a GitHub issue.
https://github.com/pixelfed/starter-kits/issues/1
Almost 2 years ago I started planning federated Starter Kits. @Mastodon took the idea, turned it into a FEP, and built it with my feedback rather than around it.
It shipped in @loops this year. Mastodon shipped Featured Collections months later.
Compatible. Collaborative. Consent-driven 🚀
https://blog.joinloops.org/introducing-starter-kits/
https://blog.joinmastodon.org/2026/06/mastodon-4.6/
#StarterKits #FeaturedCollections #ActivityPub #Collaboration
Name another photo app that will happily send you to a competitor.
If Pixelfed isn't for you, there are many amazing alternatives like:
- @frequency
- @gotosocial
- @admin
- @vernissage
All of them let you share images. All of them talk to Pixelfed. Leaving isn't a punishment here, because you never lose the network.
When you put people first, you build doors instead of cages.
If Pixelfed isn't for you, maybe one of these are:
- @frequency
- @gotosocial
- @admin
- @vernissage
Every one of these can share images, and every one of them federates with Pixelfed. Your followers, your posts, your reach: they come with you.
ActivityPub means no one has to be trapped anywhere. That's the magic.
❤️
Week in Fediverse 2026-08-28
Servers
- Hollo v0.9.13
- gush! v0.0.41
- tootik v0.25.0
- Mitra v5.10.0
- Pixelfed v0.12.9
- Hollo v0.9.15
- Funkwhale v2.0.10
- PieFed v1.7.13
- tootik v0.25.1
- NeoDB v0.17.8
Clients
- Pachli v3.8.1
- Fedilab v3.43.2
- RaccoonForFriendica v1.1.0
For developers
Protocol
- FEP-49eb: Batched Inbox Delivery
Articles
- A crawler wanted to know who talks to whom on our server
- The Problems and Successes of Fediverse Comments on my blog
- The Fediverse is Throwing a Music Festival
-----
#WeekInFediverse #Fediverse #ActivityPub
Previous edition: https://mitra.social/objects/01a0269e-d9e5-7a03-a62d-6ef77099e4a7
What are the most important issues and discussions about the Open Social Web we need to have this late summer and fall?
#FediForum #FediForumFriday #ActivityPub #ATProtocol #Fediverse #atproto
@hongminhee how can we get more East Asian #ActivityPub developers involved in the #W3C #SocialCG and #SocialWG?
There are now more than 700 users on #FediHood, and I've added new topics.
You can tailor your timeline in three ways:
- The distance from your city
- The topics you want to see
- The languages
Topics are more powerful than hashtags (in the context of the project) because:
- They avoid typos
- They work whatever the language
- One mute covers everything, unlike hashtag variants
It also fully supports the #ActivityPub Events used by #Mobilizon.
If you want to join: https://fedihood.social/
RE: https://aus.social/@maddyunderstars/117127750677454333
FEP-49eb: Batched Inbox Delivery
I've wanted batched inboxes for a while, and so here's a FEP for how you might do that.
My big problems with this currently are:
- The `object` of the `Add` is a `Collection`, which would usually mean to add the collection obviously, but here we add the collection's items. It's like this because we need to add some metadata such as start time and ordering, and we can't edit the activities themselves because then the proofs fail when those extra properties are removed when forwarding to other servers. Further, editing the activities might lead to conflicts, and using a prefixed prop like 'fep-49eb:ordering` just leaks that batching was used if forwarding was to happen without removal
- The capability discovery here is annoying I think. I didn't want to add a new `batched` inbox property on actors because then it's completely incompatible with multibox, and I want multibox to remain optional here too.
https://codeberg.org/MaddyUnderStars/fep/src/branch/feat/fep-49eb/fep/49eb/fep-49eb.md
I know the Pixelfed codebase is messy, but I'm a far better Laravel dev than when I started it, and @phpstan has been keeping Loops rock solid at every level.
This week: preparing the new mobile app, fixing comment threading so you never miss a reply, and laying the foundation for the next-gen APIs that will power the new webUI and mobile app.
Tests are coming to lock in stability too. Pixelfed is getting the Loops treatment 💅 🚀
I will admit, I did get a bit carried away with @pixelfed features over the years.
Collections, DMs, Ephemeral Stories, Filters, Groups and Portfolios were all started with good intentions, but without the continued focus and stability they deserve.
Once I get caught up with bug fixes and making the core features more solid, they are up next!
No new features will be added until the platform is as rock solid as Loops is 😉
Oh and I added an #ActivityPub blog 👆to my website that I think? should work with other blog services on the #fediverse
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.