Terminal-based presentations from Markdown files using PowerShell.
Install-Module Deck -Scope CurrentUserOr clone from GitHub:
git clone https://github.com/jakehildreth/Deck.git
Import-Module ./Deck/Deck.psd1Create a Markdown file:
---
background: Black
foreground: Cyan1
border: Blue
---
# My Presentation
---
## Section Title
---
### Slide Content
Your content here with **bold** and *italic* text.
* Progressive bullets
* Reveal one at a timeRun the presentation:
Show-Deck -Path ./presentation.mdOr load directly from a web URL:
Show-Deck -Path https://exampledeck.jakehildreth.comValidate content before presenting:
Show-Deck -Path ./presentation.md -StrictThe -Strict parameter validates:
- Content height doesn't exceed viewport
- Local image files exist (web image URLs are not validated)
- Reports all errors before starting
Start from a specific slide:
Show-Deck -Path ./presentation.md -StartSlide 5- Title Slides - Single
#heading with no body, large centered figlet text - Section Slides - Single
##heading with no body, medium centered figlet text - Content Slides -
#,##, or###heading with body content (H1/H2 headings render as figlet above the body), or body with no heading - Image Slides - Two-panel layout with content left (60%), image right (40%)
- Multi-Column Slides - Split content with
|||delimiter (delimiter must be on its own line), with progressive bullet support per column - Syntax Highlighting - Fenced code blocks with language-aware highlighting via TextMate
Tables, code blocks, and images can appear within any content, image, or multi-column slide.
An H1 or H2 heading followed by body content renders the heading as figlet text above the body:
## H2 With Progressive Bullets
* First point revealed on entry
* Second point revealed on next keypressA # or ## heading alone (no body) is still a title or section slide.
Create side-by-side layouts with text and images:
### Slide Title
Text content on the left.
* Progressive bullets supported
* Auto-sized images
{width=80}Images are auto-detected. Use relative or absolute paths. Optional {width=N} sets max width.
Web images are supported:

