presenterm

A terminal slideshow tool that lets you create and present slides written in Markdown, with syntax highlighting, images, and smooth transitions.

Screenshot of presenterm

presenterm is a terminal-based slideshow tool. Presentations are written as a single Markdown file β€” each slide separated by a horizontal rule β€” and rendered directly in your terminal with syntax-highlighted code blocks, images (via the Kitty graphics protocol, iTerm2, or Sixel), and optional speaker notes.

If you live in the terminal and would rather write slides in your editor than wrestle with Keynote or Google Slides, presenterm is the tool for you.

Features

  • Markdown-based β€” write slides in plain Markdown; no proprietary format, no GUI required
  • Syntax highlighting β€” code blocks are highlighted using the same engine as bat, supporting hundreds of languages
  • Image support β€” display images inline using the Kitty graphics protocol, iTerm2 inline images, Sixel, or Überzug++
  • Themes β€” ships with several built-in themes and supports fully custom themes defined in YAML
  • Speaker notes β€” add notes to any slide that are visible to you but not your audience
  • Slide index β€” jump to any slide instantly with a built-in index view
  • Export to PDF β€” export your presentation to a PDF file for sharing
  • Auto-reload β€” automatically reloads the presentation when the source file changes, so you can edit and present simultaneously
  • Incremental lists β€” reveal bullet points one at a time for a step-by-step feel

Installation

cargo install presenterm

Or via your system package manager:

# Debian / Ubuntu (Debian 13+)
apt install presenterm

# Fedora
dnf install presenterm

# macOS
brew install presenterm

# Arch Linux
pacman -S presenterm

# Nix
nix-env -iA nixpkgs.presenterm

Writing a Presentation

A presentation is a single .md file. Slides are separated by ---:

---
theme:
  name: dark
---

# My Presentation

A subtitle or tagline here

<!-- end_slide -->

---

## Agenda

- Introduction
- Demo
- Q&A

<!-- end_slide -->

---

## Code example

```rust
fn main() {
    println!("Hello from presenterm!");
}
```

<!-- end_slide -->

---

## Thank you

Questions?

Usage

# Present a file
presenterm slides.md

# Start in a specific slide
presenterm slides.md --initial-slide 3

# Export to PDF
presenterm --export-pdf output.pdf slides.md

# Validate the presentation without displaying it
presenterm --validate slides.md

Keybindings

KeyAction
β†’ / l / Space / nNext slide
← / h / pPrevious slide
ggGo to first slide
GGo to last slide
<number>GGo to slide number
tOpen slide index
?Show help
q / Ctrl+cQuit

Themes

Presenterm ships with several built-in themes. Specify one in your presentation's front matter:

---
theme:
  name: catppuccin-mocha
---

Available built-in themes include dark, light, catppuccin-mocha, catppuccin-latte, tokyo-night, gruvbox-dark, and more. You can also define a fully custom theme in a separate YAML file and reference it by path.

Speaker Notes

Add speaker notes to any slide using an HTML comment β€” they are visible in a separate pane during the presentation but never shown to the audience:

## My Slide

Some content here.

<!-- speaker_note
Remember to demo the live example here.
Mention the benchmark numbers from the README.
-->