Skip to content
Digitize your EGMA and EGRA data collection with Tangerine. Create your Assessments online, conduct them offline with the Tangerine Android App. All results you collect can be exported as a spreadsheet. Tangerine has been used by over 30 organizations to conduct over 1 million assessments and surveys in over 50 countries and in 100 languages.
JavaScript CoffeeScript CSS Ruby Other
Latest commit a4f43d8 Jun 24, 2016 @rjsteinert rjsteinert committed on GitHub Update
Failed to load latest commit information.
brockman Remove server-init scripts no longer used and rename the entrypoint t… May 4, 2016
build-scripts Do not create a couchdb admin when installing global dependencies so … Jun 18, 2016
client Implemented GPSRunItemView for geo-location subtests Jun 23, 2016
decompressor processing POST using manual methods instead of bodyParser May 5, 2016
editor Add back missing subtestsByAssessmentId view Jun 20, 2016
logs for deployment Jan 18, 2016
other-scripts Move build scripts into build scripts folder, add helper scripts in r… Jun 17, 2016
packager APK generation working, sending docs via POST Apr 15, 2016
pids for deployment Jan 18, 2016
robbert Refer to couchdb directly in robbert's couchapprc because when coucha… May 23, 2016
tmp update submodules, add hostname to env vars, use it to generate nginx… Jan 22, 2016
tree Removing the client source from /tree Jun 22, 2016
.gitignore Merge branch 'build-scripts-in-build-script-folder' Jun 17, 2016
.travis.yml travisci tweak for gulp and init Jun 22, 2016
Dockerfile Clean up from the last merge Jun 17, 2016 Update Jun 24, 2016 Update the default config file with correct variable names, the Docke… Jun 17, 2016 Update Jun 24, 2016
ecosystem.json APK generation working, sending docs via POST Apr 15, 2016 Use tangerine/tangerine instead of tangerine/tangerine-server Docker … Jun 24, 2016
package.json add scripts, update submodule Jan 22, 2016 Update Jun 17, 2016 Update Jun 17, 2016 Add a Summary module to robbert to give a report on groups and an ass… Mar 25, 2016 Copy over files from docker-tangerine-support May 2, 2016
tangerine-nginx.template Copy over files from docker-tangerine-support May 2, 2016
tangerine.conf #45 Replace the variable in nginx root path redirect to be a string r… May 4, 2016 Make executable Jun 18, 2016



Build Status

Stories in Ready

Join the chat at

Digitize your EGMA and EGRA data collection with Tangerine. All results you collect can be exported as a spreadsheet. Tangerine has been used by over 30 organizations to conduct over 1 million assessments and surveys in over 50 countries and in 100 languages.

This is one of two main Tangerine software repositories, the other is docker-tangerine-tree. The docker-tangerine-tree repository will soon be included with this one. You will want to use this repository if you are planning on running a Tangerine server for editing assessments and uploading data from tablets.

The client directory contains the code for the client app used for data entry. It has its own build process and is not yet integrated with server.


See installation demonstration video.

The easiest way to get started is to create an Ubuntu 14.04 Droplet on Digital Ocean, SSH into it from a terminal, install Docker, and then run the following commands. You'll need the URL of the most recent release. Find that on the releases page here.

wget <latest release, choose tar.gz option>
tar xvf <the tarball>
cd <the now uncompressed tangerine folder>
# Edit the file to match your desired settings. Try `nano`. 
# You must edit all of the variables in the "Required to change" section. 

Now visit your Tangerine-server installation at the IP address or hostname of your installation.

If your server restarts or the container stops, you can later run the ./ script in the Tangerine-server folder. To upgrade your server, run the ./ script.

Develop on Tangerine

To develop on Mac or Windows, this project requires a working knowledge of docker and docker-machine. While you can issue Docker commands from Windows or Mac, Docker containers cannot run directly run on those platforms (yet) so it requires connecting to another machine running Linux using the docker-machine command. To learn Docker, check out the self-paced training on

Now that your docker command is connected to Linux machine it's time to get the code, but before you download the code, you will want to "fork it". Go to and click on the "Fork" button. Choose to fork the repository into your own personal Github account. From your forked version of the code, copy the clone URL and issue the following commands.

git clone <your clone url>
cd Tangerine-server

Now it's time to build and run your code. This first build will take up to 30 minutes depending on your Internet connection, processor power, and memory of your host machine. Future builds will take between 5 and 15 seconds because of the "Docker cache" you will be building on this first run.

# Edit to your desired setting. If you are using Docker Machine, make sure to set the T_HOST_NAME to the IP address of your Virtual Machine.

Now that you've built and run an image tagged as local, view your server from a web browser to confirm it is working. When you visit the site in a web browser, you will see output to your terminal indicating there is activity on the server.

You are now ready to start modifying code. We use the Edit-Build-Run workflow. That means everytime you edit code, you will build and run the code with the script. If you make an edit that breaks the build, you will see that in the output in your terminal. If all is well, you can stop following the logs with ctrl-c and it's now time to make a code change and see that reflected in your browser. For example, edit ./editor/app/_attachments/index.html and change the text in the <title> tag to be something like <title>Hello Tangerine</title>. If you reload your your browser you'll notice that the title tag has not changed. That's because the code your browser is viewing is based on the built image we made before the code change. To see our change run ./ again.

Now follow the logs again and check your browser. If all is well, you should now see the title of the web page as "Hello Tangerine".

Testing code inside of a container

This goes against the grain of how Docker ethos: you should not modify the code inside your docker instance. In this case, we're making a trade-off due to the difficulties of developing this docker container locally.

Follow the instructions in the Developers section. Get into a running container to play around.

docker exec -it tangerine-server-container /bin/bash 

Go to the code for editor:

cd /tangerine-server/editor
npm start default

This npm command will run the default gulp command and watch for changes in your code.

SSH into another console to your server , docker exec into the same instance, edit your code.

Please note: you must create a new group when you wish to view your changes.

Be sure to commit your code ASAP. Once your container is gone; any uncommitted changes will also be gone.

Something went wrong with that request. Please try again.