Tag: Signatures

  • 9.3.0 — Modern Signatures and a Summer of Security Reports

    It has been almost three months since 9.0.0, and eight releases: 9.0.1, 9.0.2, 9.1.0, 9.2.0, 9.2.1, 9.2.2, 9.3.0, and now 9.3.1. Together they added seven new things, closed ten security issues, and fixed close to fifty bugs, which is a very different balance than usual.

    This post covers the new things first, and then explains where the rest of the summer went.

    Modern Signatures, On by Default

    Every message your site sends to the Fediverse carries a signature, the digital equivalent of a wax seal on an envelope. In July 2025 we wrote about the move from the old draft format to RFC 9421, the official standard. Back then, sending with the new format was a setting for early adopters, and we promised to turn it on for everyone once the rest of the Fediverse was ready.

    With 9.3.0 it is on by default. Your site now signs outgoing requests with RFC 9421, and falls back to the old format when the server on the other side does not understand it yet. For almost everyone this changes nothing you can see. Your posts keep arriving, your follows keep working.

    A small number of servers advertise support for the new format but handle it differently in practice. If your posts suddenly stop arriving on one particular server after this update, you can switch back. Open the ActivityPub settings, click Screen Options in the top right, enable Advanced Settings, and turn off the modern signature format in the Advanced tab. Please let us know in the support forum which server it was, so we can look into it.

    Your Podcast Travels With Its Audio

    If you publish podcast episodes with Jetpack, your episodes now federate as episodes. The audio file and the cover art travel with the post, so your followers get a playable player in their Fediverse app instead of a link they have to click through.

    A screenshot of a WordPress hosted Podcast Episode on Mastodon.

    Version 9.1.0 did the same for Podlove Podcast Publisher, where the episode summary now goes out with the post rather than being dropped.

    A Quieter Inbox

    Likes, reposts, and quotes are lovely until there are two hundred of them and your email inbox has two hundred entries. Until now, switching those off meant switching off notifications for real comments and replies too.

    Screenshot of the E-Mail Notification settings in WP-Admin.

    9.3.0 separates them. There is a new notification setting that turns off emails about likes, reposts, and quotes, while comments and replies from the Fediverse keep reaching you. Reactions still show up on your post, you just stop hearing about each one individually.

    Smaller Things You Might Notice

    • Fediverse and ActivityPub logos in the editor. On WordPress 7.1 and newer, both logos are part of the block editor’s icon library, so you can use them in a Social Icons block or anywhere else an icon fits.
    • The follow, reply, and reaction dialogs speak up. Screen readers now announce errors in those dialogs instead of leaving people guessing why nothing happened.
    • Scheduled posts show the right preview. Since 9.1.0, a scheduled post shows the Fediverse Preview, so you can see what your followers will get before it goes out.
    • Avatars that actually update. The scheduled refresh of remote profiles was not refreshing anything. Commenters kept the avatar and bio they had when they first showed up. Fixed in 9.1.0.
    • Two new FAQ guides, added in 9.0.1, for the two questions we get most often: follow requests stuck on “pending”, and comments from the Fediverse not appearing on your posts.

    For People Building on the Plugin

    9.1.0 added an actor autocomplete endpoint, so a Fediverse app connected to your site can offer typeahead search when you are mentioning someone. There is also a new filter for sites that need to federate inside a private or internal network, which mostly matters for intranets and staging setups.

    In 9.3.0, apps connected through the ActivityPub API now use the standard permission names from the specification, and fetching remote content through your site counts as reading rather than posting. Apps also see the real error when a post is missing, instead of a generic failure that told them nothing.

    Where the Summer Went

    Seven new things in three months is not much. Here is the reason.

    Since June we have had a steady stream of security reports. Ten of them became entries in the changelogs of 9.1.0 and 9.3.0, and a few more landed quietly as fixes. Every report has to be read, reproduced, judged, fixed, tested, and shipped, and the fix has to be written so it does not break the sites that already work. For a team our size that is most of a week each time, sometimes more.

    This is not a complaint, and a real thank you to everyone who sent a report and then waited while we worked through the queue. Nearly all of the reports were real, and every one of them made the plugin safer for the people running it. This is responsible disclosure working the way it should. It just means the roadmap moves slower than it looks on paper, and features that were planned for July are still open.

    We are not alone in this. WordPress core is seeing the same wave, and for the same reason: AI models have become good enough at reading code that finding a plausible vulnerability is now cheap. The security team wrote about it in The Core Security Initiative, and the project started Protect The Shire to review the code in the plugin and theme directories at a scale that was not possible before. The same tools that raise the number of reports also help everyone work through them. On balance, we think this is good for the ecosystem, even on the weeks where it does not feel like it.

    In general terms, the security work in these releases covers four areas:

    • Content from other servers is cleaned before it is stored, and again before it is displayed, so what another server sends cannot influence how your site behaves.
    • Data that belongs to you stays yours. Your followers, the profiles your site has cached, and your reader posts are not readable by logged-out visitors, and the setting that hides your follower list is respected everywhere.
    • Activities are checked more strictly against the account they claim to come from, so a server cannot act on behalf of someone else.
    • Apps you connect can only do what you allowed them to do, and nothing wider.

    We are keeping this vague on purpose. The details are in the reports, and we would rather not hand a recipe to anyone whose site has not updated yet. If you run the plugin, please update.

    What the Fixes Cover

    The fifty or so fixes across these releases are not one story, but they fall into a few groups:

    • Finding each other. Profiles and posts were not always found when an address contained unusual characters, or was written with different capitalisation, or when the other server answered in an unexpected shape. Several fixes make lookups work in all of those cases.
    • Reactions arriving once. Likes and boosts could be recorded as duplicate comments, or come back after you marked them as spam. A deletion on Mastodon did not always remove the matching comment on your site. Both are fixed.
    • Caching. ActivityPub responses were sometimes stored by page caches meant for regular web pages. Since 9.2.0, those responses are served only to clients that ask for ActivityPub data and nothing else, which keeps them out of caches like LiteSpeed and Surge. Support for the WP REST Cache plugin was removed as part of this.
    • Publishing edge cases. Posts scheduled for a future date were removed from the Fediverse when edited. Hidden page elements, like the text inside a closed dialog, ended up in the content sent to your followers. Backslashes vanished from imported titles. Small things, annoying every time.
    • Living with other plugins. Fixes for sites running Polylang, Jetpack, Surge, and the Mastodon importer, which was creating duplicate posts when an archive was imported twice.
    • Admin screens and the editor. Styles that failed to load on the Fediverse screens and in the Followers and Following blocks, an editor warning about unsaved changes that appeared right after saving, and a handful of errors that filled up log files without breaking anything visible.

    The full, item-by-item changelog for every release is in the plugin’s changelog if you want to read it in detail.

    Get It

    Download from WordPress.org or grab it on GitHub. If your site updates automatically, you already have it.

    Thanks to everyone who filed a bug report with steps we could follow. Those are the ones that get fixed fastest.

    Now that signatures are modern by default: does anything still deliver differently for you? And what would you like to see us build once the queue is shorter?

  • 7.0.0 – I will follow you!

    Just when you thought things were settling down… boom 💥 — the ActivityPub plugin gets another big upgrade. Say hello to version 7.0.0, a release packed with new features, polish, and under-the-hood improvements to help your WordPress site federate smoother, smarter, and more securely than ever.

    Let’s dive into what’s new.

    Following the Fediverse

    We’ve added the initial building blocks for Following support — both sending and managing follow requests for remote actors. It’s not in the UI just yet (we’re rolling it out carefully), but that’s not far away. A big step toward richer, two-way federation.

    Wapuu that "follows" a Mastodon, Pixelfed and Ghost mascot.

    We’ll work with developers of third-party plugins — including those behind Friends and Event Bridge — to migrate their custom follow implementations to this new core feature. This collaboration helps ensure a consistent, reliable follow experience across the ecosystem.

    This foundational support for following is also the first step toward a full-featured reader experience right inside WordPress — something we’re excited to keep building toward.

    Refined Signature

    This release brings support for RFC-9421-style HTTP signatures, both incoming and (optionally) outgoing. That’s a mouthful, but it basically means supporting the latest standard in how we verify and send activities — including a fallback to good old Draft Cavage when needed.

    Check out the blog post to learn more: HTTP Signature Upgrades Coming Soon

    Full Changelog

    Added

    • Added basic support for handling remote rejections of follow requests.
    • Added basic support for RFC-9421 style signatures for incoming activities.
    • Added initial Following support for Actors, hidden for now until plugins add support.
    • Added missing “Advanced Settings” details to Site Health debug information.
    • Added option to auto-approve reactions like likes and reposts.
    • Added support for namespaced attributes and the dcterms:subject field (FEP-b2b8), as a first step toward phasing out summary-based content warnings.
    • Added support for the WP Rest Cache plugin to help with caching REST API responses.
    • Documented support for FEP-844e.
    • Optional support for RFC-9421 style signatures for outgoing activities, including retry with Draft-Cavage-style signature.
    • Reactions block now supports customizing colors, borders, box-shadows, and typography.
    • Support for sending follow requests to remote actors is now in place, including outbox delivery and status updates—UI integration will follow later.

    Changed

    • Comment feeds now show only comments by default, with a new type filter (e.g., like, all) to customize which reactions appear.
    • Consistent naming of Blog user in Block settings.
    • hs2019 signatures for incoming REST API requests now have their algorithm determined based on their public key.
    • Likes, comments, and reposts from the Fediverse now require either a name or preferredUsername to be set when the Discussion option require_name_email is set to true. It falls back to “Anonymous”, if not.
    • Management of public/private keys for Actors now lives in the Actors collection, in preparation for Signature improvements down the line.
    • Notification emails for new reactions received from the Fediverse now link to the moderation page instead of the edit page, preventing errors and making comment management smoother.
    • Plugins now have full control over which Settings tabs are shown in Settings > Activitypub.
    • Reworked follower structure to simplify handling and enable reuse for following mechanism.
    • Screen options in the Activitypub settings page are now filterable.
    • Setting the blog identifier to empty will no longer trigger an error message about it being the same as an existing user name.
    • Step completion tracking in the Welcome tab now even works when the number of steps gets reduced.
    • The image attachment setting is no longer saved to the database if it matches the default value.
    • The welcome page now links to the correct profile when Blog Only mode was selected in the profile mode step.
    • Unified retrieval of comment avatars and re-used core filters to give access to third-part plugins.

    Fixed

    • Allow interaction redirect URLs that contain an ampersand.
    • Comments received from the Fediverse no longer show an Edit link in the comment list, despite not being editable.
    • Fixed an issue where links to remote likes and boosts could open raw JSON instead of a proper page.
    • Fixed a potential error when getting an Activitypub ID based on a user ID.
    • HTTP signatures using the hs2019 algorithm now get accepted without error.
    • Improved compatibility with older follower data.
    • Inbox requests that are missing an algorithm parameter in their signature no longer create a PHP warning.
    • Interaction attempts that pass a webfinger ID instead of a URL will work again.
    • Names containing HTML entities now get displayed correctly in the Reactions block’s list of users.
    • Prevent storage of empty or default post meta values.
    • The amount of avatars shown in the Reactions block no longer depends on the amount of likes, but is comment type agnostic.
    • The command-line interface extension, accidentally removed in a recent cleanup, has been restored.
    • The image attachment setting now correctly respects a value of 0, instead of falling back to the default.
    • The Welcome screen now loads with proper styling when shown as a fallback.
    • Using categories as hashtags has been removed to prevent conflicts with tags of the same name.
    • When verifying signatures on incoming requests, the digest header now gets checked as expected.

    Downloads

    Thank you!

    Huge thanks to everyone who contributed code, feedback, tests, or moral support. This community makes the fediverse feel a little more federated with every release. ❤️

    Update now, test things out, and let us know how 7.0.0 works for you!