A hosted service to visually build interactive messaging applications.

View project on GitHub

Technologies

We lean on some fantastic frameworks and technologies to make RapidPro work, here’s a brief overview of the largest ones we use and how. Although knowledge of every last technology is not required to contribute to RapidPro, a cursory understanding of each will help you understand the system as a whole.

Frontend

Python / Django

The entire front end of RapidPro is built on Django. We try to keep up with the latest releases within six months of them coming out.

Smartmin

We make heavy use of Nyaruka’s Smartmin library in order to simplify the wiring of views, permissions and other Django niceties. You will need to familiarize yourself with this framework to understand most UI portions of the codebase.

HAML

In order to simplify our markup and make sure it is always valid, our templates make heavy use of Hamlpy instead of writing raw HTML templates. We’ve found this to greatly increase the quality and clarify of our templates.

CoffeeScript (though moving to Typescript)

In a similar vein, we use CoffeeScript for most of our front end Javascript as it leads to more readable code that is compatible across all browsers.

LESS

For writing stylesheets, we use LESS as a preprocessor. This lets us easily use variables for colors and fonts and leads to more readable selectors.

React

Our new editor has been rewritten from AngularJS to the more modern React Framework. This has provided us a big increase in the performance of the editor as well as allowing us to add new features with more confidence of not breaking existing functionality.

Backend

PostgreSQL

We depend on PostgreSQL as a SQL server. We do not support any other RDBMS. This is primarily due to the PostGIS support provided by PostgreSQL.

ElasticSearch

In order to enable performant searching across millions of contacts, we index them in ElasticSearch.

Celery

For backgrounds tasks and batch jobs we lean on a Celery distributed task queue.

Redis

We are big, big, fans of Redis as a fast, reliable and lightweight store. We use it as a backend for Celery processes, as a caching framework and as a locking mechanism for our distributed systems.

Golang

For the highest performance pieces of RapidPro we use Golang, which we have found to be a perfect fit for us.

Android

The Android channel for RapidPro which allows syncing of messages to and from your handset obviously uses the Android framework. As this component is meant to be as lightweight as possible we do not lean on any significant Android Java libraries to implement the client.