Each course is a directory under courses/ whose name must equal the course id.
Three levels of manifest
| File | Purpose | Ordering |
|---|---|---|
course.yaml | Course info, license, section or chapter list | List position |
chapter.yaml | Chapter title and lesson list | List position |
lesson.yaml | Lesson title and optional code/video metadata | — |
Chapter and lesson directory names are only storage locations and may be renamed; public identity always comes from the manifest id. The course directory is the exception: it must equal the course id.
Path rules
- Chapter and lesson directories listed in manifests must be single names (letters, digits,
._-) — nevera/bor... - Paths such as
coverand license files must be relative paths inside the course directory. - Symlinks are not allowed anywhere in a course.
- The course-home intro lives at
intro.<lang>.mdin the course root; it is not declared incourse.yaml.
Where resources live
Shared images go in assets/; images used by one lesson may live in that lesson's own assets/. Content always uses relative paths, so previews on GitHub work too.
Next: Manifest fields.