Tech Pick of the Week: pushd

Antti Ajanki • Data Scientist

Pushd is a server software for sending notifications to mobile apps. Mobile notifications are short messages that show up as popups, as tiles on the home screen, or as messages in the device's notification bar. Apps use notifications to inform users of important events. For example, a sports app could provide a real-time stream of updates of events in an on-going football game.

A major problem with the push notifications from a developer's point of view is fragmentation. Every platform has its own incompatible service for sending notifications. Pushd provides an unified interface for sending notifications to iOS, Android, WP 7/8 devices and even to compatible web apps. Furthermore, a modular design makes it possible to extend the support to other platforms with a moderate effort.

Pushd is a server software that exposes a REST API for mobile apps and notification publishers. Mobile devices can subscribe to certain events and publishers (application backends) can send notifications to the events. Pushd then relays the message to all mobile devices that have subscribed themselves to the event. The relaying involves sending the notifications to the push service backends of each recipient device. The data flow is visualized in the picture below.

Pushd runs on node.js and is implemented in CoffeeScript​. The asynchronous, event-driven nature of node.js suits well for pushd requests, which are short and I/O-bound. This allows the server to handle a large number of requests. The subscription states are kept in a redis cache. Redis is a very fast in-memory key-value store.

As an actively-maintained open source product, pushd is easy to modify and extend. For example, Futurice has contributed upstream features, which we need in our projects. Features such as improved logging and statistics collection and a support for HTTP basic authentication were contributed by Futurice. In the best spirit of open source pushd is built using other open source projects. The components that handle platform-specific details of sending notifications are developed as independent node.js modules, and are used also by other projects.

Futurice will be using pushd to offer push notification capability in our mobile app projects. We make it easy for our customers by taking care of hosting and other complications in setting up a push service. Futurice goes a step further than some other cloud-based push notification services, such as Pushwoosh and Amazon Simple Notification Service, by using our own client libraries for mobile devices. Standardized libraries decrease time needed to integrate push notifications into a mobile app.

Overall, pushd solves an important problem of providing common interface to different mobile platforms' notification services. Furthermore, it is easy to extend it to add new functionality.