course.yaml Reference
course.yaml is the single source of truth for the entire course. The generator reads nothing else to determine what files to create.
Top-level structure
course: # course-wide metadata
...
artifacts: # course-level artifacts (e.g. syllabus, overview deck)
- ...
modules: # ordered list of modules
- ...course block
course:
id: my-course # used in file paths and URLs
title: "Logic 101"
subtitle: "Introduction to Formal Logic"
semester: "WS 2026"
language: "en" # drives i18n strings; built-ins: en, de
ects: 3
instructors:
- name: "Prof. Jane Smith"
email: "smith@example.com"
role: "lecturer" # lecturer | tutor | coordinator
organization:
institution: "Example University"
department: "Department of Philosophy"
defaults: # applied to every module unless overridden
status: planned
visibility: public
duration: 90 # minutes
schedule:
start_date: 2026-10-01
end_date: 2027-01-31
weekly_day: "Monday"
i18n: # optional inline i18n overrides (see Internationalisation)
nav:
home: StartseiteInstructors
Instructors are defined at course level and can be overridden per module. If a module omits its own instructors: list, the course-level list is inherited automatically by the generator.
Each entry supports:
| Field | Description |
|---|---|
name |
Full name (required) |
email |
Email address (optional) |
role |
lecturer, tutor, or coordinator |
defaults block
Any field in defaults is merged into every module entry that does not set that field explicitly. Common uses: status, visibility, duration.
Module entries
modules:
- id: intro # unique; used in file names and URLs
type: lecture # lecture | exercise | lab | seminar | …
title: "Introduction"
subtitle: "Why logic?" # optional
description: | # optional free-text
Overview of the course …
date: 2026-10-01
duration: 90 # minutes; overrides defaults.duration
status: planned # planned | draft | ready | published
visibility: public # public | hidden
instructors: # overrides course-level instructors
- name: "Dr. Jones"
role: tutor
tags: [logic, intro]
learning_objectives: |
- Understand the scope of formal logic
- Distinguish syntax from semantics
lms:
release: 2026-09-28
due: 2026-10-08
dependencies: []
artifacts:
- id: intro-slides
type: slides
enabled: true
output_formats: [revealjs, beamer]
- id: intro-handout
type: handout
enabled: true
output_formats: [website, pdf]Module fields
| Field | Default | Description |
|---|---|---|
id |
— | Required. Unique identifier; used in file names and URLs |
type |
— | Module type (metadata only; lecture, exercise, …) |
title |
— | Display title |
subtitle |
— | Optional subtitle |
description |
— | Optional free-text description |
date |
— | ISO date of the session |
duration |
defaults.duration |
Duration in minutes |
status |
defaults.status |
planned, draft, ready, published |
visibility |
defaults.visibility |
public or hidden |
instructors |
course-level list | List of instructor entries |
tags |
— | List of tags (metadata only) |
learning_objectives |
— | Multiline string or list |
lms |
— | LMS release/due dates (metadata only) |
dependencies |
[] |
List of other module IDs this module depends on |
artifacts |
— | List of artifact entries — see Artifacts |
Course-level artifacts
Artifacts can also be declared at the top level for course-wide documents such as a syllabus or a course overview slide deck:
artifacts:
- id: syllabus
type: syllabus
enabled: true
file: "content/syllabus.qmd"These follow the same schema as module-level artifacts. See Artifacts for all artifact fields and options.