canvas-sak — the canvas swiss army knife
do the repetitive parts of teaching in canvas from your terminal — 32 commands for the things the web ui makes you click thirty times. every command that changes your course shows you what it would do first, and stops.
# reschedule an entire course for the new semester
canvas-sak list-due-dates "CS 146" > dates.txt # dump every date
$EDITOR dates.txt # fix the year, shift a week
canvas-sak set-due-dates "CS 146" dates.txt # preview — nothing is written yet
canvas-sak set-due-dates "CS 146" dates.txt --no-dryrun
also: pull a whole course down as markdown and push it into next semester’s shell, run submissions through stanford moss, message every student, bulk-set letter grades, and collect the information you’ll want when someone asks for a recommendation letter two years from now.
▶️ see what every command does, without installing anything — generated from the tool itself
install
pip install canvas-sak
or, to keep it out of your main python environment:
pipx install canvas-sak # or: uv tool install canvas-sak
needs python 3.10+. then run canvas-sak help-me-setup, which walks you through
creating a canvas access token and tells you exactly where to put it.
to upgrade later: pip install --upgrade canvas-sak.
every version ships to pypi — that’s the only place to get it, and this repo publishes no downloads of its own. what changed in each version is in CHANGELOG.md.
documentation
- getting started — install to first real command, about ten minutes
- how-to guides — due dates, assignment groups, reusing a course, quiz settings, ignore patterns
- explanation — why almost everything is a dry run, and how courses are found (read this one when a course you’re definitely teaching “doesn’t exist”)
- command reference — all 32 commands and their options
contributing
contributions are welcome — see CONTRIBUTING.md.
that gives you a working dev environment with nothing to install. the test suite mocks the canvas api, so you can develop without a canvas account or a token.
documentation is the biggest gap right now and is a genuinely valuable place to start — see the good first issues.
community
- discussions — questions, ideas, and show-and-tell
- using this to run a real course? please tell us. the issue tracker only ever hears from people something broke for, so without this we have no idea whether anyone is out there.
- report a bug — please redact student names and ids
license
released into the public domain under the Unlicense.