Markdown Syntax

Templates are written in a small markdown-style syntax. This page covers every element you can use, plus how variables and conditionals work.

Headers

A line beginning with one or more # characters followed by a space is a header.

# Morning Routine

Tasks

A task is an empty checkbox [] followed by whitespace and a label. Consecutive tasks are grouped together.

[] Make the bed
[] Brush teeth
[] Pack lunch

The checkbox must be exactly [] — any marker between the brackets, a second checkbox, or a missing label is reported as an error.

Paragraphs

Any other non-blank line is treated as prose. Consecutive prose lines are joined with a space into a single paragraph. A blank line ends the current paragraph (or task group) and starts a new block.

Remember to stretch before
you start your workout.

This is a separate paragraph.

Fill Lines

A fill line pairs a label and a value, separated by exactly five dots: ...... Consecutive fill lines are grouped together, similar to tasks.

Current Weather.....20F
Current Precipitation Chance.....89%

A run of four or six dots is not a separator and is left as ordinary text. Either side may contain !name variables, which are interpolated the same way as elsewhere in the document.

Current Weather.....!current

Variables

A variable is written as !name, where the name may contain letters, numbers, and underscores. When a template is exported, each variable is replaced with the value you provide (or its configured default).

# !day Checklist
[] Email !owner the report

Each variable's type is inferred from how it is used:

TypeInferred when
textThe variable is used inside a line — a header, task label, or paragraph. Its value must be a string.
yes / noThe variable is used as a condition (see Conditionals below). Its value must be a boolean.
conflictThe same name is used both as text and as a condition. No single value can satisfy both uses, so the conflict must be resolved.

Substituted values are inserted literally — they are never re-parsed as markup. A variable that is referenced but not provided, or provided with the wrong type, prevents the document from resolving.

Conditionals

A condition uses a boolean variable to include or exclude content. It is written as !name && …. When the variable is true, the governed content is included; when false, it is dropped entirely.

Inline form

The rest of the line after && is the single item governed by the condition.

!includeNotes && [] Review meeting notes

Block form

Follow && with { to govern every line up to a closing } on its own line.

!weekend && {
[] Sleep in
[] Go for a long walk
}

The condition variable must be a boolean. The block must be closed with }, otherwise an error is reported.