JSON Authoring¶
Top-level shape¶
Every deck starts with a presentation object containing metadata and slides.
{
"presentation": {
"metadata": {
"title": "Quarterly Review",
"theme": "default"
},
"slides": []
}
}
Metadata¶
Common metadata fields:
title: required deck titleauthor,description: optional descriptive metadatatheme:default,light,dark,academic,minimalaspectRatio:16:9or4:3controls.slideNumbers,controls.progress,controls.showNotescustomTheme.colorsandcustomTheme.fonts
Slides¶
Each slide can define:
id: stable identifier for deep links and audit outputtitle: overview titlelayout:single-column,two-column,title, orblankbackground: hex color or image pathtransition:slide,fade,convex,concave, orzoomspeakerNotes: presenter noteselements: slide content
Element types¶
text: Markdown-rich prose and headingsbullets: flat or nested lists, with optional per-itemanimationimage: image withsrc,alt, optionalcaption,width, andheightmermaid: inline Mermaid diagramscallout: highlighted content blockscode: syntax-highlighted code blockstable: structured tabular data
Authoring guidance¶
- Prefer percentage image widths such as
55%on shared media slides. - Keep
alttext on every image. - Use
speakerNotesfor delivery notes instead of embedding presenter-only copy in slide text. - Keep fragment counts low. Heavy reveal sequences are flagged by advisory warnings.
Fragment animation¶
- Top-level
animationworks ontext,bullets,image,mermaid,callout,code, andtableelements. - Bullet lists can animate as a whole, or individual bullet items can animate separately.
- Use
animation.indexto control reveal order across mixed content, such as bullets followed by a code block and then a callout.
{
"elements": [
{
"type": "bullets",
"items": [
{ "text": "First point", "animation": { "fragment": true, "index": 0 } },
{ "text": "Second point", "animation": { "fragment": true, "index": 1 } }
]
},
{
"type": "code",
"code": "npm test",
"language": "bash",
"animation": { "fragment": true, "type": "zoom", "index": 2 }
},
{
"type": "callout",
"calloutType": "tip",
"content": "Discuss the test output here.",
"animation": { "fragment": true, "type": "fade", "index": 3 }
}
]
}
Markdown support¶
text, bullets, callout, caption, and similar content fields support Markdown. The renderer also supports:
- fenced code blocks
- inline code
- GitHub-style alerts such as
> [!TIP] - inline and display LaTeX math
Example¶
{
"id": "architecture",
"title": "Architecture Overview",
"layout": "two-column",
"speakerNotes": "Walk the audience left to right.",
"elements": [
{
"type": "bullets",
"items": ["Parser", "Validator", "Renderer", "Browser audit"],
"position": { "area": "left" }
},
{
"type": "mermaid",
"diagram": "graph TD\n A[JSON] --> B[Validate]\n B --> C[Render]",
"position": { "area": "right" }
}
]
}