GitHub Classroom shut down: what was kept and a free alternative
GitHub Classroom shut down on August 28, 2026. What was kept and deleted, how to rebuild rosters and grades from your repos, and how to move a class to CS Room.
Published by Birdflop, a 501(c)(3) nonprofit · Last updated
GitHub Classroom shut down on August 28, 2026. GitHub announced it on May 22, saying Classroom had been in maintenance mode for 18 months, and closed sign-ups on May 26. On August 28 sign-in ended, the website and API were decommissioned, and the Codespaces allowance that came with Classroom ended.
What was kept and what was deleted
Your repositories survived and Classroom's own records didn't. The May announcement scheduled the final deletion for September 4. GitHub hasn't posted that it ran, but its August changelog says the data "will be permanently deleted", so treat it as gone.
| What | Now |
|---|---|
| Your organization, its repositories and students' GitHub accounts | Kept |
| Template repositories with your starter code | Kept, in your organization |
| Each student's repository, with its commits | Kept |
| Tests written into a repository (.github/workflows/classroom.yml) | Kept, in each repository |
| Classroom and assignment names | Deleted |
| Tests defined in Classroom, outside a repository | Deleted |
| LTI rosters linked from your LMS | Deleted |
| Test-run history and submissions | Deleted |
| Assignment invitation links | Stopped working with the website |
The classroom.yml workflow can still run on every push, but nothing collects its scores. Two of the actions it calls, the command grader and the grading reporter, were archived on October 6, 2026, with the note "The GitHub Classroom application has been sunset so this plugin is deprecated."
Rebuild the roster and grades
The Classroom Export Utility and the gh classroom extension both read the Classroom API, so neither works. A teacher in GitHub's announcement thread reported on August 29 that the utility answered "HTTP 410: GitHub Classroom has been sunset". If you ran it before August 28, your grades.csv has the assignment, GitHub username, roster identifier, repository, submission time and points for each student.
Otherwise, rebuild the roster from repository names. GitHub Classroom named each student's repository with the assignment's prefix and the student's username, such as lab-1-octocat. This prints the username of everyone who accepted lab-1:
gh repo list YOUR-ORG --limit 5000 --json name --jq '.[].name' \
| grep '^lab-1-' | sed 's/^lab-1-//'
The pattern also matches an assignment named lab-1-part-2, so remove those if you have one. Group assignments used the team's name in place of a username. Match usernames against your LMS or class list: a GitHub profile shows an email only if the student made one public.
To clone every student's copy of one assignment:
gh repo list YOUR-ORG --limit 5000 --json name \
--jq '.[].name | select(startswith("lab-1-"))' \
| xargs -I{} gh repo clone YOUR-ORG/{}
What's left of autograding scores is in the log of each run on each repository's Actions tab. GitHub deletes Actions logs after 90 days by default, so runs from late August disappear in late November.
Moving your class to CS Room
CS Room is free and runs in the browser, Chromebooks included. Students sign in with Google or email, with no GitHub account. Your class gets:
- Starter code copied to every student when you publish, from a template repository you upload as a folder.
- Tests that run when a student submits and again at the due date, which collects everyone's work, including hidden tests students never see.
- A Run Tests button that checks a student's work against the visible tests as they go.
- A terminal with git and the GitHub CLI, so a class that teaches Git can still clone, commit and push to GitHub.
- Comments on lines of a student's code, where you used the feedback pull request.
- A gradebook with weights and CSV export.
CS Room doesn't make a Git repository for each student or collect work through commits, pull requests or Actions runs, and it has no group assignments. It runs Python, Java, C, C++, C#, JavaScript, TypeScript, Go and PHP, plus Jupyter notebooks and HTML, CSS and JavaScript sites. Other languages, such as Rust or Ruby, aren't installed. There's no LMS grade sync or LTI. A class holds up to 100 members, counting teachers and pending invites; a bigger one, such as a 200-student lecture, needs a request through Feedback in the top bar.
Move one assignment
- Request a teacher account. We set teachers up within a day or two.
- On the Classes page, click New class.
- Download the template repository as a ZIP (Code, then Download ZIP), unzip it and delete its .github folder. In your class, click New assignment, then Upload a folder. A README.md becomes the instructions.
- On the assignment's Settings tab, click Edit beside Tests and solutions and carry each classroom.yml step over with the table below. Hide the tests students shouldn't see and check them with Try it (Writing autograder tests).
- On the People tab, click Invite students by email and paste your list, or turn on the class link and share it.
- Set a due date and publish.
| In classroom.yml | In CS Room |
|---|---|
input and expected-output of an input/output step | An input/output case |
command of an input/output step, such as python3 main.py | The Run command, shared by every case |
comparison-method: included, exact or regex | How output is compared: Output contains the text, Output matches exactly or Regular expression |
command of a run-command or Python step | The Test command |
setup-command, such as pip install | A requirements.txt, pom.xml, go.mod or .csproj at the top of the folder |
max-score | One point per input/output case, or per pytest or JUnit test |