Markdown Presentation llms.txt llms-full.txt pages.json

A theme is a directory. theme.yml is required; styles.yml, layouts.yml and template.pptx are optional.

themes/corporate-dark/
├── theme.yml      required
├── styles.yml     the Word half's vocabulary — the renderer does not read it
├── layouts.yml    which PowerPoint layout each role maps to
└── template.pptx  optional, a path

theme.yml

Key Type Default Notes
name string — required, non-empty
description string null
author string null
dark boolean false boolean only — dark: yes is refused
colors: mapping see below #rrggbb, stored upper-cased
fonts: mapping Calibri / Calibri / Consolas heading, body, mono
style: mapping see below the geometry

dark: yes being refused is not pedantry. YAML 1.1 truthy strings are what make a theme written by hand behave differently from one written by a machine, and this one is for machines.

The twelve colour slots

dk1 lt1 dk2 lt2 accent1 accent2 accent3 accent4 accent5 accent6 hlink folHlink

Defaults: #000000 #FFFFFF #44546A #E7E6E6 #4472C4 #ED7D31 #A5A5A5 #FFC000 #5B9BD5 #70AD47 #0563C1 #954F72.

Four read-friendly aliases are accepted: dark1, light1, dark2, light2, hyperlink, followedHyperlink.

dark: true swaps four of them — the page becomes dk1, the ink lt1, the panel dk2, the subtle ink lt2 — which is why the same theme can be dark without being a second theme.

style: — the geometry

Key Type Default Minimum
margin int, px 40 1
gutter int, px 20 1
block int, px 12 1
rule int, px 2 1
body int, pt 16 1
title int, pt 28 1
cover int, pt 40 1
section int, pt 44 1
headings list of int, pt [22, 20, 18, 16, 14] each ≥ 1
leading number 1.2 1.0
heading-weight bold or regular bold
heading-ink ink or accent ink

Layout roles

Eight, and only these:

title  content  two-column  section  blank  image-text  image-title  image-slide

blank and image-slide have no title box. layouts.yml maps each role to a layout name in the master — the file may be a bare mapping or nested under a single layouts: key.

Only the roles a deck actually uses are built, so a ten-slide deck does not carry eight masters.

The four that ship

Theme Margin Block Body Headings Leading Weight Ink
default 40 12 16pt 22/20/18/16/14 1.2 bold ink
corporate-dark 48 16 18pt 26/23/21/19/17 1.32 bold accent
minimal 64 14 17pt 23/22/21/20/19 1.12 regular ink
dense 28 8 13pt 17/16/15/14/13 1.1 bold ink

minimal has more margin and less ink; dense has less margin and smaller type. Those are the two axes a deck is usually fighting over, and they are separate keys so you can move one.

Resolution order

  1. an explicit path — anything containing /
  2. <workingDirectory>/themes/<name>
  3. the package's own themes/<name>

There is no silent fallback to default. A name that does not resolve raises ThemeNotFound and lists every theme that does. A deck that came out looking like something other than what was asked for is worse than a deck that did not build.

Word themes

The Word half has themes too, and they are the other shape: a directory with theme.yml — name, description, author, and name required — and an optional styles.yml holding the same slot names the Word configuration page lists. Four ship: default, minimal, corporate, report.

A theme is a starting point, not a replacement: your own styles: sits on top of it, and which keys you wrote is remembered so a partial override does not silently discard the rest.

Every example on this page was built by the library it documents while this page was built. This page as Markdown.