Protocols

Currently two protocols are being focused on. Diaspora is considered to be stable with most of the protocol implemented. ActivityPub support should be considered as alpha - all the basic things work but there are likely to be a lot of compatibility issues with other ActivityPub implementations.

For example implementations in real life projects check Projects using federation.

Diaspora

This library only supports the current renewed version of the protocol. Compatibility for the legacy version was dropped in version 0.18.0.

The feature set supported is the following:

  • Webfinger, hCard and other discovery documents

  • NodeInfo 1.0 documents

  • Social-Relay documents

  • Magic envelopes, signatures and other transport method related necessities

  • Entities as follows:

    • Comment
    • Like
    • Photo
    • Profile
    • Retraction
    • StatusMessage
    • Contact
    • Reshare

ActivityPub

Features currently supported:

  • Webfinger

  • Objects and activities as follows:

    • Actor (Person outbound, Person, Organization, Service inbound)
    • Note, Article and Page (Create, Delete, Update) * These become a Post or Comment depending on inReplyTo.
    • Attachment images from the above objects
    • Follow, Accept Follow, Undo Follow
    • Announce

Namespace

All payloads over ActivityPub sent can be identified with by checking @context which will include the pyfed: https://docs.jasonrobinson.me/ns/python-federation namespace.

Content media type

The following keys will be set on the entity based on the source property existing:

  • if the object has an object.source property: * _media_type will be the source media type * _rendered_content will be the object content * raw_content will be the source content
  • if the object has no object.source property: * _media_type will be text/html * _rendered_content will be the object content * raw_content will object content run through a HTML2Markdown renderer

For outbound entities, raw_content is expected to be in text/markdown, specifically CommonMark. When sending payloads, raw_content will be rendered via the commonmark library into object.content. The original raw_content will be added to the object.source property.

Images

Any images referenced in the raw_content of outbound entities will be extracted into object.attachment objects, for receivers that don’t support inline images. These attachments will have a pyfed:inlineImage property set to true to indicate the image has been extrated from the content. Receivers should ignore the inline image attachments if they support showing <img> HTML tags or the markdown content in object.source.

For inbound entities we do this automatically by not including received attachments in the entity _children attribute.