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.

Click to create your first 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.


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.


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.

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.


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.


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.

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.

That's it—the assignment is live. Share its unique URL 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.

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

View tests shows the autograding output from the latest commit.

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

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.

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.



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.

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.



