A little tool to present Markdown slide decks
  • Go 99.7%
  • Makefile 0.3%
Find a file
2026-04-08 20:25:20 +02:00
internal feat: Quotes and Themes 2026-04-08 20:22:13 +02:00
themes feat: Quotes and Themes 2026-04-08 20:22:13 +02:00
.gitignore fix: amend security concerns regarding sockets 2026-04-05 13:56:50 +02:00
.pre-commit-config.yaml feat: Initial Commit of Clides 2026-04-05 12:52:56 +02:00
CLAUDE.md feat: Add Image support 2026-04-08 19:47:57 +02:00
demo.md feat: Quotes and Themes 2026-04-08 20:22:13 +02:00
go.mod feat: Quotes and Themes 2026-04-08 20:22:13 +02:00
go.sum feat: Quotes and Themes 2026-04-08 20:22:13 +02:00
LICENSE Initial commit 2026-04-05 11:34:32 +02:00
main.go feat: Add Image support 2026-04-08 19:47:57 +02:00
Makefile feat: Initial Commit of Clides 2026-04-05 12:52:56 +02:00
README.md update readme 2026-04-08 20:25:20 +02:00
renovate.json feat: Initial Commit of Clides 2026-04-05 12:52:56 +02:00

clides

A terminal-based Markdown slide deck presenter with multi-terminal sync support.

Features

  • Renders Markdown slides full-screen in the terminal using tcell
  • Supports headings, bold, italic, inline code, fenced code blocks with syntax highlighting, bullet lists, blockquotes, and images
  • Slides separated by --- horizontal rules
  • Navigate with keyboard or a USB slide presenter (Logitech R400 and compatible)
  • Blank-screen toggle for the presenter's black-out button
  • Multi-terminal sync — a follower window mirrors the host in real time, navigation works from either side
  • Theming via TOML — colors, margins, line spacing, bullet character, heading decorations
  • Bundled themes: dark (default), light, dracula, nord, solarized-dark
  • Image rendering: native resolution on Kitty-protocol terminals (WezTerm, kitty), half-block fallback everywhere else

Installation

Requires Go 1.21+.

git clone https://github.com/okautz/clides
cd clides
make

The clides binary is placed in the current directory. Copy it to somewhere on your $PATH if desired.

Usage

# Present a deck (shorthand)
clides deck.md

# Present a deck with a custom theme
clides --theme themes/dracula.toml deck.md

# Open a second terminal and follow the running presentation
clides follow

Multi-terminal sync

Start the host in one terminal:

clides deck.md

Open a second terminal (e.g. on a projector or a secondary screen) and run:

clides follow

If multiple presentations are running, clides lists them and lets you choose. Navigation works from either terminal — advancing on one immediately updates the other.

Slide format

Slides are standard Markdown separated by ---:

# First Slide

Some *italic* and **bold** text.

> A blockquote stands out with a colored bar on the left.

---

## Code with Syntax Highlighting

Annotate the opening fence with a language name:

```go
func greet(name string) string {
    return "Hello, " + name
}
```

---

## Slide with an Image

![A diagram](./diagram.png)

Supported block elements:

Syntax Result
# / ## / ### Headings (H1 centered, H2 centered, H3 centered)
- item or * item Unordered bullet list
```lang … ``` Fenced code block; add a language name for syntax highlighting
> text Blockquote with a colored vertical bar
![alt](path) Image (on its own line)

Supported inline elements: **bold**, *italic*, `code`.

Syntax highlighting

Add a language identifier to the opening fence:

```python
words = ["hello", "world"]
print(" ".join(words))
```

clides uses chroma and supports the same language identifiers (e.g. go, python, rust, bash, yaml, json, …). If the language is unknown or omitted, the block renders in the plain code style without highlighting.

Token colors are controlled by the five syn_* keys in the theme (see Theming).

Blockquotes

> This is a blockquote.
> It can span multiple lines.

Each line starting with > is rendered with a colored bar on the left and the text in an italic quote color. Inline formatting (**bold**, italic, `code`) works inside blockquotes.

Images

Place an image on its own line using standard Markdown syntax:

![Alt text](./path/to/image.png)

Paths are relative to the deck file. PNG and JPEG are supported.

Rendering quality depends on the terminal:

Terminal Rendering
WezTerm, kitty, iTerm2 Native resolution via Kitty graphics protocol
All other terminals Unicode half-block characters with true color

Images are pre-encoded in the background at startup so navigating to an image slide is instant.

Navigation

Action Keys
Next slide Space Page Down n
Previous slide Backspace Page Up p
Jump to slide N type N then Enter
Blank screen b . (. is sent by the Logitech R400 black-out button)
Quit q Esc

Theming

clides looks for a theme file at ~/.config/clides/theme.toml automatically. Pass a different file with --theme.

A theme file is TOML and all fields are optional — omitted keys fall back to the built-in dark defaults.

[colors]
background = "black"    # W3C color name or #rrggbb hex
foreground = "white"
h1         = "aqua"
h2         = "teal"
h3         = "silver"
bold       = "white"
italic     = "white"
code_fg    = "lime"
code_bg    = "#111118"  # keep this close to background for a subtle code box
bullet     = "yellow"
counter    = "gray"

# Syntax highlighting — token category colors inside language-tagged code blocks
syn_keyword = "#ff79c6"
syn_string  = "#f1fa8c"
syn_comment = "#6272a4"
syn_literal = "#bd93f9"  # numbers, booleans, other literals
syn_type    = "#8be9fd"  # types, function names, builtins

# Blockquote colors
quote_fg  = "#8be9fd"   # quote text color (rendered italic)
quote_bar = "#bd93f9"   # the │ bar on the left

[layout]
margin       = 0.15   # horizontal margin as a fraction of terminal width (0.00.5)
line_spacing = 0      # extra blank rows inserted after each content line

[bullets]
char = "•"            # any character or emoji

[headings]
h1_uppercase = false  # render H1 text in uppercase
h1_underline = false  # draw a ─── rule beneath H1
h2_underline = false

Bundled themes

File Style
themes/dark.toml Dark (matches built-in defaults)
themes/light.toml Light — black text on white
themes/dracula.toml Dracula
themes/nord.toml Nord
themes/solarized-dark.toml Solarized Dark

Use any of them as a starting point for your own theme:

cp themes/dracula.toml ~/.config/clides/theme.toml

License

MIT