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
- an explicit path — anything containing
/ <workingDirectory>/themes/<name>- 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.