This is a working repo. Please visit the official repository at opendatakit/build.
JavaScript Ruby CSS HTML
Pull request Compare This branch is even with opendatakit:master.
Failed to load latest commit information.
dbconv server/new: add scripts for migrating data from Tokyo* to Postgres. Jan 25, 2017
lib backend/feature: import from cabinet store to tyrant store. Oct 24, 2011
model server/new: add scripts for migrating data from Tokyo* to Postgres. Jan 25, 2017
.ruby-gemset ops/improve: swap rvmrc out for ruby-*. Dec 19, 2016
.ruby-version validation/refactor: move some files around to more sensical names. Dec 20, 2016
Gemfile.lock server/new: add unicorn for deployment purposes. Feb 1, 2017
LICENSE repo/improve: better project documentation. Dec 12, 2016 Merge branch 'cxlt/tls-security' into cxlt/postgres-migration Feb 15, 2017
assets.yml validation/refactor: move some files around to more sensical names. Dec 20, 2016
circle.yml build/bug: need to record build-time as well as build-rev. Feb 1, 2017 server/new: optional secure-cookie/HSTS security. Feb 13, 2017
config.yml.sample server/new: optional secure-cookie/HSTS security. Feb 13, 2017
config_manager.rb server/new: read optionally from /etc/odkbuild/config.yml for config. ( Jan 31, 2017

ODK Build

ODK Build is a web-based, drag-and-drop service for creating forms used with data collection tools such as ODK Collect. ODK Build is part of Open Data Kit (ODK), a free and open-source set of tools which help organizations author, field, and manage mobile data collection solutions. Learn more about the Open Data Kit project and its history here and read about example ODK deployments here.

Unless you mean to do development on ODK Build, just go to to give it a try, or to the releases page to download a local copy.


Build is a combination between a Ruby Rack-based application built on Sinatra and a large Javascript frontend. Everything it needs is kicked off by the Rackup file. We use shotgun for local development and Phusion Passenger for staging and production deployment.


All Rubygem dependencies are managed by Ruby Bundler. Make sure you have at least version 1.0.0 of Bundler installed (gem update --system && gem install bundler if you don't have it already). Then run bundle install in the application root to resolve and install the appropriate dependencies.

We depend on one native binding, to connect to a PostgreSQL database. To satisfy the binding, you can install libpq-dev on apt, or postgresql on homebrew.

Setup and Execution

Now that you have resolved all the appropriate dependencies, you'll need to set up the configuration by copying config.yml.sample to config.yml. This file contains a number of secret keys and tokens, so be sure not to check it into source control once you put your own keys into it. Note that the cookie_ssl_only flag should only be set to true if you are serving your requests on HTTPS; it should likely remain off for local development.

Next, you want to start up your databases. Create a database in your Postgres instance according to how you populated config.yml, then run rake db:migrate to run migrations against that database. Ideally, create the database with an encoding of UTF8.

Finally, you'll want to run bundle exec rackup to start the server, or bundle exec shotgun if you want the application to automatically detect your changes to source code and load them up when you refresh the app in your web browser.

If you're running Build in a production environment, there are a couple of things that the application needs to build before it will run. Before first-run, and after each time you update with a new version, you'll want to run rake deploy:build. This will bundle all the assets the application needs for speed an ease of deployment.


Pull requests are welcome! Please be sure you follow existing conventions: braces on newlines, 4-width soft tabs, single-quoted strings, and so on. Don't be shy about submitting living pull requests early, so we can all work together to refine your contribution. See the full contribution guide for further details.


Build is licensed under the Apache 2.0 license.