about summary refs log tree commit diff
path: root/docs/Extensions.md
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2017-01-25 02:46:16 +0100
committerEugen Rochko <eugen@zeonfederated.com>2017-01-25 02:46:16 +0100
commitab94ad35048545b32be12c582a92df8ca048eaeb (patch)
tree20787f422a50f73c073a78ce6604049a1c5db49b /docs/Extensions.md
parent41f5459af5c30ac71096a1d1efc38837ab940acf (diff)
Add description of Mastodon's current protocol extensions
Diffstat (limited to 'docs/Extensions.md')
-rw-r--r--docs/Extensions.md17
1 files changed, 17 insertions, 0 deletions
diff --git a/docs/Extensions.md b/docs/Extensions.md
new file mode 100644
index 000000000..372dfc24a
--- /dev/null
+++ b/docs/Extensions.md
@@ -0,0 +1,17 @@
+Protocol extensions
+===================
+
+Some functionality in Mastodon required some additions to the protocols to enable seamless federation of those features:
+
+1. ActivityStreams was lacking verbs for block/unblock. Mastodon creates Salmon slaps for block and unblock events, which are not part of a user's public feed, but are nevertheless delivered to the target user. The intent of these Salmon slaps is not to notify the target user, but to notify the target user's server, so that it can perform any number of UX-related tasks such as removing the target user as a follower of the blocker, and/or displaying a message to the target user such as "You can't follow this person because you've been blocked"
+
+  The Salmon slaps have the exact same structure as standard follow/unfollow slaps, the verbs are namespaced:
+
+  - `http://mastodon.social/schema/1.0/block`
+  - `http://mastodon.social/schema/1.0/unblock`
+
+2. Statuses can be marked as containing sensitive (or not safe for work) media. This is symbolized by a `<category term="nsfw" />` on the Atom entry
+
+3. Statuses can have a content warning (used e.g. for warning about spoilers in the text). It is stored in the `warning` attribute on the `<content />` tag of the Atom entry
+
+4. Statuses that are intended to be listed publicly on e.g. "whole known network" or "public" timelines contain a `<link rel="mentioned" href="http://activityschema.org/collection/public" ostatus:object-type="http://activitystrea.ms/schema/1.0/collection"/>`. Conversely, statuses which do not contain that, are intended to be low key, unlisted