updated plugin ActivityPub version 9.1.0

This commit is contained in:
2026-07-28 15:03:10 +00:00
committed by Gitium
parent bf428f0e45
commit ff806e1811
217 changed files with 6098 additions and 3025 deletions

View File

@ -2,8 +2,8 @@
Contributors: automattic, pfefferle, mattwiebe, obenland, akirk, jeherve, mediaformat, nuriapena, cavalierlife, andremenrath
Tags: fediverse, activitypub, indieweb, activitystream, social web
Requires at least: 6.5
Tested up to: 6.9
Stable tag: 8.3.0
Tested up to: 7.0
Stable tag: 9.1.0
Requires PHP: 7.4
License: MIT
License URI: http://opensource.org/licenses/MIT
@ -61,6 +61,12 @@ This plugin connects your WordPress blog to popular social platforms like Mastod
*ActivityPub for WordPress* adds Fediverse features to WordPress, but it is not a replacement for platforms like Friendica or Mastodon. If you're looking to host a decentralized social network, consider using [Mastodon](https://joinmastodon.org/) or [Friendica](https://friendi.ca/).
= Is this a Mastodon crossposter? Can it post to my existing Mastodon account? =
No. A crossposter pushes copies of your posts to a *separate* account you already have on someone else's server. *ActivityPub for WordPress* does the opposite: it makes your own site a first-class Fediverse account (`@you@example.com`), so people follow your site directly and replies come back as WordPress comments, with no second account required.
The plugin will not add crossposting to an existing account; that is a deliberate choice, not a missing feature. If you would rather mirror articles to an established Mastodon account, that is a job for a dedicated crossposter plugin.
= Why "ActivityPub"? =
The name ActivityPub comes from the two core ideas behind the protocol:
@ -72,7 +78,7 @@ Put together, ActivityPub is a protocol for publishing and subscribing to activi
= How do I solve… =
We have a **How-To** section in the [docs](https://github.com/Automattic/wordpress-activitypub/tree/trunk/docs/how-to) directory that can help you troubleshoot common issues.
We have an **FAQ** section in the [docs](https://github.com/Automattic/wordpress-activitypub/tree/trunk/docs/faq) directory with checklists for the most common problems — for example [follow requests stuck on "pending"](https://github.com/Automattic/wordpress-activitypub/blob/trunk/docs/faq/pending-follow-requests.md) and [comments from the Fediverse not showing up](https://github.com/Automattic/wordpress-activitypub/blob/trunk/docs/faq/missing-comments.md) — and a **How-To** section in the [docs](https://github.com/Automattic/wordpress-activitypub/tree/trunk/docs/how-to) directory for configuring specific setups.
= Constants =
@ -111,204 +117,100 @@ For reasons of data protection, it is not possible to see the followers of other
== Changelog ==
### 8.3.0 - 2026-05-18
### 9.1.0 - 2026-07-22
#### Security
- Block a recently compromised JavaScript dependency from being installed during builds.
- Ensure apps you connect can only act within the access you granted them, and not make wider changes to your site.
- Ensure remote profiles and content are served from the address they claim before storing them.
- Fix a security issue where a remote actor's profile link could run scripts in the admin area.
- Ignore an incoming follow request whose actor resolves to a different account than the one that sent it.
#### Added
- Allow site administrators to post from third-party apps on behalf of the site's blog account.
- Store content warnings from posts published through third-party ActivityPub apps so they federate correctly.
- Add a filter that allows federating with servers on private or internal networks.
- Add an actor autocomplete endpoint so Fediverse apps can offer typeahead search when mentioning people.
- Federate the episode summary for Podlove Podcast Publisher episodes.
#### Changed
- Improve compatibility with newer Fediverse servers by recognizing the FEP-3b86 Object Intent link when resolving remote follow and other intent endpoints.
- Improve compatibility with newer Fediverse servers by recognizing the standardized FEP-3b86 follow link for remote follows.
- Refresh bundled scripts to pick up the latest WordPress component updates.
- Stagger background data processing after plugin updates to reduce server load on hosts running many sites.
- Improve reliability of the Social Web admin screen loading.
- Improve the internal handling of the Application actor used for server-to-server requests.
#### Fixed
- Allow third-party apps connected to your site to look up Fediverse users by their handle (like @user@example.com).
- Fix ActivityPub blocks and widgets failing to load on cross-origin embeds (such as WordPress.com sites) due to a missing nonce header in the CORS allow-list.
- Fix a JavaScript console error that could appear on pages with the Follow, Reactions, Followers, Following, or Remote Reply blocks.
- Fix posting an Undo of a Follow through the outbox API failing with a server error or silently leaving the follow in place.
- Prevent a PHP warning during the monthly statistics backfill when an outbox item disappears between lookup steps.
- Prevent private outbox items authored by the site account from being visible to logged-out visitors at their permalink URLs.
- Prevent the site's follower and following lists from being visible to logged-out visitors when the social graph is set to private.
- Reduce database overhead on sites with many deleted posts by moving the tombstone registry to its own storage.
- Set a real author on posts created via the blog actor outbox so they no longer appear without a byline.
- Silence the upcoming WordPress 7.0 deprecation warning about `data-wp-on-async` by switching the plugin's interactive blocks to the new `withSyncEvent()` helper.
### 8.2.1 - 2026-05-01
#### Security
- Hardened how the inbox processes large recipient lists in incoming activities.
- Ensure a follow can only be declined by the account you followed.
- Fixed using the correct cache representation in Surge config
- Fix follow requests from some fediverse services staying pending after they are accepted.
- Fix likes from some accounts being recorded as multiple duplicate comments.
- Fix posts being removed from the Fediverse when edited while scheduled for a future publish date.
- Fix repeated deliveries of a like or repost creating new comments after the original was marked as spam or moved to the trash.
- Fix Starter Kit imports failing on Fediverse servers that require signed requests.
- Fix the scheduled refresh of remote profiles so it actually re-fetches from the remote server. Previously, stale avatars and bios for commenters never updated until they sent a new activity to your site.
- Fix URLs with multiple query parameters (such as avatars, images, profile links, and podcast media) being corrupted in content sent to the Fediverse.
- Prevent caching non-actor objects (such as notes) as remote profiles.
- Refresh cached remote profiles in place during scheduled updates to avoid creating duplicate copies.
- Show the Fediverse Preview for scheduled posts instead of the regular post preview.
- Stop storing responses from remote servers in the database when they were requested uncached.
### 9.0.2 - 2026-06-29
#### Fixed
- Fix monthly and annual Fediverse Stats emails being sent more than once per period when the scheduler ran multiple times.
- Improve handling of content received from other servers.
### 8.2.0 - 2026-04-27
#### Security
- ActivityPub REST endpoints no longer advertise credentialed cross-origin access. Browser-based clients using OAuth bearer tokens continue to work as before.
- Aligned the deprecated signature verifier's clock tolerance with the supported verifiers.
- Blocked additional reserved IPv6 ranges from outbound request safety checks.
- Decoded percent-encoded forms in the follower sync authority before the safety check.
- Fail closed when an OAuth request can't be tied to a client IP, instead of sharing one rate-limit bucket.
- Hardened input handling for incoming federated activity types.
- Hardened outbound request handling for third-party app connections and live activity streams.
- Hardened outbound request safety to cover IPv6-only third-party hosts.
- Per-IP rate limits now only trust the actual TCP peer by default, so an attacker on a directly-exposed site cannot bypass the cap by spoofing X-Forwarded-For or similar proxy headers. Sites behind a trusted reverse proxy (Cloudflare, Akamai, nginx) can opt the relevant header back in via the new "activitypub_client_ip_sources" filter.
- Reject follower sync requests targeted at internal-network hosts at the route layer.
- Required signatures on HEAD requests to peer-only endpoints.
#### Changed
- Development tooling: require PHPUnit 9.6.33 or newer (security fix CVE-2026-24765). No runtime impact for end users.
- OAuth public clients must now use PKCE by default, matching OAuth 2.1. Site operators can relax this via the activitypub_oauth_require_pkce filter if legacy clients need to connect.
- Returned the standard rate-limit response from the OAuth token endpoint when too many requests are sent.
#### Fixed
- Delete activities no longer bypass signature verification on endpoints that explicitly require it.
- OAuth token revocation now verifies the caller owns the token being revoked.
- Tighten HTTP signature verification: narrow the clock-skew window, reject signatures that carry no freshness timestamp, and cap unreasonable expiry times. Peers that sign without a Date or creation timestamp will no longer verify.
- Trim dev-only configuration files from the plugin release package.
### 8.1.1 - 2026-04-22
### 9.0.1 - 2026-06-15
#### Added
- Added the `activitypub_post_object_type` filter so plugins can override the federated object type (Note, Article, Page) for a post.
#### Changed
- Always flush rewrite rules at the end of a plugin migration so that users upgrading across multiple versions do not miss a flush.
- Add FAQ guides that help solve follow requests stuck on "pending" and comments from the Fediverse not showing up.
#### Fixed
- Fix the Fediverse stats widget on sites where the REST namespace is remapped, such as WordPress.com.
- Harden the reactions API response so stored author names and URLs cannot introduce markup or non-HTTP schemes into the JSON output.
- Stop hiding posts that contain a federated reply block from the main blog listing and the admin post list on sites that do not use the Posts and Replies block.
- Notify followers about your new preference when the Starter Kit policy setting changes, so other servers no longer act on an outdated one.
- Publish the Starter Kit consent policy only on your own blog and author profiles, no longer on system or third-party profiles.
- Starter Kit consent now also works for the blog profile, not just for individual authors.
### 8.1.0 - 2026-04-21
### 9.0.0 - 2026-06-10
#### Security
- Add rate limiting to app registration to prevent abuse.
- Fix blog actor outbox exposing private activities to unauthenticated visitors.
- Restrict localhost URL allowance to local development environments only.
- Verify that the signing key belongs to the same server as the activity actor.
- Enforce the signing-key host check on incoming federated activities regardless of how the key identifier is formatted.
- Fix the real-time activity stream so it only returns the requesting user's own activities.
- Harden the Site Health connectivity check so it cannot be used to reach unsafe network addresses.
- Only share comment replies in the Fediverse when the post they belong to is itself federated, so replies on private or non-federated posts stay private.
- Prevent a remote server from discovering which of your followers belong to a third-party server it does not control.
- Prevent logged-in users from viewing another user's private outbox activities.
- Prevent remote servers from modifying or deleting federated profiles, posts, and interactions they do not own.
- Rate-limit the remote-follow lookup to prevent it from being abused to trigger outbound requests.
- Stop the OAuth token introspection endpoint from revealing another user's token details to logged-in users.
- Stop the quote-authorization stamp from exposing a post's other metadata.
#### Added
- Add a "Posts and Replies" tab bar for author archives that filters between posts and replies, similar to Mastodon's profile view.
- Add a liked collection to actor profiles, showing all posts the actor has liked.
- Add a seasonal starter pattern that suggests sharing Fediverse stats when creating a new post in December and January.
- Add a stats block that displays annual Fediverse statistics as a card on the site and as a shareable image on the Fediverse, with automatic color and font adoption from the site's theme.
- Added `activitypub_pre_get_by_id` filter to allow plugins to register custom virtual actors resolved by ID.
- Add EXIF metadata support for image attachments using Vernissage namespace.
- Add new Fediverse Following Page and Profile Page block patterns.
- Add OAuth server metadata and registration endpoint discovery to actor profiles.
- Add real-time streaming for inbox and outbox updates via Server-Sent Events (SSE).
- Add support for Block, Add (pin post), and Remove (unpin post) activities via Client-to-Server API.
- Add support for check-in activities posted via compatible apps.
- Add support for importing Starter Packs in both the Pixelfed and Mastodon formats.
- Add tags.pub integration to supplement tag timelines with posts from across the Fediverse.
- Support for ActivityPub Client-to-Server (C2S) protocol, allowing apps like federated clients to create, edit, and delete posts on your behalf.
- Add a Distribution Mode setting to control how quickly posts are delivered to followers.
- Add an opt-in setting to consent to inclusion in Starter Kits (also called Starter Packs or Featured Collections). Off by default. Find it under Settings, ActivityPub, Activities.
- C2S clients can now request canonical SWICG ActivityPub API scope names such as `activitypub:read:all` and `activitypub:write:all`, and the OAuth discovery metadata advertises them.
- C2S token responses now include `activitypub_actor_id` so clients following the SWICG ActivityPub API Basic Profile can discover the authenticated actor.
- Generate a blurred color preview (blurhash) for images so other fediverse apps can show a placeholder while your photos load.
- Quote notification emails now include a link to the post that quoted you, so you can review and respond more quickly.
- Warn in the editor before making a post that's already shared on the Fediverse a draft, private, or password-protected, since followers' copies will be removed.
#### Changed
- Block patterns for follow, following, and profile pages are now only suggested when editing pages.
- Fix notification pagination when using Enable Mastodon Apps: use date-constrained queries instead of truncating the shared notification pool, and expose `$limit`, `$before_date`, and `$after_date` as additional filter arguments so third-party handlers can fetch the correct window.
- Improve the pre-publish format suggestion panel with clearer messages and a confirmation after applying a format.
- Podcast episodes now respect the configured object type setting instead of always being sent as "Note".
- Show reaction action buttons even when a post has no reactions yet.
- Add the `blurhash` term to the outbound JSON-LD `@context` so attachments that include a `blurhash` property are strictly correct JSON-LD, matching Mastodon's own context shape.
- Federated posts moved to draft, pending, private, trash, or password-protected now send a Delete to followers (previously sent a placeholder "editing" Update or were silent).
- OAuth rate-limit responses now include a `Retry-After` header so clients know how long to wait before retrying.
- Updated a build dependency to a clean release now that a fixed version is available.
#### Removed
- Removed functions, methods, and the Follower class that were deprecated in versions 7.0 through 7.4.
#### Fixed
- ActivityPub endpoints that surface comment, reply, like, share, and remote-reply metadata now honor the parent post's visibility setting.
- Added validation for SSE access tokens passed via query parameter.
- Fix account migration (Move) not working when moving back to an external account.
- Fix a fatal error during activity delivery when the outbox item has been deleted.
- Fix a fatal error when receiving activities with a non-string language property.
- Fix a fatal `array_keys(null)` in `Comment::get_comment_type_slugs()` that could take down any request where a third-party plugin transitioned a custom comment type before `add_comment_type()` had been called.
- Fix a missing script dependency notice on the admin page in WordPress 6.9.1 and later.
- Fix BuddyPress @mention filter corrupting Fediverse Followers and Following blocks.
- Fix cleanup jobs silently doing nothing on sites where purge retention options were not set.
- Fix comments on remote posts being incorrectly held in moderation.
- Fix double-encoded HTML entities in post titles on the Fediverse Stats dashboard.
- Fixed an issue where quote authorization stamps could reference unrelated posts.
- Fixed double-encoding of special characters in comment author names on updates.
- Fixed emoji shortcode replacement to handle special characters in emoji names correctly.
- Fix fatal error when other plugins hook into the user agent filter expecting two arguments.
- Fix Fediverse Preview showing the standard web view instead of the ActivityPub preview for draft posts.
- Fix OAuth authentication failing for local development clients using localhost subdomains.
- Fix performance regression from reply-exclusion filter by skipping it for queries targeting non-ActivityPub post types.
- Fix Reader feed failing to load with newer WordPress versions.
- Fix remote actor avatars getting stuck on broken URLs when the original image becomes unavailable.
- Fix Site Health check showing an empty error message when the WebFinger endpoint is not reachable.
- Fix the Fediverse profile "Joined" date showing the oldest post date instead of when the site started federating.
- Fix the Fediverse profile showing an inflated post count by excluding incoming comments from the total.
- Fix Update handler using stale local actor data instead of the activity payload
- Improved HTTP Signature validation for requests with a missing Date header.
- Only allow S256 as PKCE code challenge method for OAuth authorization.
- Prevent third-party plugin UI elements and scripts from appearing in federated content.
- Require signed peer requests for the followers synchronization endpoint per FEP-8fcf.
- Show a styled error page instead of raw technical output when an OAuth application cannot be reached during authorization.
- Strip private recipient fields from all outgoing activities to prevent leaking private audiences.
- Sync ActivityPub blog actor settings via Jetpack.
- Use ap_actor post ID for remote account IDs instead of remapping URI strings.
- Use safe HTTP request for signature retry to prevent requests to private IP ranges.
- Validate emoji updated timestamps before storing them.
### 8.0.2 - 2026-03-17
#### Security
- Prevent non-public posts (drafts, scheduled, pending review) from being accessible via ActivityPub.
### 8.0.1 - 2026-03-11
#### Changed
- Simplify the follow page block pattern to avoid duplicate headings and improve accessibility.
#### Fixed
- Fix dark sidebar colors appearing incorrectly with non-default admin color schemes.
- Fix Fediverse Reactions block not aligning with post content in block themes.
- Fix new posts being marked as modified on load, which prevented Gutenberg's starter pattern modal from appearing.
### 8.0.0 - 2026-03-04
#### Security
- Prevent private recipient lists from being shared when sending activities to other servers.
#### Added
- Add a help section to interaction dialogs explaining the Fediverse and why entering a profile is needed.
- Add a notice on the Settings page to easily switch from legacy template mode to automatic mode.
- Add a pre-publish suggestion that recommends a post format for better compatibility with media-focused Fediverse platforms.
- Add a Site Health check that warns when plugins are causing too many federation updates.
- Add backwards compatibility for the `ACTIVITYPUB_DISABLE_SIDELOADING` constant and `activitypub_sideloading_enabled` filter from version 7.9.1.
- Add bot account snippet that marks ActivityPub profiles as automated accounts, displaying a "BOT" badge on Mastodon and other Fediverse platforms.
- Add Cache namespace for remote media caching with CLI commands, improved MIME validation, and filter-based architecture.
- Add federation of video poster images set in the WordPress video block.
- Add Locale from Tags community snippet.
- Add optional Like and Boost action buttons to the Fediverse Reactions block, allowing visitors to interact with posts from their own server.
- Add pre-built Fediverse block patterns for easy profile, follow page, and sidebar setup.
- Add snippet for blockless fediverse reactions
- Add `wp activitypub fetch` CLI command for fetching remote URLs with signed HTTP requests.
#### Changed
- Improved active user counting for NodeInfo to include all federated content types and comments.
- Improve language map resolution to strictly follow the ActivityStreams spec.
- Superseded outbox activities are now removed instead of kept, reducing clutter in the outbox.
- The minimum required PHP version is now 7.4.
#### Fixed
- Accept incoming activities from servers that use standalone key objects for HTTP Signatures.
- Fix a crash on servers where WordPress uses FTP instead of direct file access for media caching.
- Fix a crash when receiving posts from certain federated platforms that send multilingual content.
- Fix automatic cleanup of old activities failing silently on sites with large numbers of outbox, inbox, or remote post items.
- Fix comment count to properly exclude likes, shares, and notes.
- Fix follow button redirect from Mastodon not being recognized.
- Fix modal overlay not covering the full screen on block themes.
- Fix outbox invalidation canceling pending Accept/Reject responses to QuoteRequests for the same post.
- Fix QuoteRequest handler to derive responding actor from post author instead of inbox recipient.
- Fix reactions block buttons inheriting theme background color on classic themes.
- Fix reactions block layout on small screens and remove unwanted button highlight when clicking action buttons.
- Fix signature verification rejecting valid requests that use lowercase algorithm names in the Digest header.
- Fix soft-deleted posts being served instead of a tombstone when the post is re-saved.
- Improve compatibility with federated services that use a URL reference for the actor's public key.
- Improve handling of all public audience identifiers when sending activities to followers and relays.
- Fix a fatal error when receiving a new follower while the Stream plugin is active.
- Fix a follow request being marked as accepted when the confirmation came from a different account than the one being followed.
- Fix the Fediverse settings appearing twice and visibility changes not saving in the block editor when the Classic Editor plugin is also active.
- Fix the introduction video failing to load on the Getting Started help screen.
- Follower synchronization with Mastodon no longer fails, signed requests with query strings now verify correctly.
- Harden the Blurhash encoder: skip decompression-bomb images before decoding, flatten transparency onto white so transparent logos no longer produce near-black placeholders, and defer the cron encode until attachment metadata is saved.
- Images and videos placed in a Media & Text block are now included when a post is shared to the Fediverse.
- Requests from other platforms to feature your posts are now handled correctly instead of being ignored.
- RSS and Atom feeds now show a simple `@username` mention in place of the reply block's full embed card, which only renders properly when the plugin's frontend CSS is loaded.
- Stop a deprecation notice from appearing in the error log when the NodeInfo plugin is also active.
See full Changelog on [GitHub](https://github.com/Automattic/wordpress-activitypub/blob/trunk/CHANGELOG.md).
== Upgrade Notice ==
= 8.1.0 =
= 9.0.0 =
See your year on the Fediverse with the new Stats feature, bringing your highlights together in one simple view you can share anywhere.
Posts you switch to draft, pending, private, or password-protected are now fully removed from the Fediverse, so unpublished content no longer lingers on other servers. Note that re-publishing may not restore them on some platforms.
== Installation ==