Skip to content
An autograder and grade database for GitHub-based courses
Python HTML JavaScript CoffeeScript Shell CSS Puppet
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

ob2: An autograder and grade database for GitHub-based courses

Octobear 2 (ob2) is a framework for grading programming assignments, used at UC Berkeley. It comes with a dashboard for students, an administration interface for TA's, tools for running autograder scripts inside Docker, a transactional grade database with an audit log, a transactional email daemon, and a set of integrations with GitHub. It takes care of all the infrastructural details, so you can focus on writing great autograders.


Computer Science courses will always be TA'ed by talented computer programmers. Don't add any functionality that could be accomplished with a Google Form, SQL, or some Python scripting.

Quick-start guide

Here is the quickest way of getting started with ob2.

  1. Download Vagrant and VirtualBox
  2. Download a copy of ob2 and run vagrant up inside the project root
  3. Use vagrant ssh to log in to the virtual machine
  4. Run sudo apt-get install linux-image-extra-$(uname -r) and then reboot the VM with vagrant reload. If apt-get reported that the kernel extras package is already installed, you don't need to reboot.
  5. Create a new Python virtual environment with virtualenv ./env
  6. Activate the new virtual environment with source ./env/bin/activate
  7. The ob2 code is mounted inside the virtual machine at ~/src, so enter the directory with cd src/
  8. Install the necessary Python packages with pip install -r requirements.txt
  9. The APSW python package is not available via PyPI, so build it manually by running ./
  10. You can now start the ob2 server with python -m ob2
  11. When ob2 starts, it will try to initialize the database, so press 'y' and hit Enter to continue
  12. The Vagrantfile bundled with ob2 should have forwarded port 5002 (the default web port) for you, so go to localhost:5002 to access the ob2 web interface.

At this point, you should have a working instance of ob2, but it will not be very useful. You won't be able to log in without GitHub OAuth tokens, and there won't be any jobs configured.

See the article on Configuring ob2 to get started on setting up your own ob2 configuration.

If you want to use VMware Fusion instead of VirtualBox, see VMware Fusion support.

For more details about setting up ob2 in production environments, see Setting up ob2 (the hard way).


For Python code, use PEP8 standards, but with 100-character line width.

For HTML, use 100-character line width and your own discretion.

For plaintext email templates, try to keep lines to 75 characters.


BSD 2-clause license (see LICENSE.txt)

You can’t perform that action at this time.