Standardizing the Social Web

Open Source Bridge • June 2016 / @aaronpk


The Early Web

  • Mostly static HTML pages
  • Content updated manually
  • Required learning HTML
  • and learning about DNS & hosting

1997-2002: Blogs

1997-2002: Blogs

  • A domain name with a blog was one's online identity
  • Blogging tools allowed people to focus on creating content rather than code
  • People made personal connections via reading and commenting on blogs
  • RSS/ATOM feeds for subscribing to others' blogs
  • Pingback to know who was linking to who

2002-2006 Rise of Social Networks

  • Friendster
  • Myspace
  • Orkut
  • Facebook


  • Easy signup
  • Follow people with one click
  • Integrated reading and posting experience


RSS vs Atom Wars

  • Years of arguments
  • Debating slightly different formats
    for essentially the same purpose

Trackback - too easily spammed

Pingback - noisy user experience

Decline of Blogs

  • Distracted by format wars, blog UX stopped evolving
  • People went to social networks to connect to other people
  • Silo UX provided more meaningful interactions
  • People converted their websites to flat "business cards"...
  • ...and moved to where writing was easier

2007: Twitter popularizes simplicity

screenshot: Brian Solis

Twitter App Ecosystem

  • TweetDeck (Windows, OS X, iOS, Android, Browser)
  • Twitterific (OS X, iOS)
  • HootSuite (browser based)
  • Echofon (Windows, OS X, iOS, Firefox)
  • Janetter (Windows, OS X, iOS, Android)
  • Tweetings (Windows, OS X)
  • Destroy Twitter (Windows, OS X, Linux)
  • ... many more!

2010: Federated Social Web Summit

Portland, Oregon

2010: Federated Social Web Summit

  • Specs were too hard
  • OpenID, OAuth 1, Salmon, XML namespaces everywhere
  • Too few implementations
  • Too much emphasis on plumbing

"I don't care about federation,
I care about my content,
and my friends."

Tantek Çelik

2011: IndieWebCamp

IndieWebCamp Principles

  • Build for yourself
  • UX and design before protocols
  • Modularity
  • Plurality of projects


  • OpenID → RelMeAuth → IndieAuth
  • Microformats/RDFa → Microformats 2
  • Pingback → Webmention
  • Make things easier for publishers and consumers
  • Driven by user experience

2014: W3C Social Web Working Group

Standardize protocols, APIs and vocabularies
for building the Social Web

Group Deliverables

  • Social Data Syntax - a JSON-based syntax to transfer status updates and other social info across systems
  • Social API - an API that can create social data, as well as consume it
  • Federation Protocol - to allow sharing information between disparate systems

Current Specs

  • Activity Streams 2.0
  • ActivityPub
  • Micropub
  • Webmention

Spec Lifecycle

  • ED - Editor's Draft
  • WD - Working Draft
  • CR - Candidate Recommendation
  • PR - Proposed Recommendation
  • REC - Recommendation

Activity Streams 2.0

Social Syntax

Activity Streams 2.0

An activity stream is a collection of actions that have been taken by users in a given system

Activity Streams 2.0

  • "Amy posted a note"
  • "Ben tagged you in a photo"
  • "Chris started following you"
  • "Evan invited you to an event"
  • "Jessica commented on a post"


  "@context": "",
  "type": "Travel",
  "name": "Sally went to work",
  "actor": {
    "type": "Person",
    "name": "Sally"
  "target": {
    "type": "Place",
    "name": "Work"


  "@context": "",
  "type": "Follow",
  "name": "Sally followed John",
  "actor": {
    "type": "Person",
    "name": "Sally"
  "object": {
    "type": "Person",
    "name": "John"

Activity Streams 2.0

Current Status:

  • Working Draft - requesting CR transition soon
  • Replaces previous (XML) version of Activity Streams
  • ~2 current interoperable implementations
  • Seeking implementers and feedback



Python library for Activity Streams 2.0

Also a good tutorial!


Social API


An API to create Activity Streams actions and otherwise manipulate social data

as well as a way to federate Activity Streams actions between servers


  "type": "Like",
  "actor": "",
  "to": ["https://hatchat.example/sarah/",
  "object": {
    "id": "",
    "type": "Note",
    "author": "",
    "content": "I'm a goat"


  • Specifies followers/following collections
  • "Inbox" and "outbox" streams
  • Specifies audience targeting of content


Current Status:

  • Working Draft
  • May split into two docs, client-server and server-server


Social API


An API to create posts such as notes, photos, comments, etc.

Enables using third-party apps to post content to your own website

Creating a Post


Creating a Post

                "type": ["h-entry"],
                "properties": {
                  "content": ["Hello world"],
                  "category": ["foo","bar"]

Updating a Post

                "mp-action": "update",
                "url": "",
                "replace": {
                  "content": ["Hello moon"]

Deleting a Post

                "mp-action": "delete",
                "url": ""


Current Status:

  • Working Draft - requesting CR transition soon
  • Several interoperable clients and servers
  • Creating posts is stable, read/update/delete is nearly stable

Micropub Apps


Browser Extension

Pebble App


updates bookmarks to add a screenshot




A simple protocol to notify a URL when you link to it

Primarily used for cross-site comments, likes, RSVPs, etc




Current Status:

  • Candidate Recommendation (CR)
  • Dozens of interoperable implementations
  • Working on extensions for presentation, anti-spam techniques, and private content

Validator / Debugger

Live Demo!

Posting a comment to

Live Demo!

Receiving a comment from

Get Involved