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.
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.
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.
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.
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.
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.
For backgrounds tasks and batch jobs we lean heavily on the excellent Celery distributed task queue.
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.
Our Message Mage component uses the lightweight and performant DropWizard Java framework.
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.