Skip to main content

canvaslms: A CLI to Canvas LMS.

This program provides a command-line interface for Canvas. The command is canvaslms and it has several subcommands in the same style as Git. canvaslms provides output in a format useful for POSIX tools, this makes automating tasks much easier.

Getting started

Start by login to your Canvas server

pipx install canvaslms
canvaslms login

You can also use the package directly from Python. This lets scripts and other CLI tools import canvaslms and reuse the same authentication, configuration, and encrypted cache as the canvaslms command-line tool. The top-level canvaslms.canvas object is lazy-loaded, restored from the same encrypted cache as the CLI, and saved automatically at process exit.

import canvaslms

for course in canvaslms.canvas.get_courses():
    print(course.name)

Let's consider how to grade students logging into the student-shell SSH server. We store the list of students' Canvas and KTH IDs in a file.

canvaslms users -sc DD1301 | cut -f 1,2 > students.csv

Then we check who has logged into student-shell.

ssh student-shell.sys.kth.se last | cut -f 1 -d " " | sort | uniq \
  > logged-in.csv

Finally, we check who of our students logged in. We can set their grade to P and add the comment "Well done!" in Canvas. We set the grades for the two assignments whose titles match the regular expression (Preparing the terminal|The terminal).

for s in $(cut -f 2 students.csv); do
  grep $s logged-in.csv && \
    canvaslms grade -c DD1301 -a "(Preparing the terminal|The terminal)" \
      -u $(grep $s students.csv | cut -f 1) \
      -g P -m "Well done!"
done

Analyzing Quiz/Survey Results

The quizzes analyse command helps you analyze Canvas quiz or survey evaluation data. Download the Student Analysis Report CSV from Canvas and run:

# Markdown output (default, rendered with rich)
canvaslms quizzes analyse --csv survey_results.csv

# LaTeX output (for PDF compilation)
canvaslms quizzes analyse --csv survey_results.csv --format latex > report.tex

This will provide:

  • Statistical summaries for quantitative questions (ratings, multiple choice)
  • Proper handling of multi-select questions (comma-separated options)
  • All individual responses for qualitative questions (free text)
  • AI-generated summaries of qualitative responses (requires llm, install with canvaslms[llm])

If you installed with the [llm] extra, configure your API keys:

llm keys set openai  # or another provider

Managing Quiz Content

View and edit quiz content directly from the command line:

# View quiz questions rendered as markdown
canvaslms quizzes view -c "Course" -a "Quiz Name"

# Edit quiz content interactively
canvaslms quizzes edit -c "Course" -a "Quiz Name"

# Export quiz items for backup or migration
canvaslms quizzes items export -c "Course" -a "Quiz Name" --importable

# Add questions to a quiz bank (use --example to see question formats)
canvaslms quizzes items add -c "Course" -a "Quiz Name" --example

Editing Announcements and Discussions

Edit existing announcements using the same workflow as pages:

# Edit interactively (opens in editor)
canvaslms discussions edit -c "Course" -t "Announcement Title"

# Edit from a markdown file with YAML front matter
canvaslms discussions edit -c "Course" -t "Announcement Title" -f announcement.md

Installation

Install the PyPI package using pip or pipx:

# Basic installation (Python 3.10+)
python3 -m pip install canvaslms
# or
pipx install canvaslms # recommended

# With optional LLM support for AI summaries (Python 3.10+)
python3 -m pip install canvaslms[llm]
# or
pipx install canvaslms[llm] # recommended

The [llm] extra includes the llm package and various LLM provider plugins (OpenAI, Anthropic, Gemini, Azure) for AI-powered features like quiz analysis summaries.

The Python API uses the same credential sources as the command-line tool: system keyring, CANVAS_SERVER/CANVAS_TOKEN, or the config file.

Some subcommands use pandoc, so you will likely have to install pandoc on your system manually.

Development

