The application is comprised of the following components:
| Component | Description |
|---|---|
| Content fetchers/crawlers | A set of background applications/daemons that fetch drops from the various sources e.g. RSS, Twitter, Email etc. |
| Metadata extractors | These perform semantic (named entity extraction & subsequent geocoding of any place names that are encountered) and media extraction (links and images) once the drops have been fetched and structured by the content fetchers |
| Drop queue processor | Keeps track of drops as they come in from the content fetchers and forwards them to the various pre-processing stages - semantic extraction, media extraction, rules processing. Once a drop has gone through all pre-processing stages, it is reassembled and posted to the API for final storage in the DB NOTE: While drops are undergoing pre-processing, they're maintained in a persistent RabbitMQ queue |
| API | Posts and retrieves data to/from the database, handles user authentication and authorization, updates the search index |
| Search Server | Handles all full text and geo search functions and is periodically updated (by default, every 30s) with any new data |
| UI (web) client | A web application for interacting with the API; fetches data and presents it to the user |
The relationship/interaction between these components is shown in the diagram below:

The current version of SwiftRiver runs off mixed stack that is primarily powered Java, PHP and Python; Version 1 of the software was based on a LAMP stack.
| Component | Underlying Architecture |
|---|---|
| API | Java - Spring Framework |
| UI Client | PHP, JavaScript & CSS - Kohana MVC (v3.3) and Backbone JS for the UI |
| Content Extractors | Python - custom applications and are not based on a particular application development framework |
| Dropqueue Processor | Java - Spring Framework |
| Database | MySQL Database Server |
| Search | Java - Apache Solr Server |
| Messaging & Queueing | RabbitMQ |