![1000004314.jpg](image) Let's get this party started! **Day 1 of FediCon**
This question was asked by [mike@flipboard.social]() on Dot Social's latest episode about the blogosphere on Fedi. [johnonolan@mastodon.xyz](): "we wanted to connect Ghost blogs to each other, but then we discovered ActivityPub" [pfefferle@mastodon.social](): "we wanted to connect WordPress blogs to each other, and ActivityPub has been the most successful attempt" _[paraphrased for brevity]_ Did you catch the subtext? Both those answers, and **my own answer with NodeBB** contain the same seed idea... that we originally wanted to connect our software **with itself only**. We went through years of building a company and vying for profitability that it never occurred to us to work towards cross compatibility with anyone besides out own software. Then ActivityPub came along and quite literally expanded the potential for the entire endeavour a hundred-fold, because not only are you connecting your own software to each other, but every other ActivityPub enabled software in existence. Blogs, microblogs, forums, image boards, etc. all with a built-in user base ready from the get-go. It's no wonder that after discovering AP, it becomes _the_ protocol to utilise.
In February 2025, I presented a topic at FOSDEM in Brussels entitled [The Fediverse is Quiet — Let's Fix That!]() In it, I outlined several "hard problems" endemic to the fediverse, focusing on one particular complaint that is often voiced by newcomers and oldtimers alike; that the fediverse is quiet because you don't ever see the full conversation due to some design considerations made at the protocol level. Since then there have been a number of approaches toward solving this problem, and it is worth spending the time to review the two main approaches and their pros and cons. _N.B. I have a conflict of interest in this subject as I am a proponent of one of the approaches (FEP 7888/f228) outlined below. **This article should be considered an opinion piece.**_ ---- ## Crawling of the reply tree First discussed 15 April 2024 and merged into Mastodon core on 12 Mar 2025, [jonny@neuromatch.social]() pioneered this approach to "fetch all replies" by crawling the entirety of the reply tree. When presented with an object, the Mastodon service would make a call to the `context` endpoint, and if supported(?) would start to crawl the reply tree via the `replies` collection, generating a list of statuses to ingest. This approach is advantageous for a number of reasons, most notably that `inReplyTo` and `replies` are **properties that are ubiquitous** among nearly all implementations and their usage tends not to differ markedly from one another. _N.B. I am not certain whether the service would crawl *up* the `inReplyTo` chain first, before expanding downwards, or whether `context` is set in intermediate and leaf nodes that point to the root-level object._ One disadvantage is this approach's **susceptibility to network fragility**. If a single node in the reply tree is temporarily or permanently inaccessible, then every branch of the reply tree emanating from that node is inaccessible as well. Another disadvantage is the reliance on intermediate nodes for indexing the reply tree. The amount of work (CPU time, network requests, etc.) scales linearly with the size of the reply tree, and more importantly **discoverability of new branches of the reply tree necessitate a re-crawl of the entire reply tree**. For fast-growing trees, this may not net you a complete tree depending on when you begin crawling. Lastly, in the ideal case, a full tree crawl would net you a complete tree with all branches and leaves. Great! Mastodon is the sole implementor of this approach, although it is not proprietary or special to Mastodon by any means. ## FEP 7888/f228, or FEP 171b/f228 Summarized by [silverpill@mitra.social]() in [FEP f228]() (as an extension of FEPs [7888]() by [trwnh@mastodon.social]() and [171b]() by [mikedev@fediversity.site]()), this conversational backfill approach defines the concept of a "context owner" as referenced by compatible nodes in the tree. This context owner returns an `OrderedCollection` containing all members of the context. A major advantage of this approach centers around the pseudo-centralization provided by the context owner. This "single source of truth" maintains the index of objects (or activities) and supplies their IDs (or signed full activities) on request. Individual implementations then retrieve the objects (or activities). It is important to note that **should the context owner become inaccessible, then backfill is no longer possible to achieve**. On the other hand, a dead or unresponsive intermediate node will not affect the ability of the downstream nodes to be processed. The context owner is only able to respond with a list of objects/activities that it knows about. This does mean that downstream branches that do not propagate upwards back to the root will not be known to the context owner. Additionally, consumers are also able to query the context owner for an index without needing to crawl the entire reply tree. The ability to de-duplicate objects at this level reduces the overall number of network requests (and CPU time from parsing retrieved objects) required, **making this approach relatively more efficient**. Additional synchronization methods (via id hashsums) could be leveraged to reduce the number of network calls further. A number of implementors follow this approach to backfill, including NodeBB, Discourse, WordPress, Frequency, Mitra, and Streams. Additional implementors like Lemmy and Piefed have expressed interest. One technical hurdle with this approach is technical buy-in from implementors themselves. Unlike crawling a reply tree, this approach only works when the context owner supports it, and thus should be combined with various other backfill strategies as part of an overall conversational backfill solution. ## Conclusion 2025 is shaping up to be an exciting year for resolving some of the harder technical and social problems endemic to the open social web/fediverse. It is this author's opinion that we may be able to make good headway towards resolving the "quiet fedi" problem with these two approaches. It is important to note that **neither approach conflicts with the other**. Implementations are free to utilise multiple approaches to backfill a conversation. Both methods presented here have pros and cons, and a combination of both (or more) could be key. Feel free to use this as a starting point for discussions regarding either approach. Does one speak to you more than the other? Are the cons of either approach significant enough for you to disregard it? What other approaches or changes could you recommend?
We're happy to announce the release of NodeBB v4.3.0, which contains native support for remote categories, bringing better integration with other NodeBB forums, WordPress, Lemmy, PieFed, mbin, and other "group-based" implementors on the ActivityPub network! ## What does this mean? :thinking_face: It means that starting with this release, you will be able to "browse" to other categories simply by searching for them in your `/world` page. Just like with regular categories, you can "track" or "watch" remote categories — the former will show up in your `/unread` page, and the latter will also send notifications on new topics. Prior to this change, remote categories were rendered just like regular users, and there was some confusion over who was a user and who was a publisher. The integration with blog platforms like WordPress also mean you'll be able to use NodeBB kind of like a feed reader, with built-in notifications when new content is received. We're hoping to also extend this to support Ghost as well :hand_with_index_and_middle_fingers_crossed: Some examples of categories loaded remotely in this NodeBB: * ["Fediverse" on piefed.social (running Piefed)]() — `@npub1xu63...u6rm` * ["ActivityPub Protocol" on SocialHub (running Discourse)]() — `@npub1xk62...pzgd` * [Vivaldi Browser Blog (running WordPress)]() — `@npub10lhj...mzq4` * ["General Climbing News" on community.openbeta.io (running NodeBB)]() — `@npub17yrs...3fq7` * [Fediverse memes (running Lemmy)]() — `@npub14hjt...v79r` ![da0f00e4-aeac-4b7b-bedd-8d20e2a7a7f7-image.png](image) ![9b2e5ab5-d2cc-46be-81aa-1e82057e0652-image.png](image) ## Other notable changes in v4.3.0 ### Chat allow/deny list :left_speech_bubble: There was some desire for more fine-grained support for allow/deny lists for the chat system. This is now available in v4.3.0. Per @npub1npaf...ysxk: > Leaving allow list empty would mean anyone who is not in deny list can message you. > Leaving deny list empty would mean anyone who is in allow list can message you. > If both are empty everyone can message you. > Current restrictChat toggle can be turned into a toggle to disable chat completely. > Upgrade script can add the users following to the allow list if they have restrictChat turned on. ### Show number of topic watchers :eyes: You are now able to see the number of users watching a specific topic alongside the existing stats (posts, views, etc.) ![80bc61e4-0bbd-4dce-ab3b-6ab9df2eb1b1-image.png](image) ### Accessibility updates * Avatar background colours are now selectable via keyboard navigation * Post drafts are now accessible via keyboard navigation ### ... and of course * Bug fixes and security updates