`@fedify/backfill` package for FEP-f228 conversation backfill
The “quiet fediverse” problem occurs when users see incomplete conversations due to the distributed nature of ActivityPub. Currently, most implementations use reply tree crawling (recursively fetching inReplyTo chains), which can be inefficient and may miss replies.
FEP-f228: Backfilling conversations proposes a more efficient approach where conversation owners provide resolvable context properties that resolve to OrderedCollections containing the entire conversation thread.
Proposal
Create a new @fedify/backfill package that implements conversation backfilling with multiple strategies:
- FEP-f228 context owner approach (primary): Check if
contextresolves to anOrderedCollection - Reply tree crawling (fallback): Traditional recursive fetching via
inReplyTo - Hybrid approach: Combine both methods for maximum coverage
import { backfill } from "@fedify/backfill";
const conversation = await Array.fromAsync(
backfill(context, note, {
strategies: ["context-owner", "reply-tree-crawl"],
})
);
Use cases
- ActivityPub servers wanting to display complete conversations
- Clients needing to backfill missing replies
- Bridge implementations between different fediverse platforms
Implementation considerations
- Should work with any Fedify-based application
- Configurable strategies and fallback mechanisms
- Efficient deduplication and caching
- Rate limiting and error handling for external fetches
Related
- https://github.com/TryGhost/ActivityPub/issues/901
- Backfilling Conversations: Two Major Approaches
To be completely technically correct, this would be an implementation of 7888/f228 😄 — the former describes the resolvable OrderedCollection served via context, and the latter describes the actual backfill mechanism.
I am 100% on board with mixing and matching strategies for full effect. Should a context not be present or unresolvable, it makes complete sense to fall back to inReplyTo traversal. This is what NodeBB does.