examark
v0.6.6
Published
Create exams from Markdown and export to Canvas QTI format
Maintainers
Readme
Examark
Write exams in Markdown. Export to Canvas in seconds.
Documentation · Getting Started · Report Bug
Why Examark?
Stop clicking through Canvas forms. Write once, export anywhere.
┌─────────────────┐ ┌──────────┐ ┌─────────────────┐
│ quiz.md │ ───▶ │ examark │ ───▶ │ quiz.qti.zip │
│ (Markdown) │ │ │ │ (Canvas-ready) │
└─────────────────┘ └──────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ quiz.txt │
│ (Printable) │
└─────────────────┘Perfect for: Instructors, TAs, and course developers who want version-controlled, portable exam files.
Quick Start
No installation needed — try it now:
npx examark quiz.md -o quiz.qti.zipWrite Your Exam
# Statistics Midterm
1. [MC] What is the mean of 2, 4, 6? [2pts]
a) Three
b) Four [x]
c) Five
2. [TF] Variance can be negative. [1pt]
a) True
b) False [x]
3. [Essay, 10pts] Explain the Central Limit Theorem.Convert & Import
examark midterm.md -o midterm.qti.zip # For Canvas
examark midterm.md -f text # For printingThen: Canvas → Settings → Import Content → QTI .zip
Features
📝 Clean Syntax
Write questions naturally without complex markup.
1. [MC] Question here [2pts]
a) Wrong
b) Right [x]🧮 LaTeX Math
Full equation support, auto-converted for Canvas.
Find $\bar{x}$ given:
$$\bar{x} = \frac{\sum x_i}{n}$$📦 8 Question Types
- Multiple Choice (
[MC]) - True/False (
[TF]) - Multiple Answer (
[MA]) - Short Answer (
[Short]) - Numeric (
[Numeric]) - Essay (
[Essay]) - Matching (
[Match]) - Fill-in-Blanks (
[FMB])
🔧 Powerful CLI
examark *.md -o output/ # Batch convert
examark quiz.md -f text # Paper exams
examark verify pkg --strict # New Quizzes check
examark check quiz.md # Lint syntax🖼️ Image Bundling
Local images automatically packaged into QTI.
🔬 Quarto Integration
Dynamic questions with R/Python.
format:
exam-qti: default
exam-pdf: defaultInstallation
Option 1: No Installation (Recommended for beginners)
Run directly without installing anything (requires Node.js):
npx examark quiz.md -o quiz.qti.zipThis downloads and runs examark automatically. Perfect for trying it out!
Option 2: Install Globally
For frequent use, install once and run anytime:
Mac (Homebrew):
brew tap data-wise/tap
brew install examarkWindows / Mac / Linux (npm):
npm install -g examarkAfter installing, just run:
examark quiz.md -o quiz.qti.zipFirst Time on Windows?
If you've never used Node.js before:
- Download Node.js from nodejs.org — click the big green "LTS" button
- Run the installer — accept all defaults, click Next through everything
- Open Command Prompt or PowerShell (search "cmd" in Start menu)
- Verify it worked:
node --version(should show a version number) - Run examark:
npx examark quiz.md -o quiz.qti.zip
That's it! No complicated setup needed.
git clone https://github.com/Data-Wise/examark.git
cd examark && npm install && npm run build && npm linkCommands
| Command | Description |
|---------|-------------|
| examark <file.md> | Convert to QTI (default: file.qti.zip) |
| examark <file.md> -f text | Export as printable plain text |
| examark *.md -o output/ | Batch convert multiple files |
| examark verify <pkg> | Validate QTI package |
| examark verify <pkg> --strict | Strict validation for New Quizzes |
| examark emulate-canvas <pkg> | Simulate Canvas import |
| examark check <file.md> | Lint markdown for errors |
| examark --preview | Preview parsed questions (JSON) |
Options: -o <output> · -p <points> · -t <title> · --no-answers · -v · --strict
Configuration
Create .examarkrc.json for project defaults:
{
"defaultPoints": 2,
"outputDir": "output",
"validate": true
}Templates
Markdown (no Quarto needed):
| Template | Description | |----------|-------------| | minimal.md | 3 questions — quickest start | | starter-exam-md.md | One of each question type | | statistics-exam.md | Real exam with LaTeX math | | canvas-ready.md | Comprehensive — 21 questions |
Quarto (for R/Python users):
| Template | Description | |----------|-------------| | minimal.qmd | Simplest Quarto template | | starter-exam.qmd | Full-featured starter | | dynamic-questions.qmd | Randomized questions with R |
For Quarto Users
Generate dynamic, randomized questions with R or Python:
quarto add Data-Wise/examarkDocumentation
| | | |---|---| | 📚 Full Docs | Complete reference | | 🚀 Getting Started | Install + first quiz | | 📝 Input Formats | Question syntax | | ⚙️ Configuration | Project settings | | 🎓 Tutorials | R/Quarto, VS Code |
Made with ❤️ by Data-Wise · MIT License
