Git repository of MarkUs
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
app descriptive-statistics: incorrect use of descriptive statistics gem w… Oct 19, 2018
bin script: Add script to reset markus+autotesting part 2 Sep 24, 2018
config js: Add .js.erb support to webpack Oct 15, 2018
data autotest: Rename ATE to Autotest Dec 20, 2017
db Merge branch '1.7.0' of Oct 8, 2018
doc Update markus-contributors for 2016-18 May 3, 2018
lib Merge branch '1.7.0' of Oct 8, 2018
public rails5: Review configuration part 4 Jul 6, 2018
script vagrant: don't set file paths relative to current script for vagrant … Oct 18, 2018
spec testing: Update shoulda gem and tidy up specs a little. Oct 13, 2018
test Unit to rspec tests (#3553) Oct 10, 2018
tmp Adding .gitignore to tmp directory. Oct 28, 2010
vendor/assets js: Migrate moment to webpack Oct 9, 2018
.babelrc Update webpacker May 23, 2018
.editorconfig Change line ending settings in .editorconfig Jan 7, 2017
.gitignore gitignore: added /vendor/bundle and .byebug_history Jul 27, 2018
.hound.yml Fix hound.yml rubocop configuration Apr 14, 2018
.postcssrc.yml Add basic webpacker support Dec 19, 2017
.rspec testing: Update shoulda gem and tidy up specs a little. Oct 13, 2018
.rubocop.yml Some rubocop configuration May 28, 2018
.ruby-gemset Migrate .rvmrc to .ruby-version/.ruby-gemset files May 26, 2014
.ruby-version Update to Ruby 2.5.1 Apr 7, 2018
.travis.yml Update travis to manually create translations.js Sep 12, 2018
Changelog Update: changelog Sep 1, 2013
Gemfile js: Migrate jquery to webpack Oct 4, 2018
Gemfile.lock Bump autoprefixer-rails from 9.2.0 to 9.2.1 Oct 17, 2018
INSTALL Updated INSTALL Sep 1, 2013
LICENSE Added MIT-LICENSE file to the project. Jun 10, 2011 Fix: Small bug in Markdown for logo Mar 29, 2017
Rakefile Remove old fix in Rakefile Jan 2, 2014
Vagrantfile vagrant: don't set file paths relative to current script for vagrant … Oct 18, 2018
browserslist Add autoprefixer gem May 8, 2015 Modifying routing-filter for locales for subdomains Jan 11, 2014
dump.rdb Add basic webpacker support Dec 19, 2017
package.json Merge pull request #3616 from adisandro/js-upgrade-jquery Oct 17, 2018
yarn.lock Merge pull request #3629 from MarkUsProject/dependabot/npm_and_yarn/s… Oct 19, 2018

MarkUs logo

Welcome to MarkUs! Online Marking Made Easy

MarkUs is a web application for the submission and grading of student programming assignments. The primary purpose of MarkUs is to provide TAs with simple tools that will help them to give high quality feedback to students. MarkUs also provides a straight-forward interface for students to submit their work, form groups, and receive feedback. The administrative interface allows instructors to manage groups, organize the grading, and release grades to students.

Since 2008, more than 140 undergraduate students have participated in the development of MarkUs; some as full-time summer interns, but most working part time on MarkUs as a project course. The fact that we have have uncovered so few major bugs, and that MarkUs has been so well-received by instructors is a testament to the high quality work of these students. MarkUs is used in more than a dozen courses at the University of Toronto, in several courses at the University of Waterloo, and at École Centrale Nantes (in French).

MarkUs is written using Ruby on Rails, and uses Subversion (with a Git back-end in progress) to store the student submissions.

1. Features

  • Graders can easily annotate students' code (overlapping annotations, graded source code remains untouched)

  • Subversion storage back-end

  • Instructors can form teams

  • Students can form groups on their own

  • Supports different course models:

    • Web-based file upload for first-year courses
    • Subversion client commits for upper year courses (disabled Web-upload)
    • Allows students to work on code of other groups from one assignment to the next
  • Web-based course administration

  • One MarkUs application per course (independent databases across courses)

Please see the INSTALL file for installation instructions.

2. Links

3. Sandbox

If you are interested in MarkUs and would like to try it out, there is a MarkUs sandbox installation available ( For information as to how to use the demo instance please see our "How to use the demo server" ( blog post. We hope you will enjoy it and please let us know how you liked it:

4. System Requirements

  • Rails 3.0/Ruby 1.9.3+ (2.1.2 recommended)
  • Unicorn/Passenger
  • PostgreSQL/MySQL
  • Subversion

Note: As of now, the latest stable version is MarkUs 0.10.0. Here is our current deployment/configuration documentation. Please send us email if you have any trouble installing MarkUs---we'd be happy to help you out.

5. Who is Using MarkUs?

  • Department of Computer Science, University of Toronto, Canada
  • School of Computer Science, University of Waterloo, Canada
  • École Centrale de Nantes, France

6. Staying in Touch

Want the latest MarkUs news? It's available several ways:

7. Helping Out

Found a bug? Want a feature? Please email

8. Credits

MarkUs grew out of OLM, which was built using the TurboGears framework. We are grateful to everyone who worked on or funded both projects, and to the creators of Ruby on Rails for building such a great framework.

MarkUs' development has been supported by the University of Toronto, École Centrale de Nantes, et. al. Kudos to everyone who turned that support into working code:

Aaron Lee, Adam Goucher, Aimen Khan, Alexander Kittelberger, Alexandre Lissy, Alex Grenier, Alex Krassikov, Alysha Kwok, Amanda Manarin, Andrew Hernandez, Andrew Louis, Angelo Maralit, Anthony Le Jallé, Anton Braverman, David Das, Arianne Dee, Benjamin Thorent, Benjamin Vialle, Bertan Guven, Brian Xu, Bryan Shen, Bryan Muscedere, Camille Guérin, Catherine Fawcett, Chris Kellendonk, Christian Jacques, Christian Millar, Christine Yu, Christopher Jonathan, Clément Delafargue, Clément Schiano, Danesh Dadachanji, Daniel St. Jules, Daniyal Liaqat, Daryn Lam, David Liu, Diane Tam, Dina Sabie, Dylan Runkel, Ealona Shmoel, Egor Philippov, Erik Traikov, Eugene Cheung, Evan Browning, Farah Juma, Fernando Garces, Gabriel Roy-Lortie, Gillian Chesnais, Geoffrey Flores, Hanson Wu, Haohan David Jiang, Horatiu Halmaghi, Ian Smith, Ibrahim Shahin, Ishan Thukral, Irene Fung, Jakub Subczynski, Jay Parekh, Jeffrey Ling, Jeremy Merkur, Jeremy Winter, Jérôme Gazel, Jiahui Xu, Jordan Saleh, Joseph Mate, Joseph Maté, Joshua Dyck, Junghwan Tom Choi, Justin Foong, Karel Kahula, Kitiya Srisukvatananan, Kurtis Schmidt, Lawrence Wu, Luke Kysow, Marc Bodmer, Marc Palermo, Mark Rada, Mark Kazakevich, Maryna Moskalenko, Mélanie Gaudet, Michael Lumbroso, Mike Conley, Mike Gunderloy, Mike Stewart, Mike Wu, Misa Sakamoto, Nathan ChowNeha Kumar, Nelle Varoquaux, Nicholas Maraston, Nicolas Bouillon, Nick Lee, Nicolas Carougeau, Noé Bedetti, Oloruntobi Ogunbiyi, Ope Akanji, Paymahn Moghadasian, Peter Guanjie Zhao, Rafael Padilha, Razvan Vlaicu, Robert Burke, Ryan Spring, Samuel Gougeon, Sean Budning, Severin Gehwolf, Shenglong Gao, Shion Kashimura, Simon Lavigne-Giroux, Stephen Tsimicalis, Su Zhang, Tara Clark, Tiago Chedraoui Silva, Tianhai Hu, Valentin Roger, Veronica Wong, Victoria Mui, Victoria Verlysdonk, Victor Ivri, Vivien Suen, William Roy, Xiang Yu, Yansong Zang, Yusi Fan, Zachary Munro-Cape

Supervisors: Karen Reid, Morgan Magnin, Benjamin Vialle, David Liu