Implementation reports
(hover for description) | # yes | Bridgy Fed | distbin.com | dokieli | go-fed | Kroeg | Mastodon | microblog.pub | PeerTube | places.pub | Pleroma | Pubstrate | Smilodon | tags.pub |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Client-to-Server Client | 5/13 | No | Yes | Yes | No | Yes | No | Yes | No | No | No | Yes | No | No |
Client-to-Server Server | 5/13 | No | Yes | No | Yes | Yes | No | Yes | No | No | No | Yes | No | No |
Federated (Server-to-Server) Server | 12/13 | Yes | Yes | No | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
client:retrieval:accept-header | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:authenticated | 4/13 | N/A | No | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:discovers-url-from-profile | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:recursively-add-targets | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:recursively-add-targets:limits-depth | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:submit-objects | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:submit-objects:provide-object | 4/13 | N/A | No | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:submit-objects:provide-target | 3/13 | N/A | No | Yes | N/A | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
client:submission:submit-post-with-content-type | 5/13 | N/A | Yes | Yes | N/A | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
inbox:accept:accept:add-actor-to-users-following | 7/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes | No |
inbox:accept:add:to-collection | 4/13 | N/A | No | N/A | Yes | Yes | No | No | No | No | Yes | Yes | No | No |
inbox:accept:announce:add-to-shares-collection | 6/13 | Yes | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:accept:create | 9/13 | No | Yes | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | No |
inbox:accept:deduplicate | 7/13 | No | Yes | N/A | Yes | Yes | Yes | Yes | No | No | Yes | No | Yes | No |
inbox:accept:delete | 6/13 | No | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:accept:delete:tombstone | 3/13 | No | No | N/A | Yes | Yes | Yes | No | No | No | No | No | No | No |
inbox:accept:dont-blindly-trust | 6/13 | N/A | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | No | No | Yes |
inbox:accept:follow:add-actor-to-users-followers | 9/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | Yes | Yes |
inbox:accept:follow:generate-accept-or-reject | 7/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes | No |
inbox:accept:like:indicate-like-performed | 8/13 | Yes | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes | No |
inbox:accept:reject:does-not-add-actor-to-users-following | 7/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | Yes | No |
inbox:accept:remove:from-collection | 4/13 | N/A | No | N/A | Yes | Yes | No | No | No | No | Yes | Yes | No | No |
inbox:accept:special-forward | 4/13 | No | No | N/A | Yes | Yes | No | No | No | No | Yes | Yes | No | No |
inbox:accept:special-forward:limits-recursion | 4/13 | No | No | N/A | Yes | Yes | No | No | No | No | Yes | Yes | No | No |
inbox:accept:special-forward:recurses | 4/13 | No | No | N/A | Yes | Yes | No | No | No | No | Yes | Yes | No | No |
inbox:accept:undo | 5/13 | No | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:accept:update:completely-replace | 7/13 | Yes | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:accept:update:is-authorized | 6/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:delivery:addressing | 6/13 | Yes | Yes | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | Yes | N/A* | N/A* |
inbox:delivery:adds-id | 6/13 | Yes | Yes | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | Yes | N/A* | N/A* |
inbox:delivery:deduplicates-final-recipient-list | 8/13 | Yes | Yes | N/A | Yes | Yes | No | Yes | Yes | No | Yes | No | Yes | No |
inbox:delivery:deliver-to-collection | 5/13 | Yes | No | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | Yes | N/A* | N/A* |
inbox:delivery:deliver-to-collection:recursively | 4/13 | No | No | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | Yes | N/A* | N/A* |
inbox:delivery:delivers-with-object-for-certain-activities | 8/13 | Yes | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No |
inbox:delivery:delivers-with-target-for-certain-activities | 6/13 | N/A | No | N/A | Yes | Yes | Yes | No | Yes | No | Yes | Yes | No | No |
inbox:delivery:do-not-deliver-block | 6/13 | N/A | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:delivery:do-not-deliver-to-actor | 7/13 | No | No | N/A | Yes | Yes | Yes | Yes | Yes | No | Yes | No | No | Yes |
inbox:delivery:performs-delivery | 6/13 | Yes | Yes | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | Yes | N/A* | N/A* |
inbox:delivery:sharedInbox | 5/13 | No | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | No | No | No |
inbox:delivery:sharedInbox:deliver-to-inbox-if-no-sharedInbox | 5/13 | N/A | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | N/A* | No | No |
inbox:delivery:submit-with-credentials | 4/13 | Yes | No | N/A | Yes | Yes | N/A* | Yes | N/A* | N/A* | N/A* | No | N/A* | N/A* |
outbox:accepts-activities | 5/13 | N/A | Yes | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:accepts-non-activity-objects | 5/13 | N/A | Yes | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:add | 3/13 | N/A | No | N/A | Yes | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:add:adds-object-to-target | 2/13 | N/A | No | N/A | Inconclusive* | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:block | 4/13 | N/A | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:block:prevent-interaction-with-actor | 4/13 | N/A | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:create | 4/13 | N/A* | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:create:actor-to-attributed-to | 3/13 | N/A* | No | N/A | Yes | Yes | N/A | Inconclusive* | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:create:merges-audience-properties | 3/13 | N/A* | No | N/A | Yes | Yes | N/A | Inconclusive* | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:follow | 4/13 | N/A | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:follow:adds-followed-object | 2/13 | N/A | No | N/A | No | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:ignores-id | 5/13 | N/A | Yes | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:like | 3/13 | N/A | No | N/A | Inconclusive* | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:like:adds-object-to-liked | 3/13 | N/A | No | N/A | Inconclusive* | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:location-header | 5/13 | N/A | Yes | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:remove | 2/13 | N/A | No | N/A | Inconclusive* | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:remove:removes-from-target | 2/13 | N/A | No | N/A | Inconclusive* | Yes | N/A | No | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:removes-bto-and-bcc | 4/13 | N/A* | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:responds-201-created | 5/13 | N/A | Yes | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:undo | 3/13 | N/A | No | N/A | No | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:undo:ensures-activity-and-actor-are-same | 3/13 | N/A | No | N/A | No | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:update | 4/13 | N/A* | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A | N/A |
outbox:update:partial | 4/13 | N/A* | No | N/A | Yes | Yes | N/A | Yes | N/A | N/A | N/A | Yes | N/A* | N/A* |
server:inbox:filtered-per-permissions | 5/13 | N/A | No | N/A | No | Yes | No | Yes | No | No | Yes | Yes | No | Yes |
server:inbox:is-orderedcollection | 8/13 | N/A | Yes | N/A | Yes | Yes | No | Yes | No | No | Yes | Yes | Yes | Yes |
server:inbox:responds-to-get | 8/13 | No | Yes | N/A | Yes | Yes | No | Yes | No | No | Yes | Yes | Yes | Yes |
server:object-retrieval:deleted-object:404-status | 6/13 | No | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | Yes | No | No |
server:object-retrieval:deleted-object:410-status | 6/13 | No | No | N/A | Yes | Yes | Yes | Yes | No | No | Yes | Yes | No | No |
server:object-retrieval:deleted-object:tombstone | 3/13 | No | No | N/A | Yes | Yes | No | No | No | No | No | Yes | No | No |
server:object-retrieval:get-id | 10/13 | No | Yes | N/A | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
server:object-retrieval:private-403-or-404 | 4/13 | No | No | N/A | No | Yes | Yes | No | No | No | Yes | No | No | Yes |
server:object-retrieval:respond-with-as2-re-activity-json | 10/13 | No | Yes | N/A | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
server:object-retrieval:respond-with-as2-re-ld-json | 10/13 | No | Yes | N/A | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | No | Yes |
server:security-considerations:actually-posted-by-actor | 6/13 | No | No | N/A | No | Yes | Yes | Yes | Yes | No | Yes | No | No | Yes |
server:security-considerations:do-not-post-to-localhost | 6/13 | No | Yes | N/A | No | Yes | Yes | Yes | No | No | Yes | Yes | No | No |
server:security-considerations:filter-incoming-content | 4/13 | No | Yes | N/A | No | Yes | No | No | No | No | Yes | Yes | No | No |
server:security-considerations:sanitize-fields | 4/13 | Yes | Yes | N/A | No | Yes | Yes | No | No | No | No | No | No | No |
server:security-considerations:uri-scheme-whitelist | 5/13 | No | No | N/A | No | Yes | Yes | Yes | No | No | Yes | Yes | No | No |
Bridgy Fed | |
---|---|
Homepage | https://fed.brid.gy/ |
Source Repo | https://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. DetailsUsers 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 Bridgy Fed can do all this via OStatus as well. About the Server-to-Server implementationThe Bridgy Fed Server:
|
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | Public Domain / CC0 |
Programming Language | Python |
distbin.com | |
---|---|
Homepage | https://distbin.com |
Source Repo | https://github.com/gobengo/distbin |
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? | Yes |
License | Apache License 2.0 |
Programming Language | JavaScript |
dokieli | |
---|---|
Homepage | https://dokie.li/ |
Source Repo | https://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.
|
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | Apache License 2.0 |
Programming Language | Javascript |
go-fed | |
---|---|
Homepage | https://go-fed.org |
Source Repo | https://github.com/go-fed/activity |
Developers | |
Notes / About |
go-fed is a library that implements ActivityStreams and ActivityPub in Go. Whether you wish to create a new application, add ActivityPub to an existing one, or just use ActivityStreams data types, go-fed is here to help. The website hosts a tutorial geared for developers who may not be familiar with the ActivityStreams and ActivityPub protocols. It also hosts GoDoc-like documentation for each versioned release. Applications using go-fed can turn many of the “No” entries in this implementation report to “Yes”. Use the security protocols, spam filtering, and administrative tooling required for your application’s needs. “Why wait ‘til tomorrow? go-fed.today!” Official implementation reports were first generated using go-fed |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | BSD 3-Clause |
Programming Language | Go |
Kroeg | |
---|---|
Homepage | |
Source Repo | https://github.com/puckipedia/kroeg |
Developers | Puck Meerburg |
Notes / About | Serves ActivityPub and has bridges to OStatus. ActivityPub federation tested against Mastodon. |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | Expat (MIT) |
Programming Language | C# |
Mastodon | |
---|---|
Homepage | https://joinmastodon.org |
Source Repo | https://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. |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | AGPLv3 |
Programming Language | Ruby, Javascript |
microblog.pub | |
---|---|
Homepage | https://microblog.pub |
Source Repo | https://github.com/tsileo/microblog.pub |
Developers | |
Notes / About | A self-hosted, single-user, ActivityPub powered microblog. |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | GNU AGPLv3 |
Programming Language | Python |
PeerTube | |
---|---|
Homepage | https://peertube.cpy.re |
Source Repo | https://github.com/Chocobozzz/PeerTube |
Developers | |
Notes / About |
Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent. Under heavy development, implementation might be improved in the future :) |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | GNU AGPLv3 |
Programming Language | Typescript |
places.pub | |
---|---|
Homepage | https://places.pub/ |
Source Repo | https://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 |
Pleroma | |
---|---|
Homepage | https://pleroma.social/ |
Source Repo | https://git.pleroma.social/pleroma/pleroma |
Developers | |
Notes / About | |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | GNU AGPLv3 |
Programming Language | Elixir |
Pubstrate | |
---|---|
Homepage | |
Source Repo | https://gitlab.com/dustyweb/pubstrate |
Developers | Christopher Allan Webber |
Notes / About | ActivityPub / ActivityStreams focused social networking application written in Guile. |
Publicly Accessible? | No |
Free/Libre/Open Source? | Yes |
License | GPLv3 or later |
Programming Language | Guile Scheme |
Smilodon | |
---|---|
Homepage | https://populator.smilodon.social |
Source Repo | https://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) |
Publicly Accessible? | Yes |
Free/Libre/Open Source? | Yes |
License | Expat (MIT) |
Programming Language | Python |
tags.pub | |
---|---|
Homepage | https://tags.pub |
Source Repo | https://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 |