Classroom J
A self-hosted GitHub Classroom replacement, built around student identity.
Which GitHub account belongs to which student?
Every GitHub-based classroom tool has to answer that question, and getting it wrong means a student's work is attributed to someone else. GitHub Classroom answered it by showing students a list of everyone in the class and asking them to pick their own name, which fails the same three ways every term: students pick the wrong name, students have more than one GitHub account and accept with the wrong one, and nothing maps a student number back to the repositories that student owns.
The longer version of this argument, and why the fix is an inversion rather than a better roster picker, is in The wrong-account problem.
Classroom J answers it differently.
- The student proves who they are. They sign in with their institutional address, so identity comes from your enrolment data rather than a dropdown.
- The student proves which GitHub account is theirs. They link it through GitHub's own OAuth flow, so the account is verified rather than typed.
- More than one GitHub account per student is normal. Provisioning from the wrong account is fixed by provisioning again from the right one. Both repositories stay attributed to that student.
- Lookup is a first-class view. Search by name, student number, email or GitHub login and see that person's accounts, groups and repositories.
What it does
- Classes for a term offering of a course, with enrolment imported from an LMS CSV.
- Assignments created by deploying a template repository into a class, individual or group.
- Students provision their own repositories at any time, with no tutor in the loop. Repositories are private, owned by your organisation, have forking disabled, and consume no organisation seat.
- Staff-defined groups per assignment, one shared repository each.
- Provisioning that survives failure. It runs as a queued job that claims the repository before calling GitHub, so a failed attempt resumes rather than creating a second repository. A student can provision again; staff can repair one repo or re-run a whole class.
- Bulk provisioning and repair for the students who never got to it.
It does not do autograding, score collection, feedback pull requests or LMS grade passback. Your template's GitHub Actions still run on every student repository; Classroom J just does not collect the results.
Run it yourself
Classroom J is open source under the MIT licence. It runs on your own Firebase project against your own GitHub organisation, so your students' data stays yours.
Would rather not run it? Open an issue and say which organisation you teach in.