Pump.io + Community = ♥

Alex Jordan

Let's talk about moi

Arch Linux






Also about moi

Radical FLOSS zealot


Pump.io core contributor

High school senior


Let's talk about this presentation

Originally a lightning talk (5 minutes -> 60 minutes)

What & why of Pump.io

Using it

Brand-new community (+ history)

The "what & why"

Social network


Successor to StatusNet (aka GNU Social)

That thing that runs identi.ca

Pump.io != StatusNet++

Both written by Evan Prodromou

StatusNet was his first social project

identi.ca circa July-ish 2013

Very complex

Codebase problem & protocol problem

(Side note: Apache 2.0 vs. AGPL)

StatusNet protocol

(Fair warning: this is Long Before My Time™)


Atom (status update feed)

PubSubHubbub (post push)

Salmon (comment distribution)

ActivityStreams (favorites, etc.)

Let's talk Salmon

Just as an example.

Comment distribution

Based on Atom/RSS

Data is POSTed back to an endpoint URL in original post

Turns out this is overkill

StatusNet code problems

Everything and the kitchen sink


Twitter cross-posting

URL shortening

Publish updates over XMPP

Content embedding (think YouTube)

A lot of this had custom server-side stuff

140 characters

Looked like Twitter

Artificial limits

Eventually evolved to support pictures, etc.

AKA: understood more and more types of ActivityStreams

Enter Pump.io

I post something and my followers see it. That's the rough idea behind the pump. - README.md

In other words:

Pump.io is just an ActivityStreams distribution engine


Usually JSON

Actor, verb and object (+ optional target)

    "published": "2011-02-10T15:04:55Z",
    "actor": {
        "url": "http://example.org/martin",
        "objectType": "person",
        "id": "tag:example.org,2011:martin",
        "image": {
            "url": "http://example.org/martin/image",
            "width": 250,
            "height": 250
        "displayName": "Martin Smith"
    "verb": "post",
    "object" : {
        "url": "http://example.org/blog/2011/02/entry",
        "id": "tag:example.org,2011:abc123/xyz"
    "target" : {
        "url": "http://example.org/blog/",
        "objectType": "blog",
        "id": "tag:example.org,2011:abc123",
        "displayName": "Martin's Blog"


OAuth 1.0

Post activities to the user's outbox

Read activities from the user's inbox

Example: let's post a note

POST to my outbox

Pump.io POSTs to my follower's inboxes

Generic ActivityStreams distribution


Implements custom verbs and objects

Pump.io distributes them, no problem

Generic, extensible social server

I post something and my followers see it. That's the rough idea behind the pump. - README.md


June 22, 2014

Evan pushes the last commit for over a year

Evan's final commit on GitHub

The fork

Late August: I send this note to Evan, asking him to nominate a new maintainer

Less than two weeks later, I fork

First commit is September 2, 2016

Evan's final commit on GitHub

Bringing it home

September 21, 2015: Evan wants to hand off the code to the community

Informal meeting that same day

Evan grants admin rights to cwebber and jpope

Since then...

The community is small but strong

Meetings third Friday of the month

PRs get merged now

Other awesome stuff


Node transition

Community accounts

MediaGoblin federates with us!

SocialWG (lots of Editors Drafts and beyond)

Looking forward

Bug squashing

Reduce technical debt

Upgrade dependencies


Join us!

#pump.io on Freenode

XMPP: pump.io@muc.jappix.com

e14n/pump.io on GitHub

@pumpdotio or (even better) pumpio@pumpit.info

Sign up for a hosted node...

...or run your own!


I've been AJ

alex@strugee.net (email & XMPP)


@strugee2 (if you must)

strugee on GitHub


Access this presentation again


QR code to presentation URL

Or, check out the source.

Also, please give feedback! http://lfnw.org/node/4013