Skip to main content
A theme is a folder. resumelang validates it against a versioned theme.yml spec at load time, so a broken theme fails the build instead of producing half-rendered HTML.

Built-in themes

Pick one in meta.theme:

Anatomy of a theme

The Handlebars context is the parsed YAML (lowercase keys), plus:
  • themeCSS — the raw stylesheet (use {{{themeCSS}}} to inline)
  • tokens — flattened design tokens (e.g. {{tokens.colors_background}})
Helpers that ship with both the Go and JS runtimes:

theme.yml — the contract

tokens is flattened into a single namespace at compile time (e.g. {{tokens.colors_accent}}) and exposed as CSS custom properties at runtime (--rl-colors-accent).

Validation rules

Validate a theme without rendering anything:

Contributing a theme

  1. Fork ovsec/resumelang.
  2. cp -r themes/minimal themes/<your-name>.
  3. Edit theme.yml, templates/resume.hbs, assets/style.css.
  4. resumelang theme validate ./themes/<your-name>.
  5. Open a PR with a screenshot rendered from examples/jane.yml.
Themes ship as part of the binary via embed.FS, so they get the same versioning and offline guarantee as the compiler itself.

Forward compatibility

theme.yml is versioned. A theme written for spec: v1 will keep working when the compiler bumps to v2. Compilers refuse to load themes with a higher spec than they understand, with a clear error message.