Skip to content

Idea: ActivityPub federation — echo areas and users visible on Mastodon and the Fediverse #356

@awehttam

Description

@awehttam

The Idea

BinktermPHP already speaks FTN, BinkP, Gemini, QWK, MCP, and PacketBBS. ActivityPub would add the Fediverse — giving every echo area and BBS user a presence on Mastodon, Pleroma, Misskey, and compatible platforms without any extra client software.

A Mastodon user could follow an echo area the same way they follow any account. New echomail would appear in their home feed. They could reply from Mastodon and the reply would land in the echo area as a new message. For a BBS that carries networked FTN areas, that reply could propagate across the entire FTN.

This is not a chat bridge or a scraper. It is native federation: the BBS becomes a first-class Fediverse node.


How It Would Work

Echo Areas as ActivityPub Group Actors

Each echo area gets an ActivityPub identity: @COOKING@bbs.example.com. The area's Actor type would be Group, matching how platforms like Lemmy and Guppe federate communities.

  • Outbound: when a new echomail message arrives (from FTN or posted locally), the BBS signs and delivers an ActivityPub Create(Note) activity to every remote follower of that area's Actor.
  • Inbound: when a Mastodon user sends a @mention to the group Actor or boosts into it, the BBS receives the Create(Note) activity via the inbox, converts it to an echomail message attributed to the sender, and stores it locally. If the area is linked to a networked FTN tag, the message can be gated outbound into the FTN as well (with appropriate flagging and sysop control).

BBS Users as ActivityPub Person Actors

Each BBS user gets a Fediverse identity: @username@bbs.example.com. Their public echomail posts become Note objects in their ActivityPub outbox. Remote users could follow them to see their posts in their home timeline.

Webfinger Discovery

.well-known/webfinger allows Mastodon to look up acct:username@bbs.example.com or acct:AREA_TAG@bbs.example.com and resolve it to the Actor's profile URL. This is the standard entry point for Fediverse discovery.

HTTP Signatures

All outbound ActivityPub deliveries are signed with the Actor's private key per the HTTP Signatures spec. Inbound activities are verified against the sender's public key before being accepted.


Architecture Fit

BinktermPHP already has the infrastructure this needs:

Needed Already exists
Per-user identity and public profiles users table, public profile API
Inbound message storage echomail table, MessageHandler
Outbound delivery queue data/outbound/, daemon model
Event bus for triggering outbound sends sse_events / BinkStream
Admin daemon for config and key storage admin_daemon.php
HTTP route layer SimpleRouter, routes/api-routes.php
Sysop feature toggles BBS Settings admin UI

A new activitypub_daemon.php (or a lightweight addition to admin_daemon.php) would handle outbound delivery. Inbound ActivityPub arrives via standard HTTP POST to each Actor's inbox endpoint, handled by a new route group.

Actor keypairs (one per user, one per echo area) would be generated on first use and stored via the admin daemon, following the same pattern as MCP bearer keys.


Sysop Controls

ActivityPub federation should be entirely opt-in and granular:

  • Global toggle — enable/disable the feature entirely from Admin → BBS Settings
  • Per-area federation — sysop chooses which echo areas are federated; private or sysop-only areas would never be exposed
  • Inbound gating — sysop controls whether inbound Fediverse posts are accepted into an area, and whether they are gated into the FTN
  • User opt-out — users can opt out of having a public Fediverse Actor

Why This Is Worth Doing

The Fediverse has millions of active users who will never install a Telnet client or learn what FTN means. ActivityPub turns every federated echo area into a community that is discoverable from any Mastodon search. A new BBS sysop gets an audience on day one — not just the small pool of people already looking for BBSes.

It also completes a symmetry that already exists in the platform: BinktermPHP speaks every major protocol from the BBS era. ActivityPub is the protocol of the current decentralized web. Adding it makes BinktermPHP the bridge between those two worlds.


Prior Art

  • Lemmy federates communities as Group Actors — the same model proposed here for echo areas
  • Guppe is a lightweight ActivityPub group relay that demonstrates the pattern at minimal complexity
  • WriteFreely federates blog posts as Notes — similar to what echomail federation would produce

Open Questions

  • Should replies from the Fediverse carry a special attribution kludge line when gated into FTN, identifying the source network?
  • Should echo area Actors have a configurable display name separate from the FTN area tag?
  • Rate limiting: high-traffic FTN areas could produce significant outbound delivery volume — should there be a per-area follower cap or delivery rate limit?
  • Should the BBS appear in Mastodon's instance directory?

This is an early idea and has not been reviewed for feasibility or scheduled for any release. Feedback and questions welcome.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions