Skip to content

feat: Examark/QTI integration for Canvas LMS export #97

@Data-Wise

Description

@Data-Wise

Summary

Add Canvas LMS export capability to Scholar's teaching commands via Examark (v0.6.6). Two deliverables:

  1. New /teaching:canvas converter — transforms existing .qmd exams/quizzes into QTI packages for Canvas import
  2. --format canvas flag on existing generation commands (/teaching:exam, /teaching:quiz, /teaching:assignment)

Motivation

Currently, Scholar generates exams/quizzes as .qmd files. To use them in Canvas LMS, instructors must manually re-type questions in the Canvas quiz editor. Examark already converts Markdown to QTI 1.2 (Canvas's import format), and Scholar already has CanvasFormatter and ExamarkFormatter in src/teaching/formatters/ — but they aren't exposed to users or connected to existing .qmd content.

Tracks

Track 1: /teaching:canvas Converter

/teaching:canvas assignments/practice-midterm.qmd
/teaching:canvas assignments/practice-midterm.qmd --validate --emulate

Parses .qmd → detects question types → generates examark .md → runs examark CLI → outputs .qti.zip.

Track 2: --format canvas on Existing Commands

/teaching:exam midterm --format canvas
/teaching:quiz "Week 3" --format canvas
  • /teaching:exam has --format in generator but NOT in argument parser — needs fix
  • /teaching:quiz --format canvas is documented but untested
  • /teaching:assignment has no --format flag

Question Types

All 10 examark types: MC, MA, TF, Short, Numeric, Essay, Matching, FMB, FIB, Upload.

Dependencies

  • examark >= 0.6.6 (npm/Homebrew, already installed)
  • Node.js >= 18

Spec

Full spec at docs/specs/SPEC-2026-02-26-examark-qti-integration.md

Implementation Order

  1. Track 2 (fix --format flags) — ~30 min, existing infrastructure
  2. Track 1 (new converter command) — ~2 hours, needs question-type mapping logic

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions