To submit an implementation report, use the ActivityPub test suite to generate an implementation report and then submit that report to the ActivityPub issue tracker. (Or, file a PR directly to this site's repository.)

Implementation reports

(hover for description)# yesBridgy Feddistbin.comdokieliKroegMastodonplaces.pubPubstrateSmilodontags.pub
Client-to-Server Client4NoYesYesYesNoNoYesNoNo
Client-to-Server Server3NoYesNoYesNoNoYesNoNo
Federated (Server-to-Server) Server8YesYesNoYesYesYesYesYesYes
client:submission:discovers-url-from-profile4N/AYesYesYesN/AN/AYesN/AN/A
client:submission:submit-post-with-content-type4N/AYesYesYesN/AN/AYesN/AN/A
client:submission:submit-objects4N/AYesYesYesN/AN/AYesN/AN/A
client:submission:submit-objects:provide-object3N/ANoYesYesN/AN/AYesN/AN/A
client:submission:submit-objects:provide-target3N/ANoYesYesN/AN/AYesN/AN/A
client:submission:authenticated3N/ANoYesYesN/AN/AYesN/AN/A
client:submission:recursively-add-targets4N/AYesYesYesN/AN/AYesN/AN/A
client:submission:recursively-add-targets:limits-depth4N/AYesYesYesN/AN/AYesN/AN/A
client:retrieval:accept-header4N/AYesYesYesN/AN/AYesN/AN/A
outbox:accepts-activities3N/AYesN/AYesN/AN/AYesN/AN/A
outbox:accepts-non-activity-objects3N/AYesN/AYesN/AN/AYesN/AN/A
outbox:removes-bto-and-bcc2N/A*NoN/AYesN/AN/AYesN/AN/A
outbox:ignores-id3N/AYesN/AYesN/AN/AYesN/AN/A
outbox:responds-201-created3N/AYesN/AYesN/AN/AYesN/AN/A
outbox:location-header3N/AYesN/AYesN/AN/AYesN/AN/A
outbox:update2N/A*No*N/AYesN/AN/AYesN/AN/A
outbox:update:partial2N/A*No*N/AYesN/AN/AYesN/A*N/A*
outbox:create2N/A*NoN/AYesN/AN/AYesN/AN/A
outbox:create:merges-audience-properties2N/A*NoN/AYesN/AN/AYesN/AN/A
outbox:create:actor-to-attributed-to2N/A*NoN/AYesN/AN/AYesN/AN/A
outbox:follow2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:follow:adds-followed-object2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:add2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:add:adds-object-to-target2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:remove2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:remove:removes-from-target2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:like2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:like:adds-object-to-liked2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:block2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:block:prevent-interaction-with-actor2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:undo2N/ANoN/AYesN/AN/AYesN/AN/A
outbox:undo:ensures-activity-and-actor-are-same2N/ANoN/AYesN/AN/AYesN/AN/A
inbox:delivery:performs-delivery4YesYesN/AYesN/A*N/A*YesN/A*N/A*
inbox:delivery:addressing4YesYesN/AYesN/A*N/A*YesN/A*N/A*
inbox:delivery:adds-id4YesYesN/AYesN/A*N/A*YesN/A*N/A*
inbox:delivery:submit-with-credentials2YesNoN/AYesN/A*N/A*NoN/A*N/A*
inbox:delivery:deliver-to-collection3YesNoN/AYesN/A*N/A*YesN/A*N/A*
inbox:delivery:deliver-to-collection:recursively2NoNoN/AYesN/A*N/A*YesN/A*N/A*
inbox:delivery:delivers-with-object-for-certain-activities4YesNoN/AYesYesNoYesNoNo
inbox:delivery:delivers-with-target-for-certain-activities3N/ANoN/AYesYesNoYesNoNo
inbox:delivery:deduplicates-final-recipient-list4YesYesN/AYesNoNoNoYesNo
inbox:delivery:do-not-deliver-to-actor3NoNoN/AYesYesNoNoNoYes
inbox:delivery:do-not-deliver-block2N/ANoN/AYesYesNoNoNoNo
inbox:delivery:sharedInbox2NoNoN/AYesYesMissingNoNoMissing
inbox:delivery:sharedInbox:deliver-to-inbox-if-no-sharedInbox2N/ANoN/AYesYesMissingN/A*NoMissing
inbox:accept:deduplicate4NoYesN/AYesYesNoNoYesNo
inbox:accept:special-forward2NoNoN/AYesNoNoYesNoNo
inbox:accept:special-forward:recurses2NoNoN/AYesNoNoYesNoNo
inbox:accept:special-forward:limits-recursion2NoNoN/AYesNoNoYesNoNo
inbox:accept:create5NoYesN/AYesYesMissingYesYesMissing
inbox:accept:delete2NoNoN/AYesYesMissingNoNoMissing
inbox:accept:delete:tombstone2NoNoN/AYesYesMissingNoNoMissing
inbox:accept:update:is-authorized2N/ANoN/AYesYesNoNoNoNo
inbox:accept:update:completely-replace3YesNoN/AYesYesNoNoNoNo
inbox:accept:dont-blindly-trust3N/ANoN/AYesYesNoNoNoYes
inbox:accept:follow:add-actor-to-users-followers5N/ANoN/AYesYesNoYesYesYes
inbox:accept:follow:generate-accept-or-reject3N/ANoN/AYesYesMissingNoYesMissing
inbox:accept:accept:add-actor-to-users-following3N/ANoN/AYesYesMissingNoYesMissing
inbox:accept:reject:does-not-add-actor-to-users-following3N/ANoN/AYesYesMissingNoYesMissing
inbox:accept:add:to-collection2N/ANoN/AYesNoNoYesNoNo
inbox:accept:remove:from-collection2N/ANoN/AYesNoNoYesNoNo
inbox:accept:like:indicate-like-performed4YesNoN/AYesYesNoNoYesNo
inbox:accept:announce:add-to-shares-collection3Yes*NoN/AYesYesMissingNoNoMissing
inbox:accept:undo2NoNoN/AYesYesMissingNoNoMissing
server:inbox:responds-to-get5NoYesN/AYesNoNoYesYesYes
server:inbox:is-orderedcollection5N/AYesN/AYesNoNoYesYesYes
server:inbox:filtered-per-permissions3N/ANoN/AYesNoNoYesNoYes
server:object-retrieval:get-id6NoYesN/AYesYesYesYesNoYes
server:object-retrieval:respond-with-as2-re-ld-json6NoYesN/AYesYesYesYesNoYes
server:object-retrieval:respond-with-as2-re-activity-json6NoYesN/AYesYesYesYesNoYes
server:object-retrieval:deleted-object:tombstone2NoNoN/AYesNoNoYesNoNo
server:object-retrieval:deleted-object:410-status3NoNoN/AYesYesNoYesNoNo
server:object-retrieval:deleted-object:404-status3NoNoN/AYesYesNoYesNoNo
server:object-retrieval:private-403-or-4043NoNoN/AYesYesNoNoNoYes
server:security-considerations:actually-posted-by-actor3NoNoN/AYesYesNoNoNoYes
server:security-considerations:do-not-post-to-localhost3NoYesN/AYesNoNoYesNoNo
server:security-considerations:uri-scheme-whitelist2NoNoN/AYesNoNoYesNoNo
server:security-considerations:filter-incoming-content3NoYesN/AYesNoNoYesNoNo
server:security-considerations:sanitize-fields4YesYesN/AYesYesNoNoNoNo

Implementation details

Bridgy Fed
Homepagehttps://fed.brid.gy/
Source Repohttps://github.com/snarfed/bridgy-fed
Developers

Ryan Barrett

Notes / About

Bridgy Fed is a bridge that converts between webmentions, ActivityPub and OStatus. It connects the IndieWeb with federated social networks like Mastodon, Hubzilla, and others in the fediverse that support two protocols.

Bridgy Fed is a loose extension of Bridgy, which is a similar bridge between the IndieWeb and social media sites. As of November 2017, it has >4k users and has successfully sent >900k webmentions for responses inside those sites.

Details

Users use Bridgy Fed by creating an IndieWeb post (in HTML with microformats2) on their own web site that replies, likes, or reposts (aka announces) a post on a federated social network. They then send a webmention to Bridgy Fed to trigger it to fetch their IndieWeb post, convert it to ActivityStreams 2 (via granary), and deliver it to the target post's author and other recipients via ActivityPub.

Bridgy Fed handles the other direction too. If a federated social network user replies to, likes, or reposts an IndieWeb post, Bridgy Fed will accept it in their inbox, translate it into a webmention, send it to the IndieWeb post, and convert the AS2 object to HTML with microformats2 to be rendered for the webmention receiver.

This is federation, not syndication. IndieWeb posts translated to AS2 objects have both post object and actor based at the IndieWeb site's domain, with appropriate ids and URLs. If the IndieWeb site is example.com, the ActivityPub actor id would be @example.com@example.com. (This is subject to change; more background here.)

Bridgy Fed can do all this via OStatus as well.

About the Server-to-Server implementation

The Bridgy Fed Server:

  • Accepts activity submissions via webmention, and updates the server's Objects per rules described below
  • Delivers these submissions to the inboxes of other Servers
  • Receives Activity from other servers in an inbox, and updates the server's Objects per rules described below
  • Delivers Objects to Clients via webmention
Interoperability with other implementations

Various IndieWeb sites, Mastodon, Hubzilla, and others

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

Public Domain / CC0

Programming Language

Python

distbin.com
Homepagehttps://distbin.com
Developers

Benjamin Goering

Notes / About

Distbin is a distributed pastebin. Anyone can anonymously create little text posts, and anyone else can reply to them.

You can even create posts that are inReplyTo parent posts that are hosted elsewhere on the web (like another distbin.com installation), and distbin will tell the parent about it via ActivityPub.

distbin is made up of at least two components:

  • core - Speaks only JSON/ActivityPub
  • distbin-html

    • Renders a homepage with a form that helps an end-user build Create Note activites
    • Renders created activities to HTML
    • Renders the public collection to HTML
Publicly Accessible?yes
Free/Libre/Open Source?no
Programming Language

JavaScript

dokieli
Homepagehttps://dokie.li/
Source Repohttps://github.com/linkeddata/dokieli
Developers

Sarven Capadisli

Notes / About

dokieli is a clientside editor for decentralised article publishing, annotations and social interactions. It can work as a single-page application or as a Web browser extension.

  • dokieli can create and consume content in different RDF serializations (RDFa in HTML and SVG, Turtle, JSON-LD) for fine-grained semantic structure;
  • can work with Linked Data Platform based servers for personal data storage;
  • implements the sender and consumer roles of Linked Data Notifications;
  • Web Annotation for structured annotations;
  • WebID for identity discovery and profile use;
  • ActivityPub and ActivityStreams 2 to send and consume activities/objects
License

Apache License 2.0

Programming Language

Javascript

Kroeg
Source Repohttps://github.com/puckipedia/kroeg
Developers

Puck Meerburg

Notes / About

Serves ActivityPub and has bridges to OStatus. ActivityPub federation tested against Mastodon.

Interoperability with other implementations

Mastodon

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

Expat (MIT)

Programming Language

C#

Mastodon
Homepagehttps://joinmastodon.org
Source Repohttps://github.com/tootsuite/mastodon
Developers

Over 400 contributors at time of report submission

Notes / About

Mastodon is a free, open-source, decentralized microblogging application with support for the ActivityPub and OStatus protocols. Built for global networks of close-knit communities, Mastodon puts social networking back in the hands of users.

Interoperability with other implementations

Applications interoperating with Mastodon over ActivityPub must support Webfinger resolution, with a unique preferredUsername per host, so that they can be interacted with by other users. Posts to the inbox must be signed using the HTTP Signatures draft spec with a public key that can be fetched from the actor, using the publicKey object format from the WebPayments JSON-LD Security Vocabulary.

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

AGPLv3

Programming Language

Ruby, Javascript

places.pub
Homepagehttps://places.pub/
Source Repohttps://gitlab.com/evanp/places-pub
Developers

Evan Prodromou

Notes / About

places.pub is a place server for the ActivityPub network. It represents places in the world as AS2 'Place' objects. Plan is to add inboxes to the Place objects so they can be addressed, and when they receive activities related to that Place, they will re-share them. Also will allow Follow, stop follow. Only fetching Place objects is implemented now.

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

Apache v2

Programming Language

Javascript

Pubstrate
Source Repohttps://gitlab.com/dustyweb/pubstrate
Developers

Christopher Allan Webber

Notes / About

ActivityPub / ActivityStreams focused social networking application written in Guile.

Free/Libre/Open Source?yes
License

GPLv3 or later

Programming Language

Guile Scheme

Smilodon
Homepagehttps://populator.smilodon.social
Source Repohttps://github.com/rowanlupton/smilodon
Developers

Rowan Lupton

Notes / About

very unfinished, intent to eventually federate with any server that supports activitypub (primary objective Mastodon, as the name implies)

Interoperability with other implementations

Some testing against Mastodon, WIP

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

Expat (MIT)

Programming Language

Python

tags.pub
Homepagehttps://tags.pub
Source Repohttps://gitlab.com/evanp/tags-pub
Developers

Evan Prodromou

Notes / About

tags.pub is a hashtag server for the ActivityPub network. Tags can be addressed and followed. Tags will reshare public activities that are tagged with their tag, or that create or update an object tagged with their tag.

Publicly Accessible?yes
Free/Libre/Open Source?yes
License

Apache v2

Programming Language

Javascript