Back to Owncast

Federation

FEDERATION.md

0.2.55.1 KB
Original Source

Federation

This document describes how Owncast federates with other ActivityPub servers, following FEP-67ff.

Supported Federation Protocols and Standards

Supported FEPs

Actor

Owncast servers present as a single Service actor (not Person). Each Owncast instance has one actor representing the live stream.

The actor profile includes:

  • icon: Server logo/avatar
  • image: Profile banner image
  • summary: Server description (HTML)
  • attachment: Array of PropertyValue objects containing social links and metadata
  • tag: Hashtags describing the server content
  • manuallyApprovesFollowers: true if the server operates in private mode
  • discoverable: Always true

Owncast actors do not follow other actors. The following collection endpoint returns 404.

Activities

ActivityObjectSendReceiveNotes
CreateNoteYesNoSent on go-live and manual fediverse posts. Incoming posts are ignored.
UpdateServiceYesNoSent when server profile changes.
UpdatePersonNoYesUpdates cached follower profile information.
Follow-NoYesQueued for approval if private mode is enabled.
AcceptFollowYesNoSent automatically unless in private mode.
UndoFollowNoYesRemoves the follower.
LikeNoteNoYesOptionally displayed in live chat.
AnnounceNoteNoYesOptionally displayed in live chat.

Owncast is a broadcast-only service. It does not follow other actors or accept incoming posts.

Notes

Posts from Owncast are Note objects with:

  • content: HTML-formatted text with linked hashtags
  • attachment: Image object with stream thumbnail (for go-live posts)
  • tag: Array containing Hashtag and Mention objects
  • sensitive: true if the stream is marked NSFW

Go-Live Announcements

When a stream starts, Owncast sends a Create(Note) containing:

  • The configured go-live message (or default announcement)
  • A thumbnail image of the stream
  • Hashtags configured for the server
  • A link to watch the stream

Hashtags

Hashtags use toot:Hashtag type and link to https://directory.owncast.online/tags/{tag} for discovery across Owncast instances.

Addressing

Public posts are addressed to:

json
{
  "to": ["https://www.w3.org/ns/activitystreams#Public"],
  "cc": ["{actor}/followers"]
}

Owncast supports sending direct messages to specific actors (used for replying to engagement). These include the recipient in cc with a corresponding Mention tag for Mastodon compatibility.

HTTP Signatures

Outbound: All POST requests are signed using RSA-SHA256. Signed headers: (request-target), host, date, digest.

Inbound: All POST requests to the inbox must have a valid signature. Unsigned requests are rejected.

GET requests to actor, outbox, and followers endpoints do not require signatures.

WebFinger

Actor discovery via /.well-known/webfinger?resource=acct:{username}@{domain}

Response links include:

  • self (application/activity+json): Actor document
  • http://webfinger.net/rel/profile-page: Web profile
  • http://webfinger.net/rel/avatar: Profile image
  • alternate (application/x-mpegURL): HLS stream URL

The HLS stream link allows clients to discover the live stream URL directly from WebFinger.

NodeInfo

Available at /.well-known/nodeinfo with NodeInfo 2.0 at /nodeinfo/2.0.

Additional endpoints:

  • /.well-known/x-nodeinfo2: Extended format
  • /api/v1/instance: Mastodon-compatible instance information
  • /.well-known/host-meta: WebFinger discovery

Private Mode

Owncast can operate in private mode where:

  • manuallyApprovesFollowers is true on the actor
  • Follow requests are queued for admin approval
  • Accept is only sent after manual approval

Blocking

Owncast supports blocking at the domain and individual actor level. Blocked entities:

  • Cannot deliver to the inbox (requests rejected)
  • Do not receive activities from the server

Interoperability Notes

  • Owncast uses Service actor type, not Person
  • There is no following collection (Owncast does not follow accounts)
  • Owncast does not accept incoming posts (Create from remote actors is ignored)
  • Engagement (Like, Announce) can be displayed in the live chat if enabled
  • The sensitive flag indicates NSFW content for the entire stream

Additional Resources