Skip to content

course.yaml reference

Clipboard icons

Commands and prompts on this page use fenced blocks with a copy button (top-right). Click to copy the full text for Terminal, Claude, or Cursor.

course.yaml is the course manifest — metadata, lesson list, quizzes, optional branching, and tracking.

Minimal example

title: Security Awareness
version: 1.0.0
description: Annual security training

runtime:
  theme: modern

tracking:
  completion:
    threshold: 0.9

lessons:
  - id: welcome
    title: Welcome
    type: markdown
    file: lessons/welcome.md

  - id: phishing_lab
    title: Phishing lab
    type: html
    path: interactions/phishing-lab

assessments:
  - id: final_quiz
    file: assessments/final.yaml

Top-level fields

Field Required Description
title Yes Display title
version Yes Semver string for your records
description No Short summary
runtime.theme No CSS theme class on player (modern, etc.)
variables No Named values for branching
flow No Branching rules
lessons Yes Ordered lesson list
assessments No Quiz file references
tracking No Completion and optional xAPI

Lesson entry

type Required fields
markdown file: path to .md
html path: folder under interactions/
spa path: folder with index.html (built app output)
component component: id, optional props:

Each lesson needs unique id (safe characters: letters, numbers, underscore, hyphen).

Variables

variables:
  role:
    default: employee
    type: string

Flow

flow:
  - from: choose_path
    when:
      variable:
        eq: [role, manager]
    goto: manager_module
  - from: final_quiz
    when:
      assessment:
        passed: final_quiz
    goto: completion

Optional from is the activity id the learner must be on for the rule to run. Use from with variable.eq so persistent variables do not redirect learners on unrelated steps. Rules with interaction.done or assessment.passed infer from when omitted.

See Branching and paths.

Tracking

tracking:
  completion:
    threshold: 0.9
  xapi:
    activityIri: "https://example.com/courses/security"
    displayName: Security Awareness

Required for build --target xapi|cmi5: HTTPS activityIri.

Full specification

Implementers: Developer SPEC.