gcr
Command-line utility for running a class on GitHub, a lightweight GitHub classroom replacement.
At the moment, this is early alpha software, use at your own risk.
Feedback welcome!
Installation
The recommended method for installation is uv tool install gcr-cli, you can then run gcr.
uvx: uvx --from gcr-cli gcr
pipx: pipx install gcr-cli, then run gcr
Setup
- Set env variable GITHUB_TOKEN to a classic token with org & repo admin permissions.
- Manually create a GitHub organization for your classroom.
- Create a
class.tomlwith your roster & settings.gcrwill look forclass.tomlin the current directory, or you can pass the-c/--configoption to specify the path.
org = "name-of-github-org"
students = [
"list",
"of",
"student",
"accounts",
]
staff = [
"list",
"of",
"staff",
"accounts",
]
# optional settings, typically no need to set these
staff_team = "staff"
student_team = "students"
student_permission = "push"
staff_permission = "maintain"
requests_per_minute = 60
retry_attempts = 3
retry_wait_seconds = 5
Usage
All commands take two options:
-c/--config: path toclass.toml(default: current dir)--dry-run: avoid making actual changes on GitHub
gcr setup
Initialize GitHub organization and invite staff & students.
You can re-run this command after making changes to class.toml and the class and staff roster will be synced.
The organization must already exist and your API key must have access.
gcr assign {template-repo-name}
Creates one private repo per student, granting access to their account & staff.
It is safe to run this command multiple times, existing repos will be skipped.
gcr clone {assignment} [optional-student]
Clone student repos to a local directory.
gcr --version
Print version and exit.
Changelog
0.3.2 - 3 September 2026
- Add
gcr assign name --emptyto create empty repos with correct perms.
0.3.1
- Improve output of
gcr setup - Add
gcr --version
0.3.0 - 6 August 2026
- Addition of
clone - Prompt to automatically make assignment repository a template.
0.2.0 - 4 August 2026
- First 'public' release.
Metadata
Release files for gcr-cli 0.3.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| gcr_cli-0.3.2.tar.gz | 19.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| gcr_cli-0.3.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.9 kB
Release files / gcr_cli-0.3.2.tar.gz
| Download URL | gcr_cli-0.3.2.tar.gz |
|---|---|
| Size | 19.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
74b4820de132cbadbcfd030de45c3f71cb7d6414ab30e11b00160670d5b7f944
|
|
BLAKE2b-256 checksum How to use checksums |
d180eb35bc11070ccad209449ad66457ce44b90aacf65c1396b88b30773e63dd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / gcr_cli-0.3.2-py3-none-any.whl
| Download URL | gcr_cli-0.3.2-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0418ccd1f6dff2e69957faa725f50ccc160a472fdf4a80046c7c885efaef346a
|
|
BLAKE2b-256 checksum How to use checksums |
e3a804dc3018cff50a57a7644fe8df6629fbee109e3d437a5246d843697f46cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"NixOS","version":"26.05","id":"yarara","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|