Skip to content

Content

This document explains the content format, markdown extensions and page structure for novem documents.

AI-assisted, human-approvednovem uses AI to review and keep our documentation up to date.

Content file

The content file /v1/vis/docs/<id>/content expects information to be supplied in novem markdown with document-specific extensions. For the endpoints surrounding the content file (config, assets, sharing, and output formats) see the document API.

Frontmatter

Documents support YAML frontmatter at the beginning of the content file. Frontmatter is enclosed between --- delimiters and supplies document metadata. It does not create a page.

---
title: Quarterly Performance Report
author: Analytics Team
date: 2026-09-30
---

Identifier keys are available as $key in text and --doc-meta-key in CSS. Common fields include title, author, date, and subtitle. Use size: a4, letter, legal, or custom millimetre dimensions; margins accepts a uniform value such as 20mm or spacing tokens such as t4 b2 x3. Presentation mode is 16:9 and rejects size. Select the rendering mode and theme through the config endpoints.

Write {{ frontpage }} to display a cover from frontmatter. A bare frontpage uses title, subtitle, author, and date; explicit fields override them.

Standard markdown

Novem documents support standard markdown including headings, paragraphs, bold, italic, lists, code blocks, blockquotes, tables and thematic breaks.

In addition, novem extends standard markdown with:

  • _underline_ — underlines text (note: _ is underline, not italic)
  • *italic* — only * produces italic
  • **bold** — standard bold
  • ~~strikethrough~~ — strikethrough
  • ^superscript^ — superscript
  • ~subscript~ — subscript (single ~, not ~~)
  • `inline code` — inline code

Pages

A document's content starts with a page declaration: {{ frontpage }} for a cover, {{ tocpage }} for a contents page, or {{ page }}. Each {{ page }} starts a new page with its own orientation and columns. Frontmatter never creates a page. Content before the first declaration is ignored, with one exception: {{ header }} and {{ footer }} blocks with cascade: true, which become the document's running bands. Ignored headings and embeds do not enter the contents or the page references.

A source with no page declaration at all is rendered as a single page laid out from the frontmatter's page keys and autopaginated across sheets. Mail keeps its single flow and does not require a page declaration.

{{ page }}

# First page content

{{ page
orientation: landscape
cols: 2
}}

# Second page content (landscape, 2 columns)

{{ page }}

# Third page content (default layout)

See Pages for every page option.

Heading config

Headings can carry layout configuration using a trailing {key:val} syntax:

## Regional Performance {colspan:all; fg: blue-700}

This attaches metadata to the heading without displaying the config in the rendered output. Configuration uses key:value pairs separated by commas, semicolons, or newlines.

Blocks

Blocks embed visuals and control layout. The grammar is on the Blocks page; one page per block:

  • Blocks — grammar and the styling keys every block shares
  • Pages — pages, covers, contents, running headers and footers
  • Layout — page columns and colspan: all, cols/col, box, layout pages with area:
  • Tables — the table block and its in-table charts
  • KPI tiles — headline figures as tiles
  • Visualisation — embed novem plots, grids and documents
  • Images — assets, fill, fit and bleed
  • Page references — live page numbers of headings
  • Variables — inline live values
  • Spans — footnotes, references and colour spans
  • Math and equations — enable KaTeX and write inline or display equations
  • Paragraph — styled text blocks
  • Callout — info, warning and error callout boxes
  • HTML — sanitized HTML