CS50’s New Submission Tools for Teachers and Students

Brian Yu, Chad Sharp, and Jelle van Assema

7 min readJul 25, 2019

Over the years, CS50 has developed a number of tools aimed at making it easier for computer science teachers (including us!) to collect student submissions for assignments, automatically grade those submissions along multiple axes, and provide feedback on students’ code.

check50, a correctness-testing tool made available to both students and teachers, automatically runs a suite of tests against students’ code to evaluate the correctness of each submission. style50, a similar tool for assessing the style of programs in a variety of languages, offers suggestions to students on how they can make their code more readable. Using submit50, students can, with a single command, upload their code to GitHub to a repository to which they and their teacher have access. And cs50.me, introduced in Spring 2017, made it possible for teachers to view their students’ submissions online, access the results of automated correctness and style testing, and easily provide written inline feedback on students’ code, all consolidated into a single interface.

On July 29, 2019, thanks to CS50’s own Chad Sharp, Jelle van Assema, and Kareem Zidane, we will release our next major update to the submission and grading tools provided to teachers and students, with the launch of new versions of check50 and submit50, and the debut of submit.cs50.io, CS50’s new online platform for student submissions and automated correctness and style testing, to replace the existing cs50.me.

The new check50 and submit50

The new version of check50 was designed with extensibility at its core. CS50 AP itself comes with dozens of problems for which we’ve written a set of correctness tests that can be used right away. But check50 also allows teachers to write correctness tests for custom problems of their very own — teachers need only push those tests to any GitHub repository, and check50 will be able to download the tests and run them against students’ submissions. Students, too, can use check50 to check their code not only for CS50’s own problems, but also for any custom problems that teachers have created themselves.

check50 results, as seen in CS50 IDE

New in this version of check50, too, is the ability to introduce support for new programming languages, all without the need to modify existing code. Though CS50 itself is primarily taught in C and Python, several CS50 AP teachers have expressed an interest in extending check50 to support checking problems written in other programming languages, too. Such extensions (among others!) are now possible with the new check50.

As in previous versions of check50, teachers can write checks for a new problem simply by writing a Python file that defines functions for each test they wish to run on students’ code. But new in this version of check50, in an effort to make it easier to get started writing custom checks (in the existing version, the learning curve is a bit steeper!), is an alternative, simplified check syntax. A teacher can write a simple check50 check with just five short lines, as in the below:

hello world:
- run: python3 hello.py
stdout: Hello, world!

These checks, written in a language called YAML, are designed to be especially human-readable (and human-writable!), though the Python API is more full-featured. This particular YAML file defines a check called “hello world”, which checks that when python3 hello.py is run on a student’s submission, the student’s code outputs "Hello, world!".

The hope for this simplified syntax is to make it easier to take advantage of the features that check50 has to offer, such that automated correctness grading becomes a more realistic possibility for even more teachers and even more problems.

Additionally, the latest version of check50 now automatically determines which checks can be parallelized and runs them as such, resulting in a notable increase in speed.

Introducing submit.cs50.io

submit.cs50.io is CS50’s new tool for managing student submissions online, and will serve as the replacement for cs50.me, a site many of our CS50 AP teachers previously used for managing their courses. Though students technically submit their code to GitHub, students and teachers need not be familiar with Git itself to be able to take advantage of CS50’s submission system!

With submit.cs50.io, teachers are able to more easily create a course, invite students to join it, collect submissions for particular problems, view how students did on each assignment, and provide written feedback on students’ code.

submit.cs50.io handles all of the behind-the-scenes work: ensuring that teachers always have permission to view and comment on student submissions on GitHub, and keeping track of all students’ files and at what time they were submitted.

Since many teachers and schools have committed to various existing gradebook and LMS solutions, we’ve also built into submit.cs50.io a number of ways to give teachers easy access to their students’ data; for example, submit.cs50.io allows teachers to export student submission data in a CSV spreadsheet that can be opened in Excel or Google Sheets. We also offer an API, so teachers who wish to write their own scripts for grading and course management can easily access and use their course data in whatever way best suits the needs of their classroom.

How to Use

Logging In

Students and teachers can log in to the site by visiting submit.cs50.io. The first time someone signs in, they’ll be prompted to sign in with GitHub. submit.cs50.io uses GitHub on the back-end, creating a new GitHub repository for each student and automatically giving each student access.

Creating a Course

To create a new course in submit.cs50.io, teachers can visit submit.cs50.io/courses/new. After typing in the name of the course (it can be changed later!) and click the green “Create” button, the new course will be created.

Creating a new course on submit.cs50.io

Once the course has been created, teachers will be taken to the main course settings page.

Course settings page on submit.cs50.io

On this page, teachers will see an “Invite link” they can share with students. When students click the link, they’ll be prompted to join the course, after which submit.cs50.io will automatically grant any teachers of the course permission to view the students’ submissions and provide feedback on them. This page also allows teachers to generate teacher invite links which allow others to access course submissions (for use in co-taught classes or classes with TAs). To decrease the probability of one of these links being leaked, teacher invites are one-time use only, but you can always generate more from the course settings page.

Invitation page for students to join a course

The settings page also enables teachers to configure which “slugs” they wish to keep track of as part of the course. Each slug represents the unique identifier of a problem in the course (which students use when running check50 or submit50). Adding cs50/problems/2019/ap/hello , for example, will add the Hello problem in CS50 AP to the course. When students submit the assignment by running submit50 cs50/problems/2019/ap/hello, those submissions will appear on the course page. Slug prefixes are supported as well; by adding cs50/problems/2019/ap/ to the course slugs, a teacher can track any submission slug that begins with that string (in this case, all problems in CS50 AP 2019).

If teachers have multiple courses, they can easily view them all on the main courses page (accessible via the “My Courses” button in the upper-right), which will show all of the courses they teach, along with the number of students and submissions in each course.

Main course page

On the submissions page of a course, accessible via the “Course Submissions” button in the upper-right corner, teachers will find all submissions from their students in the course. Here, teachers can view students’ code by clicking on a submission, provide feedback on code by clicking on the “comments” link, and download the code by clicking on the “tar.gz” or “zip” links.

Teachers are also able to view their students submissions and export the submission data (including the results of automated testing) in a CSV file or as JSON. The submission export can also be restricted to only consider submissions within a particular time range (to only consider submissions before a particular deadline, for example).

Course submissions page
Exporting data for a course

By clicking on the “check50” and “style50” links, teachers can also see the results of the automated correctness and style tests.

check50 results
style50 results


The legacy version of cs50.me will remain accessible at legacy.cs50.me until December 31, 2019 for those teachers who have old course data they need to access, but beginning on July 29, 2019, all new courses should be created using submit.cs50.io.

Feel free to be in touch with sysadmins@cs50.harvard.edu with any questions about the new tools.




Harvard University’s introduction to the intellectual enterprises of computer science and the art of programming.