What is exbuilder?

exbuilder is a framework for doing reproducible research with docker containers.

Docker is a service that allows you to package software and applications into containers that are easy to work with and easy to share with others. Docker containers are a natural solution to many issues researchers encounter in trying to conduct research that is reproducible. Containers allow you to share not only your code, but also the applications you used to develop and run it.

We created exbuilder to make it easy for you to learn how to use docker containers to conduct reproducible research. exbuilder is a framework, not a software, meaning it is designed to provide structure and a starting point for working on research in docker containers.

To learn more about exbuilder and why you might like to use it, keep reading! To start your first exbuilder project, head to the Quick start page.

Why exbuilder?

exbuilder was specifically designed to solve a few issues researchers encounter when developing web experiments and analyzing data, but the framework easily adapts to all kinds of research projects. To help you decide if exbuilder is the right tool for you, here are a few reasons you might want to use it.

You want your stuff to always work

exbuilder relies on docker containers to allow you to work on code and analyses without having to install a bunch of stuff or fuss around getting your computer to work. exbuilder comes with a whole fleet of docker containers that are already setup and ready to run web experiments and do data analyses. As long as you have Docker Desktop, you'll be able to start the containers to work on your code and analyses.

Your exbuilder project tells docker how to build these containers with the docker-compose.yml file. This means that, in the exbuilder framework, you version control both your code and the machines you used to run it. Whether its 10 months or 10 years from now, you'll still be able to run your code and analysis in exactly the same way, on exactly the same machines — and so will anyone else.

You want to collect and store your data yourself

One of the biggest issues researchers encounter when running web experiments is figuring out how to collect and store the data. One solution is to outsource these backend processes to a third party service (e.g. Pavlovia, CognitionRun, etc.) — and for some researchers, this works great!

Others feel reluctant to outsource this aspect of their research. We get it — it's really hard to trust someone else to collect and store your data! Often you want to do this part yourself, it's just too time consuming (or you don't know how). exbuilder is designed to fill this gap, making it easy for you to collect and store your own data on your own server. What's more, because exbuilder runs each project in its own isolated docker container, you can run many different experiments on the same sever, without worrying about your new studies messing up your old studies.

If you are happily using a third-party service to handle data collection and storage for you, that's great! You can still use exbuilder as a framework to store your preregistrations and run your analyses if you like.

exbuilder can grow with you

We want to make sure exbuilder is accessible to everyone, whether they have tons of experience or are just starting out. With this in mind, we designed exbuilder to grow with you as your skills with docker develop.

For researchers who are new to docker, exbuilder comes with docker containers that are already setup to develop web experiments and analyze data (in either jupyter or RStudio). This means that you you don't have to worry about building your own containers to get started — you can just borrow ours, allowing you to get started right away with just a few simple commands.

As you get more comfortable working with docker containers, exbuilder will adapt to your new skills. You can customize your exbuilder project to your preferred development environment, build your own custom docker images, and learn to push your images to Docker Hub.

Acknowledgements

exbuilder is developed and maintained by Katie Schuler at the University of Pennsylvania. Financial support for exbuilder was provided by a grant from the University of Pennsylvania.

exbuilder is named after an internal software created by Edward Longhurst at the University of Rochester. The original ExBuilder is where I first learned to code. And, thanks to an amazing group of people at that place at that time, where I first learned to be a good scientist and that knowledge wants to be shared. This exbuilder is dedicated to them.

Friends of exbuilder

exbuilder relies on and/or plays nicely with many other free and open source tools including git, Docker, NGINX, NGINX proxy manager, php, PostgreSQL, jupyter, RStudio, jsPsych, and AsPredicted. Don't worry if some or all of these tools are new to you: exbuilder is designed to help you learn.

Cite

If you use exbuilder in your academic work, you can cite it like this:

@misc{
schuler2021exbuilder,
author={Kathryn Schuler},
title={exbuilder: a framework for reproducible research with docker containers},
year={2021},
howpublished={available from https://github.com/exbuilder/exbuilder/}
}