This project uses literate programming with noweb. The source code is written in .nw files which combine documentation and code.

GitHub Copilot Setup

This repository includes GitHub Copilot configuration files:

  • .github/copilot-instructions.md: Project context and coding guidelines
  • .copilotignore: Files to exclude from Copilot context

The configuration helps Copilot understand the literate programming approach, Canvas LMS domain, and project-specific patterns.

Metadata

Release files for canvaslms 6.21

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for canvaslms 6.21
File Size Uploaded
canvaslms-6.21.tar.gz 596.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for canvaslms 6.21
File Interpreter ABI Platform
canvaslms-6.21-py3-none-any.whl Python 3 none any Details

Total release size: 1.3 MB

Release files / canvaslms-6.21.tar.gz

Download URL canvaslms-6.21.tar.gz
Size 596.9 kB
Tags Source
SHA-256 checksum
How to use checksums
bcd56984d66285c1a8e83baa02b6ae9a47759d37c8e491b2a0e715c63787eaf0
BLAKE2b-256 checksum
How to use checksums
7a9854c6095ef2297ed277445dcadfd0fa26a7b6cd1c15633fd72b3b0782d6dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.3 CPython/3.14.4 Linux/7.0.0-31-generic

Release files / canvaslms-6.21-py3-none-any.whl

Download URL canvaslms-6.21-py3-none-any.whl
Size 670.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
099b5b410c0c42b4adf2a06521fd78017d83965061095ef0abf16318dd93d1ef
BLAKE2b-256 checksum
How to use checksums
d38c21ce4d43631be88b8d7f0ef416b668359c2b44ce1b226d6c6864cd5849da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.4.3 CPython/3.14.4 Linux/7.0.0-31-generic

Release history Release notifications | RSS feed

This release

6.21 This release

2 release files

6.20

2 release files

6.19

1 release file

6.18

2 release files

6.17

2 release files

6.16

2 release files

6.15

2 release files

6.14

2 release files

6.13

2 release files

6.12

2 release files

6.11

2 release files

6.10

2 release files

6.9

2 release files

6.8

2 release files

6.7

2 release files

6.6

2 release files

6.5

2 release files

6.4

2 release files

6.3

2 release files

6.2

2 release files

6.1

2 release files

6.0

2 release files

5.10

2 release files

5.9

2 release files

5.8

2 release files

5.7

2 release files

5.6

2 release files

5.5

2 release files

5.4

2 release files

5.3

2 release files

5.2

2 release files

5.1

2 release files

5.0

2 release files

4.15

2 release files

4.14

2 release files

4.13

2 release files

4.12

2 release files

4.11

2 release files

4.10

2 release files

4.2

2 release files

4.1

2 release files

4.0

2 release files

3.9

2 release files

3.8

2 release files

3.7

2 release files

3.6

2 release files

3.5

2 release files

3.4

2 release files

3.3

2 release files

3.0

2 release files

2.23

2 release files

2.22

2 release files

2.21

2 release files

2.20

2 release files

2.19

2 release files

2.18

2 release files

2.17

2 release files

2.16

2 release files

2.15

2 release files

2.14

2 release files

2.13

2 release files

2.12

2 release files

2.11

2 release files

2.10

2 release files

2.9

2 release files

2.8

2 release files

2.7

2 release files

2.6

2 release files

2.5

2 release files

2.4

2 release files

2.3

2 release files

2.2

2 release files

2.1

2 release files

2.0

2 release files

1.20

2 release files

1.19

2 release files

1.18

2 release files

1.17

2 release files

1.16

2 release files

1.15

2 release files

1.14

2 release files

1.13

2 release files

1.12

2 release files

1.11

2 release files

1.10

2 release files

1.9

2 release files

1.8

2 release files

1.7

2 release files

1.6

2 release files

1.5

2 release files

1.4

2 release files

1.3

2 release files

1.2

2 release files

1.1

2 release files

1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page