# canvas-lms-api
A Rust client for the [Instructure Canvas LMS REST API](https://canvas.instructure.com/doc/api/).
[](https://crates.io/crates/canvas-lms-api)
[](https://docs.rs/canvas-lms-api)
[](https://github.com/RobertConde/canvas-lms-api/actions/workflows/ci.yml)
## Quickstart
```toml
[dependencies]
canvas-lms-api = "0.4"
tokio = { version = "1", features = ["full"] }
```
```rust
use canvas_lms_api::Canvas;
#[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());
// Collect all assignments for the course
let assignments = course.get_assignments().collect_all().await?;
for a in assignments {
println!(" Assignment: {}", a.name.unwrap_or_default());
}
Ok(())
}
```
## Features
| `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.4)
**Core:** Course, User, Assignment, Submission, Enrollment, Section, Module, Quiz,
Group, Account, File, Folder, Page, DiscussionTopic, Progress, Tab
**Extended:** AccountCalendar, AppointmentGroup, Blueprint, CalendarEvent,
Collaboration, CommunicationChannel, ContentExport, ContentMigration, Conversation,
EnrollmentTerm, EPortfolio, ExternalTool, Feature / FeatureFlag,
GradeChangeLog, GradebookHistory, GradingPeriod, GradingStandard,
JWT, LtiResourceLink, Outcome / OutcomeGroup, Planner (Note + Override),
Poll / PollChoice / PollSession / PollSubmission, Role, Rubric, SisImport
**Feature-gated:** NewQuiz (`new-quizzes`), GraphQL queries (`graphql`)
## Examples
Runnable example programs live in [`examples/`](examples/). Each is a standalone Cargo project.
| [`list-courses-and-assignments`](examples/list-courses-and-assignments) | List all your courses and their assignments |
More examples to come.
## Access tokens
Generate a token in Canvas: **Account → Settings → Approved Integrations → New Access Token**.
## License
Licensed under the [MIT License](LICENSE).
## Acknowledgements
Inspired by [canvasapi](https://github.com/ucfopen/canvasapi), the Python Canvas API library
maintained by the University of Central Florida.