██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███████╗
██╔════╝██╔══██╗████╗ ██║██║ ██║██╔══██╗██╔════╝
██║ ███████║██╔██╗ ██║██║ ██║███████║███████╗
██║ ██╔══██║██║╚██╗██║╚██╗ ██╔╝██╔══██║╚════██║
╚██████╗██║ ██║██║ ╚████║ ╚████╔╝ ██║ ██║███████║
╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═══╝ ╚═╝ ╚═╝╚══════╝ CLI
A universal command-line client for Canvas LMS written in Go. Works with any Canvas instance — just provide your institution's URL and an API access token.
- Works with any Canvas LMS instance (Instructure, self-hosted, etc.)
- Simple API token authentication — no complex SSO flows
- 20+ commands covering courses, assignments, grades, submissions, modules, discussions, files, calendar, and more
- Color-coded output with human-readable formatting
--json flag on any command for scripting/piping
- Zero external Go dependencies
- Go 1.21+ (for building from source)
- A Canvas LMS account at your institution
- A Canvas API access token
# Clone and build
git clone https://github.com/jpnarchi/canvas-cli.git
cd canvas-cli
go build -o canvas-cli .
# Optional: add to PATH
sudo ln -s $(pwd)/canvas-cli /usr/local/bin/canvas-cli
# 1. Configure with your Canvas URL and API token
canvas-cli configure
# Canvas URL: https://myschool.instructure.com
# API Token: your_token_here
# 2. Verify login
canvas-cli whoami
# 3. List your courses
canvas-cli courses
# 4. Check your grades
canvas-cli grades
# 5. See what's due
canvas-cli todo
- Log in to your Canvas instance in a browser
- Go to Account → Settings
- Scroll to Approved Integrations
- Click + New Access Token
- Give it a name (e.g. "canvas-cli") and click Generate Token
- Copy the token — you won't be able to see it again
| Command |
Description |
canvas-cli configure |
Set up Canvas URL and API token |
canvas-cli whoami |
Show your profile info |
canvas-cli debug-login |
Test API connection with verbose output |
canvas-cli version |
Show CLI version |
| Command |
Description |
canvas-cli courses |
List your active courses |
canvas-cli courses <id> |
Show course details (syllabus, term, grade) |
canvas-cli courses <id> users |
List users enrolled in a course |
| Command |
Description |
canvas-cli assignments <course> |
List assignments with due dates and status |
canvas-cli assignments <course> <id> |
Show assignment details and your submission |
canvas-cli grades |
Grades overview across all courses |
canvas-cli grades <course> |
Detailed grades for a specific course |
canvas-cli submissions <course> <assign> |
View your submission, comments, and rubric |
canvas-cli submit <course> <assign> --text "..." |
Submit text entry |
canvas-cli submit <course> <assign> --url <url> |
Submit a URL |
| Command |
Description |
canvas-cli todo |
Pending to-do items |
canvas-cli upcoming |
Upcoming events and assignments |
canvas-cli missing |
Missing/late submissions |
canvas-cli calendar |
Calendar events (next 30 days) |
canvas-cli calendar --start 2026-01-01 --end 2026-02-01 |
Events in a date range |
| Command |
Description |
canvas-cli modules <course> |
List modules in a course |
canvas-cli modules <course> <id> |
List items in a module |
canvas-cli discussions <course> |
List discussion topics |
canvas-cli discussions <course> <id> |
View a discussion thread |
canvas-cli discussions <course> <id> --reply "msg" |
Post a reply |
canvas-cli announcements |
Recent announcements (all courses) |
canvas-cli announcements <course> |
Announcements for a specific course |
| Command |
Description |
canvas-cli files <course> |
List course files with sizes |
canvas-cli download <file_id> |
Download a file |
canvas-cli download <file_id> -o ~/path |
Download to a specific path |
| Command |
Description |
canvas-cli notifications |
Activity stream (announcements, messages, submissions) |
| Flag |
Description |
--json |
Output raw JSON (works on any command) |
--per-page <n> |
Results per page, default 50 |
-h, --help |
Show help |
Config is stored at ~/.canvas-cli/config.json with 0600 permissions:
{
"api_url": "https://myschool.instructure.com",
"api_token": "your_api_token_here"
}
canvas-cli/
├── main.go # Entry point
├── go.mod # Go module (zero external deps)
├── cmd/
│ ├── root.go # Command router, global flags, help
│ ├── announcements.go # Announcements command
│ ├── assignments.go # Assignments command
│ ├── calendar.go # Calendar command
│ ├── courses.go # Courses command
│ ├── debug.go # Debug login command
│ ├── discussions.go # Discussions command
│ ├── files.go # Files & download commands
│ ├── grades.go # Grades command
│ ├── modules.go # Modules command
│ ├── notifications.go # Notifications command
│ ├── submissions.go # Submissions & submit commands
│ ├── todo.go # Todo, upcoming, missing commands
│ └── whoami.go # Whoami command
├── internal/
│ ├── api/
│ │ └── client.go # HTTP client & API methods
│ ├── config/
│ │ └── config.go # Configuration load/save
│ └── ui/
│ └── ui.go # Colors, tables, formatting helpers
└── README.md
This CLI is built on top of the Canvas LMS REST API.
MIT