# ActivityPub Plugin

**URL:** https://meta.discourse.org/t/activitypub-plugin/266794
**Category:** Plugin
**Tags:** experimental, activitypub
**Created:** [May 31, 2023, 5:21pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794 "2023-05-31T17:21:52Z")
**Posts on this page:** 20
**Page:** 24

<div class="post-metadata">

### Author: ![panosd](https://avatars.discourse-cdn.com/v4/letter/p/439d5e/32.png) [@panosd](https://meta.discourse.org/u/panosd)
#### Post date: [January 26, 2026, 3:18pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/472 "2026-01-26T15:18:10Z")

</div>

Ah, good to hear! Yeah, I guess you’re right about following someone who posts in a forum, but there could be the feature to post to the fediverse and not in a forum. NodeBB for example puts all fedi content outside communities in an “Uncategorized“ category, so if you post there it’s more or less like posting on Mastodon. Mbin also does something similar, they started as a link aggregator and added a “Microblogging“ tab. I understand it’s out of scope for Discourse for the time being, thanks for clarifying that!

---

<div class="post-metadata">

### Author: ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### Post date: [January 27, 2026, 12:51pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/473 "2026-01-27T12:51:54Z")

</div>

> [@pmusaraj](#):
>
> Following users is a bit counter-intuitive in a forum environment. That’s my take, anyway.

There are crazy people (like me) who want to use Discourse as their primary home in the Fediverse. I want to publish to the Fediverse only via Discourse.

Shouldn’t we support people to use Discourse as their “working in the open” or “something better than a blog” solution?

Since implementing users’ wishes does not pay, did you consider voting for features by money as an option?

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [January 27, 2026, 4:51pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/474 "2026-01-27T16:51:57Z")

</div>

> [@thoka](#):
>
> Since implementing users’ wishes does not pay, did you consider voting for features by money as an option?

Voting by money is supported. You can fund development after making sure that the new features are #pr-welcome

---

<div class="post-metadata">

### Author: ![stephtara](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephtara/32/517827_2.png) [@stephtara](https://meta.discourse.org/u/stephtara)
#### Post date: [February 7, 2026, 5:32pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/475 "2026-02-07T17:32:06Z")

</div>

> [@pmusaraj](#):
>
> Following users is a bit counter-intuitive in a forum environment. That’s my take, anyway. I find it very difficult to reconcile the social media “feed that shows posts from followed users” with a forum’s organization around topics.

OTOH that is exactly what Facebook does with groups and contacts and one of the reasons it’s so sticky over there. Because you’re going to connect with your contacts anyway, and this « brings » group/community post into that space.

I could very well imagine something like that being super precious for my community. Communities bring people together and they will want to keep that connection « outside » of the community. If the community tool allows them to bring this additional connection into the same space/app, this avoids an exodus to other social spaces of people who have built strong relationships inside the community.

I know we’re not trying to « replicate Facebook » here but it is worth pondering on why it works so well for certain things.

I’d love to be able to tell my members emigrating from Facebook « see, you can create a fediverse account and connect to people you like off topic ».  
Maybe it should be thought of as a way to provide community members with an off topic space which is more « open ».

From my point of view it would make complete sense. The lack of integration between « the socials » (fediverse accounts), blogs (but the connection of those with the fediverse is underway) and communities is what is stopping open tools like mastodon or discourse or Wordpress from being an effective alternative to Facebook.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [February 7, 2026, 5:44pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/476 "2026-02-07T17:44:23Z")

</div>

> [@stephtara](#):
>
> stopping open tools like mastodon or discourse or Wordpress from being an effective alternative to Facebook.

Well — Mastodon and WordPress already does all of that. Discourse only partly and the direction is mostly outbound, but it isn’t social media platform.

---

<div class="post-metadata">

### Author: ![nesges](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nesges/32/547210_2.png) [@nesges](https://meta.discourse.org/u/nesges)
#### Post date: [March 13, 2026, 8:37am UTC](https://meta.discourse.org/t/activitypub-plugin/266794/477 "2026-03-13T08:37:20Z")

</div>

When trying to follow @announcements@meta.discourse.org we receive the following error message:

 ![could not find "@announcements@meta.discourse.org"](https://global.discourse-cdn.com/meta/original/4X/0/d/7/0d7a12d664aee4236a215ea0b79cd1f22165bcd8.png)

The logs have two warnings:

> Failed to process [https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58](https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58): Could not resolve actor
> 
> GET request to [https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58](https://meta.discourse.org/ap/actor/68efb2d756abf76171ed302b7ffd3c58) failed:

 ![Could not resolve actor](https://global.discourse-cdn.com/meta/original/4X/8/f/c/8fcad98793e79ee3884a67c68a46edc370b263b3.png)

We can follow actors on Mastodon, though.

Am I missing something, or how can I further investigate?

---

<div class="post-metadata">

### Author: ![Tealk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tealk/32/525923_2.png) [@Tealk](https://meta.discourse.org/u/Tealk)
#### Post date: [March 15, 2026, 4:20pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/478 "2026-03-15T16:20:20Z")

</div>

I can confirm the identical behavior; here are the logs:

```plaintext
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:39 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org"}
Completed 200 OK in 36ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 11.8ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:40 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org", "actor_id" => "57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org"}
Completed 200 OK in 32ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.8ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org", "actor_id" => "57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org"}
Completed 200 OK in 30ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.0ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:43 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org", "actor_id" => "57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org"}
Completed 200 OK in 26ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.3ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org", "actor_id" => "57934"}
Started POST "/webfinger/handle/validate" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::Webfinger::HandleController#validate as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org"}
Completed 200 OK in 24ms (Views: 0.2ms | ActiveRecord: 0.0ms (0 queries, 0 cached) | GC: 0.3ms)
Started GET "/ap/local/actor/57934/find-by-handle?handle=%40announcements%40meta.discourse.org" for 172.17.0.1 at 2026-03-15 16:10:44 +0000
Processing by DiscourseActivityPub::ActorController#find_by_handle as JSON
  Parameters: {"handle" => "@announcements@meta.discourse.org", "actor_id" => "57934"}

```

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [March 16, 2026, 5:41pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/479 "2026-03-16T17:41:37Z")

</div>

> [@nesges](#):
>
> ![could not find "@announcements@meta.discourse.org"](https://global.discourse-cdn.com/meta/original/4X/0/d/7/0d7a12d664aee4236a215ea0b79cd1f22165bcd8.png)
> 
> could not find "@announcementsannouncements@meta.discourse.org"612×276 17.6 KB

Which version of Discourse are you on? I am able to find that actor in another Discourse instance:

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/4/6/f46eb6efeca5ca20345c478bbbf1d88b1901833d.png)

---

<div class="post-metadata">

### Author: ![nesges](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nesges/32/547210_2.png) [@nesges](https://meta.discourse.org/u/nesges)
#### Post date: [March 16, 2026, 9:40pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/480 "2026-03-16T21:40:48Z")

</div>

We’re on the latest version 2026.3.0-latest

 ![Screenshot of the Versioninfo in Admin Dashboard, showing a green smiley](https://global.discourse-cdn.com/meta/original/4X/9/5/1/95140a8af9d075874832ff2a6d4d351183e99ae4.png)

---

<div class="post-metadata">

### Author: ![Tealk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tealk/32/525923_2.png) [@Tealk](https://meta.discourse.org/u/Tealk)
#### Post date: [March 25, 2026, 8:37pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/481 "2026-03-25T20:37:22Z")

</div>

We are on 2026.1.2(808b2ac23d) with Pluginversion (d99071e0)

---

<div class="post-metadata">

### Author: ![mttaggart](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/mttaggart/32/553334_2.png) [@mttaggart](https://meta.discourse.org/u/mttaggart)
#### Post date: [May 4, 2026, 5:18pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/482 "2026-05-04T17:18:05Z")

</div>

Just adding on here. On 2026.5.0-latest with an otherwise functioning Category Actor and experiencing the same thing. I can follow Mastodon actors, but not other Discourse ones.

 ![image](https://global.discourse-cdn.com/meta/original/4X/3/b/1/3b12d1ff3b21e71e680a0fd7af1323c1d1a84ae8.png)

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [May 4, 2026, 5:21pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/484 "2026-05-04T17:21:20Z")

</div>

Thanks for the report, will will look into this shortly.

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [June 16, 2026, 8:12pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/485 "2026-06-16T20:12:53Z")

</div>

A quick note here to let you all know that we have disabled the ActivityPub plugin here on meta. The plugin was a remains in maintenance mode, we will still support it with security, performance and bug fixes. On that note, we have merged several security fixes today in the plugin repo, we recommend any users of the plugin to update to latest.

On meta, unfortunately, the ActivityPub-enabled categories were only used by a few users and we had some feedback for non-ActivityPub users that were confused by the terminology, so we’ve decided to simplify things and discontinue ActivityPub integration for meta.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [June 17, 2026, 5:46am UTC](https://meta.discourse.org/t/activitypub-plugin/266794/486 "2026-06-17T05:46:19Z")

</div>

One reason why out there is so few followers is a non-discourse user must know what to follow. The system isn’t now for easy social media type following, but sharing content from a forum to Fediverse and hoping that someone there is sharing (and even then a mastodon/what ever user can’t follow any discourse actor).

You know amount of followers but you don’t have any idea how many is seeing posts there. But sure, meta is kind of an edge case, because admins propably are here and ordinary users aren’t interested in technical sides of Discourse. So from that point of view I understand that decision.

---

<div class="post-metadata">

### Author: ![trwnh1](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/trwnh1/32/568124_2.png) [@trwnh1](https://meta.discourse.org/u/trwnh1)
#### Post date: [June 20, 2026, 10:44pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/487 "2026-06-20T22:44:54Z")

</div>

Hi, I’m trying to report an issue with the AP plugin regarding the `published` datetime being incorrect on posts that are manually “published” via the “Publish all posts” button.

### Example

[https://browser.pub/https://socialhub.activitypub.rocks/ap/object/a8d6c23e6c428313efb9bf20efeb020c](https://browser.pub/https://socialhub.activitypub.rocks/ap/object/a8d6c23e6c428313efb9bf20efeb020c)

### Expected behavior

`published` indicates the datetime the post was _originally_ published, i.e. the datetime visible locally in Discourse (2018).

### Actual behavior

`published` indicates the date the _AP resource_ was created, i.e. the datetime when the “Publish” button was clicked locally in Discourse (2026).

---

<div class="post-metadata">

### Author: ![tobiaseigen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/tobiaseigen/32/539204_2.png) [@tobiaseigen](https://meta.discourse.org/u/tobiaseigen)
#### Post date: [August 13, 2026, 8:24pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/489 "2026-08-13T20:24:09Z")

</div>

Lately, images in my federated posts originating from my Discourse site are showing up multiple times in mastodon. Is this an ActivityPub thing or a mastodon thing? Or a misconfiguration on my end? I am not sure how to address it. Here are two examples. Mastodon seems to be trying to create a grid view when the original did not have a grid view.

 ![Screenshot 2026-08-13 at 1.21.48 PM](https://global.discourse-cdn.com/meta/original/4X/2/8/9/289af5840392a7bd98dcb187050d776429ad9cf5.png)  
 ![Screenshot 2026-08-13 at 1.21.15 PM](https://global.discourse-cdn.com/meta/original/4X/6/9/5/695f305c8b8026ecdfbc816934d04f356f6b303a.png)

---

<div class="post-metadata">

### Author: ![thoka](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/thoka/32/115652_2.png) [@thoka](https://meta.discourse.org/u/thoka)
#### Post date: [August 28, 2026, 10:30pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/490 "2026-08-28T22:30:55Z")

</div>

bug-report created in exchange with [ask.discourse.com](http://ask.discourse.com) ( bfa925d )

**Build fails during `./launcher rebuild` with `NameError: uninitialized constant PrettyText::PrecompiledBundle` when discourse-activity-pub is enabled**

**Environment**

- Self-hosted Discourse, Docker install via `discourse_docker` launcher, multi-container setup (Web + Sidekiq)
- Ruby 3.4.0, Rails 8.0.5.1
- Branch: `latest` (also reproduced the root cause on the current code)

**Error**  
During bootstrap, at the `rake db:migrate` step:

```plaintext
rake aborted!
NameError: uninitialized constant PrettyText::PrecompiledBundle (NameError)

    PrecompiledBundle.new(
    ^^^^^^^^^^^^^^^^^
/var/www/discourse/lib/pretty_text.rb:56:in '<module:PrettyText>'

```

**Root cause (agents analysis)**  
In `lib/pretty_text.rb:56`, inside `module PrettyText`, the constant `PrecompiledBundle` is referenced without a `::` top-level scope. Ruby therefore resolves it as `PrettyText::PrecompiledBundle` (file `lib/pretty_text/precompiled_bundle.rb`), which doesn’t exist. The actual class lives at `/var/www/discourse/lib/precompiled_bundle.rb` (top-level). Without a plugin, the load order happens to define it in time; with `discourse-activity-pub` enabled, the load order changes and the constant isn’t available when `pretty_text.rb` is loaded.

**Proof**

- Build passes error-free with all plugins **disabled**.
- Binary search through the plugin list: build fails with **discourse-activity-pub enabled** , passes with it removed/disabled.
- No other plugin triggers it.

**Expected behavior**  
Clean build independent of which plugins are enabled, or at least a defined constant/require in `lib/pretty_text.rb` (e.g. `::PrecompiledBundle` or an explicit `require`).

**Question**  
Is this a known interaction? Any plan to fix the load order, or is there a recommended pin/workaround in the meantime?

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [September 2, 2026, 2:42pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/491 "2026-09-02T14:42:33Z")

</div>

I don’t think this has anything to do with the activity pub plugin…

> [@thoka](#):
>
> During bootstrap, at the `rake db:migrate` step

Can you expand the reported error here? Do migrations start and then run into this issue or is there a specific migration that fails?

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [September 2, 2026, 3:18pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/492 "2026-09-02T15:18:17Z")

</div>

> [@pmusaraj](#):
>
> I don’t think this has anything to do with the activity pub plugin…

> [@thoka](#):
>
> Without a plugin, the load order happens to define it in time; with `discourse-activity-pub` enabled, the load order changes

I think this part messes with the load order because it’s outside of `after_initialize`

> <https://github.com/discourse/discourse-activity-pub/blob/c4da09efac7a2335b2408fe98557bd26791c8278/plugin.rb#L23C1-L25C64>

---

<div class="post-metadata">

### Author: ![pmusaraj](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pmusaraj/32/119489_2.png) [@pmusaraj](https://meta.discourse.org/u/pmusaraj)
#### Post date: [September 2, 2026, 3:44pm UTC](https://meta.discourse.org/t/activitypub-plugin/266794/493 "2026-09-02T15:44:25Z")

</div>

Oh, thank you for correcting me. This may be a fix then: [FIX: Do not modify global plugin loading behaviour - Pull Request #338 - discourse/discourse-activity-pub - GitHub](https://github.com/discourse/discourse-activity-pub/pull/338) please try it @thoka and let me know how it goes.

[Previous page](https://meta.discourse.org/t/activitypub-plugin/266794.md?page=23)

[Next page](https://meta.discourse.org/t/activitypub-plugin/266794.md?page=25)
