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
date_format: "%d.%m.%Y" # optional display format for template-rendered dates
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
overwrite: on-force # on-force | always | never
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, overwrite, duration.
date_format
course.date_format is optional and controls how built-in templates render human-facing date strings.
- It uses Python/POSIX
strftimetokens (for example%d.%m.%Y,%Y-%m-%d). - It affects rendered display text (for example module page title dates and schedule tables/lists in
syllabus.qmdandindex.qmd). - It does not change front matter
date:values; those remain machine- readable source dates.
If omitted, the default display format is %Y-%m-%d.
enabled, overwrite, visibility, and status
The generator treats these as separate concepts:
enabledcontrols whether an item is generated at all. When it isfalse, the generator skips creating the stub file and does not add it to Quarto config.overwritecontrols whether an existing generated stub may be replaced.on-forcemeans only whenquarto-coursegen generate --forceis used,alwaysmeans on every run, andnevermeans never overwrite an existing file.visibilitycontrols whether the item appears in the public course website. The supported values arepublicandhidden.statusis lifecycle metadata. It is used by the default templates to decide whether to show a document as published or as a placeholder like “coming soon”, but it does not turn generation on or off.
In practice, a hidden item may still be generated if enabled: true, but it is omitted from the public navigation, index pages, and module page links.
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
overwrite: on-force # on-force | always | never
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 |
Lifecycle metadata; typical values are planned, draft, ready, published, and archived. The default templates treat published and archived as release-ready. |
overwrite |
defaults.overwrite or on-force |
Existing module page overwrite policy: on-force, always, or never |
visibility |
defaults.visibility |
public or hidden; hidden items are excluded from the public course website even if they are generated. |
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.