canvas-lms-api 0.3.0

Rust client for the Instructure Canvas LMS REST API
Documentation

canvas-lms-api

A Rust client for the Instructure Canvas LMS REST API.

Crates.io docs.rs CI

Quickstart

[dependencies]
canvas-lms-api = "0.3"
tokio = { version = "1", features = ["full"] }
futures = "0.3"
use canvas_lms_api::Canvas;
use futures::StreamExt;

#[tokio::main]
async fn main() -> canvas_lms_api::Result<()> {
    let canvas = Canvas::new("https://canvas.example.edu", "your-access-token")?;

    // Fetch a single course
    let course = canvas.get_course(123).await?;
    println!("Course: {}", course.name.unwrap_or_default());

    // Stream all assignments (lazy, page by page)
    let mut assignments = course.get_assignments();
    while let Some(result) = assignments.next().await {
        let a = result?;
        println!("  Assignment: {}", a.name.unwrap_or_default());
    }

    Ok(())
}

Features

Feature Default Description
async yes Async API via tokio + reqwest
blocking no Synchronous wrapper (CanvasBlocking)
new-quizzes no New Quizzes endpoint (/api/quiz/v1/)
graphql no GraphQL endpoint support
full no All optional features

Resources covered (v0.3)

Core: Course, User, Assignment, Submission, Enrollment, Section, Module, Quiz, Group, Account, File, Folder, Page, DiscussionTopic, Progress, Tab

Extended: AccountCalendar, AppointmentGroup, Blueprint, CalendarEvent, CommunicationChannel, ContentExport, ContentMigration, Conversation, EnrollmentTerm, EPortfolio, ExternalTool, Feature / FeatureFlag, GradeChangeLog, GradebookHistory, GradingPeriod, GradingStandard, JWT, Outcome / OutcomeGroup, Planner (Note + Override), Role, Rubric, SisImport

Feature-gated: NewQuiz (new-quizzes), GraphQL queries (graphql)

Access tokens

Generate a token in Canvas: Account → Settings → Approved Integrations → New Access Token.

License

Licensed under the MIT License.

Acknowledgements

Inspired by canvasapi, the Python Canvas API library maintained by the University of Central Florida.