The information in this wiki hasn't been maintained for a good while. Some of the projects described have since been deprecated.

In particular, the "Ushahidi Platform v3.x" section contains information that is often misleading. Many details about this version of Platform have changed since.

This website is an extraction of the original Ushahidi wiki into a static form. Because of that, functions like logging in, commenting or searching will not work.

For more documentation, please refer to

Skip to end of metadata
Go to start of metadata

Imagine a world where any computer can run a complete copy of an Ushahidi instance during a disaster, and these computers can even talk to each other when the Internet is down. With a few tweaks, this is already possible.

Couchbase is a distrbuted database system that gracefully decays in the absence of a network connection. It is batte-tested and ideal for powering a distributed system. By changing some of the backend code, it becomes possible to run many copies of Ushahidi that stay in sync with each other across spotty network connections. One instance of Ushahidi could be run in each neighborhood, or even on individual computers.

Byzantium is a project to make mesh networks easy to deploy in any situation. It is a variant of Linux that does all of the necessary work to set a machine up as a mesh router.

The current plan is to port one table to Couchbase as a test, then gradually transfer more over until Ushahidi is capable of working in a distributed fashion. In the long term it may make sense to replace MySQL entirely, but for now just moving some core functionality into a distributed form would be a big win.



Current stack is:


Components (new and old) are:

  • Couchbase
  • Theoretically, Ushahidi controllers call models call ORM:: functions, call mysql... except it's not quite that tidy. 
    • There are 215 mysql calls in Ushahidi 2.7. (see file dbcalls.txt in ushahidi fork above) - but many of these are in the database controllers.
    • There are lots of ORM:: calls in Ushahidi 2.7, spread across the models and controller.
  • CouchDb modules for Kohana - GitHub list  - Kerkness one looks useful.
  • Couchbase modules for Kohana - Kerkness again


Things to do:

  • Connect Byzantium to Couchdb - done.
  • Convert Ushahidi Mysql database format into CouchDb format - Bryce, ongoing.
  • Prepare Ushahidi code:
    • Move all sql and ORM:: calls in Ushahidi 2.7 into the model layer (preferably also converting sql calls into ORM:: calls). 
    • Move all non-model code out of the models and back into the controllers.
    • Add Kouchbase library to Ushahidi install.
    • Replace ORM:: calls with Kouchbase:: calls in the models.
    • See what breaks, and fix it.
    • But before all that, test the above on a small subset of the system,connecting that subset to a CouchDb database to see what breaks - have chosen the User database table for this.
  • Rejoice and throw a wild Skype party.


  • No labels
  1. Hi Sara, I moved this to Community Projects instead of to the main wiki hierarchy. Great stuff! Perhaps write a blog post on this?