Create terminal-based presentation slides using presenterm's markdown format with themes, diagrams, code highlighting, and more
100
Does it follow best practices?
Validation for skill structure
Create presentations in presenterm's markdown format — a tool that renders markdown files as rich slides directly in the terminal.
Output: A single .md file that the user runs with presenterm slides.md.
For detailed references, see:
---
title: "My Presentation Title"
sub_title: Optional subtitle
author: Author Name
theme:
name: dark
---Generates an introduction slide automatically. All fields optional.
For multiple authors use authors: array.
<!-- end_slide -->Not ---. Use <!-- end_slide --> consistently.
My Slide Title
===Setext headers render centered with special styling. ATX headers (# H1) render
as normal headings within a slide — NOT as slide titles.
| Command | Purpose |
|---|---|
<!-- end_slide --> | End current slide, start next |
<!-- pause --> | Content below appears on next keypress |
<!-- jump_to_middle --> | Vertically center subsequent content |
<!-- new_line --> / <!-- new_lines: N --> | Insert blank lines |
<!-- column_layout: [3, 2] --> | Define column layout with proportional widths |
<!-- column: 0 --> | Switch to column (zero-indexed) |
<!-- reset_layout --> | End column layout |
<!-- incremental_lists: true --> | Each bullet on separate keypress |
<!-- alignment: center --> | Align text: left, center, right |
<!-- speaker_note: Your note --> | Speaker note (visible in presenter mode) — no colons or em dashes inside the note text |
<!-- font_size: 2 --> | Font size 1-7 (kitty terminal only) |
<!-- no_footer --> | Hide footer on this slide |
<!-- include: other.md --> | Include content from another file |
User comments (ignored): <!-- // note --> or <!-- comment: note -->
<!-- column_layout: [2, 1] -->
<!-- column: 0 -->
Left content (2/3 width)
<!-- column: 1 -->
Right content (1/3 width)
<!-- reset_layout -->Sizing: [2, 1] = total 3 units. Use [1, 1] for halves, [1, 3, 1] to center.
Standard fenced code blocks with language identifiers. Key features:
Selective highlighting: ```rust {1,3,5-7} highlights specific lines.
Dynamic highlighting: ```rust {1,3|5-7|all} — each group on successive keypress.
Attributes: +exec (executable), +line_numbers, +no_background, +render (diagrams/LaTeX), +exec_replace, +acquire_terminal.
Hidden lines: Prefix with # to hide from display but include in execution.
External snippets:
```file +exec +line_numbers
path: snippet.rs
language: rust
start_line: 5
end_line: 10
```Static images: 
Image sizing:  or 
Diagrams: Use +render attribute on fenced code blocks.
mermaid +render) — flowcharts, sequences, ER, state, class, Gantt, pie, mindmap. See references/mermaid.md.d2 +render) — architecture, styled diagrams, SQL tables, containers. See references/d2.md.latex +render / typst +render) — inline formulas.Use D2 for polished architecture diagrams. Use Mermaid for variety (Gantt, mindmaps, pie charts).
Diagram sizing: Keep 5-10 nodes max. Use LR for wide, TD for tall. Match dark themes.
Set in frontmatter: theme: { name: catppuccin-mocha }.
Safe defaults: catppuccin-mocha, dark. Use terminal-dark to inherit terminal colors.
Available: catppuccin-{latte,frappe,macchiato,mocha}, dark, light, gruvbox-dark,
terminal-{dark,light}, tokyonight-{storm,moon,day,night}.
For overrides, footers, palettes, and colored text see references/themes.md.
Manual: <!-- pause --> between content blocks.
Lists: <!-- incremental_lists: true --> before bullet list.
presenterm slides.md # Development mode (hot reload)
presenterm -p slides.md # Presentation mode
presenterm -x slides.md # Enable code execution
presenterm -e slides.md # Export to PDF
presenterm -E slides.md # Export to HTML
presenterm -P slides.md # Publish speaker notespresenterm reads config.yaml from a platform-specific directory — not ~/.config on macOS:
| OS | Config directory |
|---|---|
| macOS | ~/Library/Application Support/presenterm/ |
| Linux | ~/.config/presenterm/ (or $XDG_CONFIG_HOME/presenterm/) |
If mermaid +render or d2 +render blocks show as plain code, the renderers are likely installed but the config is missing or in the wrong location. Create config.yaml in the correct directory:
snippet:
render:
threads: 4
mermaid:
scale: 2
d2:
scale: 2Requires mmdc (Mermaid CLI) and d2 installed and on $PATH. Install with:
npm install -g @mermaid-js/mermaid-cli # mmdc
brew install d2 # d2options:
end_slide_shorthand: true # Allow --- as slide separator
implicit_slide_ends: true # Auto-end slides on headings
command_prefix: "cmd:" # Require prefix for commands---
title: "**Streaming** Data with _Kafka_"
sub_title: A quick introduction
author: Viktor Gamov
theme:
name: catppuccin-mocha
override:
footer:
style: template
right: "{current_slide} / {total_slides}"
height: 2
---
Why Streaming?
===
Every business is becoming a real-time business.
<!-- pause -->
Batch processing means **hours of delay**.
Event streaming means **milliseconds**.
<!-- end_slide -->
What is Kafka?
===
<!-- incremental_lists: true -->
* **Producers** send events to topics
* **Consumers** read events from topics
* **Brokers** store and replicate the data
<!-- end_slide -->
<!-- jump_to_middle -->
Demo Time
===
<!-- end_slide -->
Producer Code
===
```java {1-3|5-8|10-13|all}
import org.apache.kafka.clients.producer.*;
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
Producer<String, String> producer =
new KafkaProducer<>(props);
producer.send(new ProducerRecord<>(
"my-topic", "key", "value"
));
producer.close();Thank you! Questions?
---
## Writing Guidelines
1. **Start with frontmatter** — Always include title, author, and theme.
2. **Use `<!-- end_slide -->`** consistently — Don't mix separators.
3. **Setext headers for titles** — `Title\n===` not `# Title`.
4. **Narrative Arc** — Setup, confrontation, resolution. See [design patterns](references/design-patterns.md).
5. **Progressive reveal** — Use pauses, incremental lists, dynamic highlighting.
6. **Column layouts** for side-by-side content.
7. **`<!-- jump_to_middle -->`** for section breaks.
8. **Speaker notes** — Script demos and mark cuttable sections. **Never use `:` (colons) or `—` (em dashes) inside speaker note text** — presenterm parses the comment value as YAML and will throw `mapping values are not allowed` errors. Use `-` (hyphen) instead of both.
9. **One idea per slide** — Avoid bullet walls.
10. **Dynamic code highlighting** — `{1-3|5-8|all}` to walk through code.
11. **Diagrams over text** — Mermaid for flowcharts, D2 for architecture.
12. **Match theme colors** in diagrams.
13. **Save as `.md`** — User runs with `presenterm filename.md`.Install with Tessl CLI
npx tessl i gamussa/presenterm