Architecture
What is RapidSMS comprised of?

Application (“App”)
An application performs one or more of the following functions:
- Processes messages from the Router
- Extends the data model
- Presents UI within the WebUI
Examples:
- Bednets: Bednet distribution supply management (message processing, model extension, UI)
- Reporters and Groups (model extension, UI)
Note: If your code does not perform any of the above tasks, it is probably a Library, not an app.
Library
A set of code, probably in the form of a Python Module (containing Class and/or Module functions) to perform any helper, utility or domain specific functionality that can be shared.
The following items make good libraries:
- Message parsers (keyworder, form processor, etc.)
Backends
Backends receive messages from external sources and deliver messages from RapidSMS to external sources.
External sources include:
- GSM Handset or Modem (via Spomc backend)
- HTTP clients: via HTTP backed
Router
A router is core code that distributes messages from Backends to apps and vice versa.
WebUI
WebUI is a Django application that presents a unified WebUI for all the installed and active apps that have UI components. Currently WebUI presents a dashboard overview and tabs for each app with a UI.
