Course manifest

The fields of dojo.yaml every course has, the content lessons can use, and the environment.

Every course has exactly one manifest at its root: dojo.yaml (preferred – it takes comments), dojo.yml or dojo.json. Point your editor at the schema for completion and checks:

# yaml-language-server: $schema=https://dojo.foo/schema/v1/dojo.json

Fields

FieldDescription
nameRequired. The package name, e.g. @acme/readings
versionRequired. A semver version
descriptionRequired. What the course teaches, in a sentence
modekatas (the default) or interactive – each adds its own fields: katas, interactive
author, homepage, repositoryShown in the marketplace
language, frameworkThe main language and framework, for marketplace filters
tagsTopics for discovery; don't repeat the language or framework
privatetrue keeps a public course out of the marketplace, as in a package.json; marketplace: false is its older spelling

Lesson content

.mdx content renders Markdown, highlighted code, Mermaid diagrams and LaTeX, plus these components – self-closing, attributes as plain strings:

<Artifact src="assets/worksheet.pdf" title="Worksheet" />
<Video src="assets/introduction.mp4" title="Introduction" />
<Interactive src="components/check.html" title="Environment check" />

Interactive HTML runs in a sandboxed frame. Files are served only from inside the course, with a size limit. Imports and JavaScript expressions aren't supported.

Environment

The course's mise.toml pins its tools and defines an idempotent setup task. dojofoo runs both when the course is added – in any language mise supports:

[tools]
python = "3.13"
uv = "latest"

[tasks.setup]
run = "uv sync"
Edit on GitHub