Next Up Roadmap


Since it’s always good to know what’s coming up, here are a few new features you should look out for on in the next few weeks.

 Continue reading Next Up Roadmap...

Ona Beta: New Features Roundup


On our quest to allow anyone to collect, understand, and use data for humanitarian purposes, we’ve been introducing new features on Ona Beta for months. We’ve rebuilt the service from the ground up with new code and a new look, added features for collaboration and improved data management, and built a support team to help our users when they run into problems. Here’s a summary of what’s new in Ona Beta.

 Continue reading Ona Beta: New Features Roundup...

Introducing three open source libraries for working with Ona and data


We are proud to announce preview releases for three Clojure/ClojureScript open source software libraries: Hatti, Milia, and Zebra Lite. We are actively working on and improving these libraries for use in our own software and by others. In alphabetical order the contributors to these libraries are geoffreymuchai, pld, prabhasp, royrutto, ukanga, and wilo99. We will followup on this post with additional tutorials and introductions to the individual libraries.


Hatti is set of Om components for viewing structured data in tables, charts and — if it’s geocoded — maps. Hatti is a ClojureScript library built using Om, a ClojureScript interface to Facebook’s React. This example connects Hatti to an Ona dataset storing information on stolen Nepalese art. This snippet of code handles most of the functionality:

 (let [data-chan (raw-get (ona-urls/data-url "data" dataset-id))
       form-chan (http/get (ona-urls/formjson-url dataset-id))
       info-chan (http/get (ona-urls/data-url "forms" dataset-id))
       data (-> (<! data-chan) :body json->cljs)
       form (-> (<! form-chan) :body flatten-form)
       info (-> (<! info-chan) :body)]
   (shared/update-app-data! shared/app-state data :rerank? true)
   (shared/transact-app-state! shared/app-state [:dataset-info] (fn [_] info))
   (integrate-attachments! shared/app-state form)
   (om/root views/tabbed-dataview
            {:target (. js/document (getElementById "map"))
             :shared {:flat-form form
                      :map-config {:mapbox-tiles mapbox-tiles}}
             :opts {:chart-get chart-getter}})))

You can see the complete code here. We use Hatti as the data visualization library in the new version of Ona, but it will work with any dataset and schema in a compatible format.


Milia is a Clojure and ClojureScript client for the Ona API. Milia uses the clj-http and cljs-http libraries to make both server-side and client-side requests to an Ona compatible application server. Milia is built using the specifications in the Ona API and will work with any server that is compatible with the Ona API.

Currently all API endpoints are accessible using Clojure, however only the dataset endpoints are available in ClojureScript. As of this writing we are using cljx, but we plan to transition to Reader Conditionals after Clojure 1.7 is released.

Zebra Lite

Zebra Lite is a light-weight version of Ona, that aims to replicate the core features necessary for a mobile data collection and analysis tool: a login/account, form listing, and a data view. It is built using Milia to fetch data from Ona (or any Ona compatible API) and Hatti to display data. It is written in both Clojure using the ring HTTP library and the Compojure routing library, as well as in ClojureScript using Om and Secretary.

Making Ona reliable and resilient


Last year, we experienced a few small periods of downtime. We made changes to bring this up to 99.8% API uptime in 2015. However, the remaining 0.2% bothered our engineering team, so after additional work, we recently hit a rewarding milestone: 30+ days of 100% uptime on our API and front-end site!

uptime stats

 Continue reading Making Ona reliable and resilient...

Open Street Map as a global "check-in" service


Schools in Dakar

Getting more out of Open Street Maps?

At Ona, we’ve always been big fans Open Street Maps (OSM). What’s always bugged me is I felt (like many groups), we’ve failed to fully understand and leverage the incredible wealth of data that OSM represents. Sure, our basemaps are powered with OSM data. And yes, we encourage partners to contribute data back whenever possible, but surely couldn’t we be using OSM to do more?

The problem for me with OSM is that is always seemed a bit “flat”. I knew the data in OSM is incredibly rich. I could clearly see a neighboring school on a map, for example, but I just didn’t fully grasp how to access it’s underlying properties. Key features remained “baked” into the map. Discovering OSM Overpass and finally understanding OSM as a result, completely changes everything for me.

 Continue reading Open Street Map as a global "check-in" service...