Moving coding classes online with GitHub Classroom

Many educators are working through how to teach remotely, and managing coding assignments is one of the harder pieces. GitHub Classroom automates the routine parts: distributing starter code, creating a repository per student, tracking participation, and running autograded tests. The service is free to use, and you can stand up a full course workflow without upgrading anything.

Plan your GitHub organization

Before creating your first assignment, set up an organization—an umbrella account that will hold all the repositories Classroom generates for your students. You can create as many organizations as you need, and structure them however fits your teaching style: one per semester, one per class, or a single organization for everything. Members of the GitHub Education Community have shared their approaches if you want ideas.

Next, prepare your starter code in a repository. If you own the repository, convert it into a template repository so Classroom can generate new repositories that share the same directory structure and files. You can also use an existing public repository as starter code.

If you want private per-student repositories, apply for GitHub Education benefits for teachers. Verified faculty can upgrade any organization they own to the GitHub Team plan for free—unlimited private repositories and collaborators, with each student unable to see classmates' work. When creating a new organization, choose the free plan; the upgrade offer appears in the GitHub Teacher Toolbox. Skipping verification is fine, though: Classroom works with public repositories for anyone, and you can start immediately without the upgrade.

Create a classroom and connect an organization

Navigate to GitHub Classroom and authorize the application if it's your first visit.

Authorize GitHub Classroom to access your GitHub account.

Click to create your first classroom.

Create your first classroom in GitHub Classroom.

Each classroom is tied to one organization that stores the student repositories. If you didn't create one earlier, click Create an organization and return to Classroom afterward. If you already have an organization, click Go grant access—the first time, you must give Classroom permission to manage that organization.

Add an organization to your class.

Authorize GitHub Classroom to access your organization.

After authorizing, return to Classroom and you'll be able to select that organization for any new classroom.

Select the organization and name your classroom.

Select an organization for your new classroom.

Give your classroom a name.

You can now add teaching assistants and class admins to the organization so they can help manage the course. Adding admins takes you away from Classroom, and when you return you'll get a unique classroom URL to share with them.

Invite TAs and admins to your classroom.

Add students to the roster

Students can be invited three ways:

  • Link a learning management system (LMS) and import a roster
  • Upload a local CSV file with student details
  • Type student names or IDs into a text field, one per line

For now, click Skip on LMS integration and enter student IDs in the text field.

Import a student roster from a learning management system.

Manually add students to the class.

You can edit the roster later from the Students tab.

Configure your first assignment

From the classroom view, create a new individual assignment and give it a title. Each student will receive a repository named with your assignment title and their own name.

Create your first individual assignment.

Add an assignment title and choose public or private repository visibility.

Student repository visibility defaults to public. If you've upgraded your organization to GitHub Team, you can choose a private option so each submission stays hidden from other students.

Next, import the starter code. Template repositories clone faster than regular ones. Type the organization and repository name until it appears in the list—any public repository or any private repository you can access works. Set a deadline if the assignment has one. If you're using autograding, learn how it works in the help docs and configure your tests.

Add starter code to your assignment, set a deadline, and add tests.

Decide whether students get full admin permissions on their own repository. Full access allows tasks like running CI tools; blocking it prevents students from adding collaborators, editing branch protection, or changing settings accidentally. You can also enable feedback pull requests: a pull request opens automatically when a student accepts the assignment, so you and your TAs can comment inline on code changes.

Set admin permissions and enable feedback pull requests.

That's it—the assignment is live. Share its unique URL with your students.

You now have an assignment URL to share with your students.

Monitoring submissions and giving feedback

As students accept the assignment, your assignment view shows each one's status with three review options: Review, View tests, and Go to repo.

As students begin an assignment, watch their commits and link to their repositories.

Review opens the student's automatically generated pull request, where you and TAs can comment on any specific line of code.

Use Review to provide direct feedback.

View tests shows the autograding output from the latest commit.

Output of an automated test.

Go to repo opens that student's assignment repository front page.

A view of the student’s repository.

The student experience

When a student joins the classroom or accepts an assignment for the first time, they must connect their GitHub account to your roster.

A student joins the classroom.

After that, accepting an assignment clones your starter code into their own repository. From there, students practice the standard developer workflow—editing, committing, and pushing changes.

A student accepts the assignment.

Cloning the starter code.

A student sees the assignment deadline and can click the link to proceed to their repository.

Team assignments

For group work, go back to the classrooms view, select your classroom, and create a new group assignment instead of an individual one. Group assignments let you cap the number of students per group and reuse group configurations from previous assignments.

Setting up a group assignment.

What you gain

With starter code in place, a new class and assignment are fully operational in Classroom. Students get a clear workflow for iterating on code and immediate feedback from automated tests. Teachers get automated repository creation and a dashboard to check progress—time back for teaching itself.

For more help, the GitHub Education Community connects teachers using Classroom, and the help documentation covers advanced features in detail. Live demonstrations are available through scheduled webinars.