Miss any of our Open RFC calls?Watch the recordings here! »


0.3.3 • Public • Published

W3gram Server

Deploy Build Status API Documentation NPM Version

This is a node.js server for the W3gram push notification protocol.

The server was designed to be deployed to Heroku using free resources, so it fits in a single dyno. The code has great test coverage using mocha.

Easy Setup

Click the ''Deploy to Heroku'' button at the top of this page to create your own W3gram server running on Heroku. Don't worry, the project only uses free add-ons!

Get your server's MAK and store it somewhere safely.

curl -i https://w3gram-test.herokuapp.com/mak
# Response example: 
# { "mak": "G-TPkmtKOczXx203po1NblklXsK5OXUylUOGkQUxRQk" } 

Create an application and note its API key and secret.

curl -i -X POST -H 'Content-Type: application/json' \
  -d '{"mak": "G-TPkmtKOczXx203po1NblklXsK5OXUylUOGkQUxRQk", "app": { "name": "Testing", "origin": "*"}}' \
# Response example: 
# { 
#    "key":"uUJPS3zgIpQjDnxn", 
#    "secret":"7cAXyVAYEhRbQ0UFCFI4qJAWOmXLZaPC1xX6niNIxCE", 
#    "origin":"*", 
#    "name":"Testing" 
# } 

Manual Interaction Example

Create a token for a device ID.

echo -n "device-id|my-tablet" | \
    openssl dgst -sha256 -hmac "7cAXyVAYEhRbQ0UFCFI4qJAWOmXLZaPC1xX6niNIxCE" \
    -binary | base64
# Output example: 
# EVwwWmwiIfLbTDV8OWsHVc4r/p2WUpKXIJcXCdtoFxM 

Register the device.

curl -i -X POST -H 'Content-Type: application/json' \
    -d '{"app": "uUJPS3zgIpQjDnxn", "device": "my-tablet", "token": "EVwwWmwiIfLbTDV8OWsHVc4r_p2WUpKXIJcXCdtoFxM"}' \
# Response example: 
# { 
#    "push":"https://w3gram-test.herokuapp.com/push/1.my-tablet.WMF5TISqRYYkUr5GJWunmP40FvXI1yU_Qb5kXc907TY", 
#    "route":"https://w3gram-test.herokuapp.com/route/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ" 
# } 

Do the routing step.

curl -i -X POST -H 'Content-Type: application/json' -d '{}' \
# Response example: 
# { 
#   "listen":"wss://w3gram-test.herokuapp.com/ws/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ" 
# } 

Start a WebSocket connection:

wscat -c "wss://w3gram-test.herokuapp.com/ws/1.my-tablet.HwVTM_07vSbHzrQHCBeHeLygUuvm5esJa2yzOjwmJwQ"

Send a notification:

curl -i -X POST -H 'Content-Type: application/json' \
    -d '{"receiver": "1.my-tablet.WMF5TISqRYYkUr5GJWunmP40FvXI1yU_Qb5kXc907TY", "message": { "data": "Hello push world" } }' \

Development Setup

Install all dependencies and create PostgreSQL database for development and testing.

npm install
createdb w3gram_test
createdb w3gram_dev

Run the server in development mode.

PORT=3100 npm start

For development, it can be handy to create an application whose key and secret matches pre-defined values.

curl -i -X POST -H 'Content-Type: application/json' \
  -d '{"mak": "dev-mak", "app": { "name": "Testing", "origin": "*", "key": "fixed-key", "secret": "fixed-secret" }}' \
# Response example: 
# { 
#    "key":"fixed-key", 
#    "secret":"fixed-secret", 
#    "origin":"*", 
#    "name":"Testing" 
# } 


This project is Copyright (c) 2014 Victor Costan, and distributed under the MIT License.


npm i w3gram-server

DownloadsWeekly Downloads






Unpacked Size

188 kB

Total Files


Last publish


  • avatar