### About Our Brand
Content appears hereMarkdown tables render as rounded Spectre.Console tables:
### Slide Title
| Name | Role | Status |
|-------|----------|-------|
| Alice | Engineer | Active |
| Bob | Designer | Active |Tables work on content slides, image slides, and multi-column slides.
Inline markup renders inside table cells: **bold**, _italic_, `code`, ~~strikethrough~~, colors, and links. A leading - or * (marker + space) in a cell renders as a • bullet; data like -5% (no space) stays literal. See Examples/Features/TableCellMarkupTest.md.
Fenced code blocks with a language identifier get automatic syntax highlighting powered by TextMate:
```powershell
Get-Process | Where-Object CPU -gt 100
```Renders in a rounded panel with language header and full color tokenization. Supports 60+ languages including PowerShell, Python, C#, JavaScript, Rust, Go, SQL, YAML, and more. Falls back to plain monochrome when a language grammar isn't available.
- Progressive bullets using
*— revealed one at a time with each forward keypress; navigating backward un-reveals one at a time - Static bullets using
-— all visible immediately on slide entry
Both styles work in content, image, and multi-column slides; each column in a multi-column slide reveals its own bullets.
**bold**or__bold__*italic*or_italic_`code`~~strikethrough~~[link text](https://url)— clickable hyperlink<colorname>text</colorname>or<span style="color:colorname">text</span>for colors
Markdown links become clickable hyperlinks in terminals that support OSC 8 (Windows Terminal, iTerm2, Ghostty, WezTerm). Elsewhere they degrade to plain display text. Links work in body text and in table cells.
Spectre.Console exposes no strikethrough capability flag, so Deck detects support heuristically from WT_SESSION / TERM_PROGRAM / TERM and warns once per session when ~~text~~ is used in a terminal not known to support it. Override detection with the DECK_STRIKETHROUGH environment variable (true or false).
This text has <red>red</red>, <blue>blue</blue>, and <green>green</green> colors.
You can use standard HTML: <span style="color:yellow">yellow text</span>
Mix with formatting: **<red>bold red text</red>** or *<blue>italic blue</blue>*Supports all Spectre.Console color names.
- Forward: Right, Down, Space, Enter,
n, Page Down - Backward: Left, Up, Backspace,
p, Page Up - Exit: Esc, Ctrl+C,
q - Help:
?
The first slide shows a [press ? for help] hint in place of pagination. After the last slide an "End of Deck" screen is shown — press any backward key to return to the last slide, or Esc / q / Ctrl+C to exit.
Configure in YAML frontmatter:
---
background: black # Background color
foreground: white # Text color
border: magenta # Border color
borderStyle: rounded # rounded, square, double, heavy, none
pagination: false # Show slide numbers
paginationStyle: minimal # minimal, fraction, text, progress, dots
h1: default # Figlet font for # titles (aliases: titleFont, h1Font)
h2: default # Figlet font for ## sections (aliases: sectionFont, h2Font)
h3: default # Figlet font for ### headers (aliases: headerFont, h3Font)
h1Color: null # Color for # titles (aliases: titleColor, h1FontColor)
h2Color: null # Color for ## sections (aliases: sectionColor, h2FontColor)
h3Color: null # Color for ### headers (aliases: headerColor, h3FontColor)
autoAdvance: 0 # Milliseconds per state tick (0 = disabled)
---paginationStyle options:
| Value | Example |
|---|---|
minimal |
5 |
fraction |
5/10 |
text |
Slide 5 of 10 |
progress |
█████░░░░░ |
dots |
○ ○ ● ○ ○ |
Figlet font names for h1, h2, and h3 must match one of the 25 bundled fonts. See Examples/Features/FontShowcase.md for a visual preview.
Bundled fonts: 04B_03__ 04B_03B_ 04B_08__ 04B_09__ 04B_11__ 04B_19__ 04B_20__ 04B_21__ 04B_24__ 04B_25__ 5by5 blocco Bytesized-Regular JacquardaBastarda9-Regular lisp-system-tools Micro5-Regular mini negative-quinpix PressStart2P Silkscreen Sixtyfour-Regular-VariableFont_BLED,SCAN small super-mario-brothers-3-all-stars Tiny5 TinyUnicode
Heading colors can be specified three ways:
- Inline HTML tags (highest priority):
# <red>Red Title</red>
## <cyan>Cyan Section</cyan>
### <green>Green Header</green>- Frontmatter settings:
h1Color: red
h2Color: cyan
h3Color: green- Foreground fallback (if neither above is specified)
Both <colorname>text</colorname> and <span style="color:colorname">text</span> syntax are supported.
Any slide can override global frontmatter settings with HTML comments in the slide body. Overrides apply only to that slide.
### My Slide
<!-- paginationStyle: dots -->
<!-- border: cyan -->
<!-- h1: PressStart2P -->
Slide content here.Supported keys: pagination, paginationStyle, h1, h2, h3, h1Color, h2Color, h3Color, border, borderStyle, autoAdvance.
Set <!-- autoAdvance: 0 --> on a slide to disable a global timer for that slide only.
See Examples/Features/OverrideTest.md for examples.
Set autoAdvance in frontmatter to advance the presentation automatically on a timer (milliseconds):
---
autoAdvance: 3000
---Each timer tick fires a Next action: reveals the next progressive bullet if any are hidden, otherwise advances to the next slide. The timer resets after every state change. Manual navigation always works regardless of the timer.
Override per slide:
### Fast Slide
<!-- autoAdvance: 400 -->
Advances after 400ms — useful for fade simulations.
---
### Pause Here
<!-- autoAdvance: 0 -->
Auto-advance disabled. Manual input required.See Examples/Features/AutoAdvanceTest.md for a working demo.
A slide containing only <!-- intentionally blank --> renders with no heading, content, or pagination:
---
<!-- intentionally blank -->
---See Examples/ExampleDeck.md for a comprehensive demo:
Show-Deck -Path ./Examples/ExampleDeck.mdAdditional examples in Examples/Features/:
- ColorTest.md - Inline color text examples
- HeadingColorsTest.md - Heading color examples
- ImageTest.md - Image slide layouts
- MultiColumnTest.md - Multi-column layouts
- BulletTest.md - Bullet reveal behavior
- TitleTest.md - Title and section slides
- TableTest.md - Markdown table rendering
- TableCellMarkupTest.md - Inline markup inside table cells
- LinkTest.md - Clickable links and strikethrough warning
- HeadingMixingTest.md - H1/H2 headings with body content
- MultiColumnBulletsTest.md - Progressive bullets in multi-column slides
- SyntaxHighlightTest.md - Code block syntax highlighting
- AutoAdvanceTest.md - Auto-advance timer with per-slide overrides
- PowerShell 7.4 or later
- TextMate (auto-installed if missing; transitively loads PwshSpectreConsole)
- Windows, Linux, or macOS (Apple Silicon only — x64 Intel macOS is not supported)
MIT License w/Commons Clause - see LICENSE file for details.
- PowerShell
- TextMate
- PwshSpectreConsole
- Spectre.Console
Made with 💜 by Jake Hildreth
