Markdown Specification
This document describes the Markdown syntax supported by figdeck.
Slide Separator
Section titled “Slide Separator”Use --- (thematicBreak, horizontal rule) to separate slides.
# Slide 1
Content
---
# Slide 2
ContentYAML Frontmatter
Section titled “YAML Frontmatter”YAML frontmatter allows you to configure slide settings. There are two types of configurations:
Global Settings
Section titled “Global Settings”Settings at the very beginning of the file (before any content) apply to all slides as defaults.
---figdeck: truebackground: "#1a1a2e"color: "#ffffff"transition: dissolve---
# First Slide
---
## Second SlideIn this example, all slides will have the dark background, white text, and dissolve transition.
Per-Slide Settings
Section titled “Per-Slide Settings”Settings placed immediately after a slide separator (---) apply only to that specific slide, overriding any global settings.
---background: "#1a1a2e"transition: dissolve---
# First Slide
Uses global settings (dark background, dissolve)
---background: "#ffffff"color: "#000000"transition: slide-from-right---
## Second Slide
This slide has white background, black text, and slides from right
---
## Third Slide
Back to global settings (dark background, dissolve)Available Settings
Section titled “Available Settings”| Setting | Description |
|---|---|
figdeck | Enable VSCode extension features (true/false) |
cover | Treat the first slide as a cover (true/false, default: true) |
background | Unified background: color, gradient, image, template, or Figma component |
color | Base text color |
headings | Heading styles (h1, h2, h3, h4) |
paragraphs | Paragraph styles |
bullets | Bullet point styles |
code | Code block styles |
fonts | Custom font configuration |
align | Horizontal alignment (left, center, right) |
valign | Vertical alignment (top, middle, bottom) |
transition | Slide transition animation |
slideNumber | Slide number configuration |
titlePrefix | Title prefix component |
See specific sections below for detailed configuration options.
Headings
Section titled “Headings”H1 (#) - Title Slide
Section titled “H1 (#) - Title Slide”Headings starting with # create title slides.
Font size is 64px and displayed large.
# Presentation TitleH2 (##) - Content Slide
Section titled “H2 (##) - Content Slide”Headings starting with ## create content slides.
Font size is 48px.
## AgendaH3 and below (###, ####, …)
Section titled “H3 and below (###, ####, …)”Headings H3 and below are displayed as sub-headings within the slide content.
Body Text
Section titled “Body Text”Paragraph text is displayed as body content on the slide. Multiple paragraphs are displayed separated by line breaks.
## Slide Title
This is body text.
This is also added to the body.Bullet Points
Section titled “Bullet Points”Lists (-, *, + or numbers) are displayed as bullet points.
Unordered List
Section titled “Unordered List”Displayed with • at the beginning.
## Features
- Fast- Simple- ExtensibleOrdered List
Section titled “Ordered List”Lists starting with numbers are displayed as numbered lists.
You can specify the starting number with the start attribute.
1. First step2. Next step3. Last stepNested Lists
Section titled “Nested Lists”Lists can be nested by indenting with 2 spaces. Bullet markers change by nesting level:
- Level 0:
•(U+2022) - Level 1:
◦(U+25E6) - Level 2:
▪(U+25AA) - Level 3+:
–(U+2013)
## Nested Example
- Parent item - Child item (2 spaces indent) - Grandchild item - Great-grandchild item- Back to parent levelBullet Spacing
Section titled “Bullet Spacing”You can customize the spacing between bullet items using the spacing property in YAML frontmatter:
---bullets: spacing: 16 # Gap between bullet items (default: 8px)---
## Wide Spacing
- Item 1- Item 2- Item 3The spacing value is in pixels. The default is 8px.
Inline Formatting
Section titled “Inline Formatting”The following formatting can be used within text:
- Bold:
**text**or__text__ - Italic:
*text*or_text_ Strikethrough:~~text~~(GFM)Inline code:`code`- Link:
[text](URL)
These can also be combined:
This is a test of **bold** and *italic* and ~~strikethrough~~.
`const x = 1` is inline code.
A [link to Figma](https://figma.com).Blockquote
Section titled “Blockquote”Lines starting with > are displayed as blockquotes.
Displayed with a gray border on the left and slightly muted color.
> This is a quoted text.> It can span multiple lines.Callouts
Section titled “Callouts”Callouts are styled message blocks for notes, tips, warnings, and cautions.
Use the :::note, :::tip, :::warning, or :::caution directive syntax:
:::noteThis is a note with important information.:::
:::tipA helpful tip for users.:::
:::warningBe careful with this feature.:::
:::cautionThis action is irreversible!:::Each callout type is displayed with a distinct color:
- Note (blue): General information or context
- Tip (green): Helpful suggestions or best practices
- Warning (orange): Important information to be aware of
- Caution (red): Critical warnings about potential issues
Callouts support inline formatting including bold, italic, links, and inline code:
:::tipUse `console.log()` for **debugging** purposes.Check the [documentation](https://example.com) for more details.:::Background
Section titled “Background”The background property is a unified configuration for all background types. It supports string format (auto-detected) or object format (explicit).
String Format (Auto-detect)
Section titled “String Format (Auto-detect)”---# Solid color (hex)background: "#1a1a2e"
# Gradientbackground: "#0d1117:0%,#1f2937:50%,#58a6ff:100%@45"
# Image (local path or URL)background: "./bg.png"background: "https://example.com/bg.png"
# Figma component (URL with node-id)background: "https://www.figma.com/design/YOUR_FILE_KEY?node-id=123-456"---Object Format (Explicit)
Section titled “Object Format (Explicit)”---background: color: "#1a1a2e" # Solid color gradient: "#000:0%,#fff:100%@45" # Gradient template: "Dark Mode" # Figma paint style name image: "./bg.png" # Image path or URL component: # Figma component link: "https://www.figma.com/design/xxx?node-id=123-456" fit: "cover" # cover | contain | stretch align: "center" # center | top-left | top-right | bottom-left | bottom-right opacity: 0.8 # 0-1---Combined Background
Section titled “Combined Background”Component can be combined with color/gradient/image backgrounds. The component renders as a layer on top:
---background: color: "#1a1a2e" component: link: "https://www.figma.com/design/xxx?node-id=123-456" opacity: 0.6---Priority
Section titled “Priority”When multiple properties are specified in object format: template > gradient > color > image
Component Fit Options
Section titled “Component Fit Options”| Value | Description |
|---|---|
cover | Scale to cover entire slide, may crop (default) |
contain | Scale to fit within slide, may have empty space |
stretch | Stretch to fill slide, ignores aspect ratio |
Component Align Options
Section titled “Component Align Options”When using cover or contain, you can specify alignment:
| Value | Description |
|---|---|
center | Center of slide (default) |
top-left | Top-left corner |
top-right | Top-right corner |
bottom-left | Bottom-left corner |
bottom-right | Bottom-right corner |
Limitations
Section titled “Limitations”- Component only works with nodes in the same Figma file (MVP limitation)
- Supported node types: Component, ComponentSet, Frame, Instance
- Recommended background size: 1920x1080 (slide dimensions)
Images
Section titled “Images”Images can be inserted using  format.
Remote Images
Section titled “Remote Images”Remote URLs (starting with http:// or https://) are fetched by the plugin and displayed via createImage (PNG/JPEG/GIF only).
Local Images
Section titled “Local Images”Local file paths (without URL scheme) are automatically detected by the CLI, read, base64 encoded, and sent to the plugin. Paths are resolved relative to the Markdown file.
Supported formats: .jpg, .jpeg, .png, .gif
Size limit: Default is 5MB. Files exceeding this are skipped with a warning.
Image Size (Marp-style)
Section titled “Image Size (Marp-style)”You can specify image dimensions using Marp-compatible syntax in the alt text:
 # Width 400px (height auto-calculated) # Height 300px (width auto-calculated) # Fixed size 400x300px # 50% of slide width (960px) # Size specification + alt textBehavior:
w:only: Height is calculated to maintain aspect ratioh:only: Width is calculated to maintain aspect ratio- Both specified: Uses exact dimensions (may not preserve aspect ratio)
- Percentage: Calculated based on slide width (1920px)
- No size specified: Default max constraints apply (400x300px)
Image Position (Absolute Placement)
Section titled “Image Position (Absolute Placement)”You can specify absolute x/y coordinates to place images at specific positions on the slide:
 # Position at (100px, 200px) # Center of slide (percentage) # Size + position combined # Size + position + alt textBehavior:
- When
x:ory:is specified, the image is placed at absolute coordinates instead of auto-layout flow - If only
x:is specified,ydefaults to 0 (and vice versa) - Percentage:
x:is calculated based on slide width (1920px),y:is calculated based on slide height (1080px) - Example:
x:50%= 960px,y:50%= 540px
Use cases:
- Overlay images on backgrounds
- Side-by-side layouts
- Precise logo or icon placement
- Complex multi-image compositions
Fallback
Section titled “Fallback”If image loading fails (file not found, network error, etc.), a placeholder is displayed. The alt text or URL is shown as a label.
Figma Selection Link
Section titled “Figma Selection Link”Using :::figma blocks, you can embed link cards to Figma nodes in slides.
For nodes in the same file, clicking jumps directly to that node.
Basic Syntax
Section titled “Basic Syntax”:::figmalink=https://www.figma.com/file/xxx/name?node-id=1234-5678:::Properties
Section titled “Properties”| Property | Required | Description |
|---|---|---|
link | Yes | Figma URL (with node-id parameter) |
x | - | Card X coordinate (auto-positioned if omitted) |
y | - | Card Y coordinate (auto-positioned if omitted) |
hideLink | - | Hide the clickable link label below preview (true) |
text.* | - | Text layer overrides (see below) |
Text Layer Overrides
Section titled “Text Layer Overrides”You can override text content in Figma components using text.* properties.
The * is replaced with the layer name (case-insensitive).
:::figmalink=https://www.figma.com/file/xxx?node-id=1234-5678text.title=Cart Featuretext.body=Use this for cart and confirmation flows.:::Rich text formatting is supported within text overrides:
:::figmalink=https://www.figma.com/file/xxx?node-id=1234-5678text.description=This is **bold** and *italic* text with a [link](https://example.com).:::Multiline text with bullet lists:
:::figmalink=https://www.figma.com/file/xxx?node-id=1234-5678text.content= - Variation A - Variation B - Variation C:::Supported formatting in text overrides:
- Bold:
**text** - Italic:
*text* - Strikethrough:
~~text~~ - Links:
[text](url) - Bullet lists:
- item - Blockquotes:
> quote(displayed as quoted italic text)
Note: Code blocks are not supported in text overrides due to Figma text layer limitations.
Position Specification Example
Section titled “Position Specification Example”:::figmalink=https://www.figma.com/file/xxx?node-id=1234-5678x=160y=300:::Behavior
Section titled “Behavior”- Same file: If
node-idexists in the current file, the component is cloned as a preview with clickable link - Other file: For different files, shows a link card with URL hyperlink
- Node not found: If the specified
node-idis not found, a warning is shown and URL fallback is used - Text overrides: Text layers matching
text.*layer names are updated with the specified content and formatting
Supported URL Formats
Section titled “Supported URL Formats”https://www.figma.com/file/<fileKey>/<name>?node-id=<nodeId>https://www.figma.com/design/<fileKey>/<name>?node-id=<nodeId>https://figma.com/file/<fileKey>?node-id=<nodeId>
The node-id parameter supports 1234-5678, 1234:5678, or URL-encoded format 1%3A2.
Tables (GFM)
Section titled “Tables (GFM)”GitHub Flavored Markdown table syntax is supported.
| Feature | Description ||---------|-------------|| Parse | Analyze Markdown || Convert | Convert to Figma Slides |Alignment can also be specified:
| Left | Center | Right ||:-----|:------:|------:|| Text | Text | Number |Multi-Column Layouts
Section titled “Multi-Column Layouts”Using :::columns blocks, you can create multi-column layouts (2-4 columns).
Basic Syntax
Section titled “Basic Syntax”:::columns:::columnLeft column content:::columnRight column content:::Properties
Section titled “Properties”| Property | Default | Description |
|---|---|---|
gap | 32 | Gap between columns in pixels (max: 200) |
width | even | Column widths (fr, %, or px values separated by /) |
Two-Column Layout
Section titled “Two-Column Layout”:::columns:::column### Features
- Fast rendering- Live preview- Easy to use
:::column### Benefits
- Save time- Consistent design- Version control friendly:::Three-Column Layout
Section titled “Three-Column Layout”:::columns:::column**Step 1**
Planning:::column**Step 2**
Development:::column**Step 3**
Deployment:::Four-Column Layout
Section titled “Four-Column Layout”:::columns:::columnQ1: $1.2M:::columnQ2: $1.8M:::columnQ3: $2.1M:::columnQ4: $2.5M:::Custom Gap
Section titled “Custom Gap”:::columns gap=64:::columnMore space:::columnBetween columns:::Custom Width Ratio
Section titled “Custom Width Ratio”Use fr (fractional units), % (percentage), or px (pixels):
:::columns width=1fr/2fr:::column### Sidebar (1/3)
Navigation:::column### Main Content (2/3)
Primary content area::::::columns width=30%/70%:::columnSidebar:::columnMain content:::Supported Content in Columns
Section titled “Supported Content in Columns”Each column can contain any of the following:
- Paragraphs with inline formatting (bold, italic,
code, links) - Bullet lists (ordered and unordered)
- Code blocks with syntax highlighting
- Images (with size constraints)
- Tables
- Blockquotes
- Headings (H3, H4)
Fallback Behavior
Section titled “Fallback Behavior”- If fewer than 2 columns are defined, content renders linearly (no columns)
- If more than 4 columns are defined, only the first 4 are used
- If column widths are below minimum (320px), columns stack vertically
Footnotes
Section titled “Footnotes”GFM footnote syntax is supported. Footnotes are displayed at the bottom of the slide in a smaller font.
Basic Syntax
Section titled “Basic Syntax”## Research Results
According to recent research[^1], this is an important finding[^2].
[^1]: Smith et al. (2024) Journal of Science[^2]: See Appendix A for detailsNamed Footnotes
Section titled “Named Footnotes”You can also use names instead of numbers:
This feature is useful[^note].
[^note]: Verified through usability testingDisplay Format
Section titled “Display Format”- Footnote references in the text are displayed as
[1]or[note]in square brackets (Figma Slides does not support superscript) - Footnote definitions are displayed at the bottom of the slide, separated by a horizontal line
- Inline formatting like bold and italic can also be used within footnotes
Slide Transitions
Section titled “Slide Transitions”You can configure transition animations between slides.
Basic Configuration (Shorthand)
Section titled “Basic Configuration (Shorthand)”---transition: dissolve---You can also specify duration:
---transition: slide-from-right 0.5---Detailed Configuration
Section titled “Detailed Configuration”---transition: style: slide-from-right # Animation style duration: 0.5 # Duration (seconds) 0.01-10 curve: ease-out # Easing curve timing: type: after-delay # on-click or after-delay delay: 2 # Auto-advance delay (seconds) 0-30---Global Configuration
Section titled “Global Configuration”Set a global transition in the frontmatter at the beginning of the file:
---transition: style: dissolve duration: 0.5 curve: ease-out---
# Title Slide
---
## Content SlideIn this case, the dissolve transition is applied to all slides.
Per-Slide Override
Section titled “Per-Slide Override”You can override the global setting for individual slides:
---transition: dissolve---
# Title
---transition: slide-from-right---## This slide only slides in from the rightUse transition: none to disable transitions.
Available Styles
Section titled “Available Styles”| Category | Styles |
|---|---|
| Basic | none, dissolve, smart-animate |
| Slide In | slide-from-left, slide-from-right, slide-from-top, slide-from-bottom |
| Push | push-from-left, push-from-right, push-from-top, push-from-bottom |
| Move In | move-from-left, move-from-right, move-from-top, move-from-bottom |
| Slide Out | slide-out-to-left, slide-out-to-right, slide-out-to-top, slide-out-to-bottom |
| Move Out | move-out-to-left, move-out-to-right, move-out-to-top, move-out-to-bottom |
Available Easing Curves
Section titled “Available Easing Curves”| Curve | Description |
|---|---|
ease-in | Start slow, accelerate |
ease-out | Decelerate to end |
ease-in-and-out | Start slow, end slow |
linear | Constant speed |
gentle | Smooth |
quick | Fast |
bouncy | Bouncing |
slow | Slow |
Timing
Section titled “Timing”| Type | Description |
|---|---|
on-click | Advance on click (default) |
after-delay | Auto-advance after specified seconds |
Note: after-delay only works in presentation mode.
Custom Fonts
Section titled “Custom Fonts”You can configure custom font families for different text elements in your slides.
Basic Configuration
Section titled “Basic Configuration”---fonts: h1: "Roboto" # Shorthand: just family name (uses "Regular" style) h2: "Open Sans" body: "Source Sans Pro" bullets: "Inter"---Full Configuration
Section titled “Full Configuration”For complete control over font variants, use the full object syntax:
---fonts: h1: family: "Roboto" style: "Medium" # Base style (default: "Regular") bold: "Bold" # Bold variant (default: "Bold") italic: "Italic" # Italic variant (default: "Italic") boldItalic: "Bold Italic" # Bold Italic variant body: family: "Source Sans Pro" style: "Regular" bold: "Semibold" # Custom bold variant---Supported Elements
Section titled “Supported Elements”| Element | Description |
|---|---|
h1 | H1 headings (title slides) |
h2 | H2 headings (content slide titles) |
h3 | H3 sub-headings |
h4 | H4 sub-headings |
body | Body paragraphs |
bullets | Bullet list items |
code | Code blocks and inline code |
Font Variants
Section titled “Font Variants”| Property | Description | Default |
|---|---|---|
family | Font family name (e.g., “Roboto”) | Required |
style | Base font style | ”Regular” |
bold | Bold variant style name | ”Bold” |
italic | Italic variant style name | ”Italic” |
boldItalic | Bold Italic variant style name | ”Bold Italic” |
Fallback Behavior
Section titled “Fallback Behavior”If a requested font is not available in Figma:
- A notification warning is displayed
- The plugin falls back to Inter as the default font
- The slide continues to render normally
Per-Slide Override
Section titled “Per-Slide Override”You can override fonts for individual slides:
---fonts: h1: "Roboto" body: "Source Sans Pro"---
# Slides with default fonts
---fonts: h1: "Georgia" body: "Times New Roman"---
# This slide uses different fontsCode Blocks
Section titled “Code Blocks”Blocks enclosed in ``` are displayed as code blocks.
Specifying a language enables syntax highlighting.
` ```typescriptconst message: string = "Hello, World!";console.log(message);` ```Supported languages: TypeScript, JavaScript, Python, Bash, JSON, CSS, HTML, XML, Go, Rust, SQL
Complete Example
Section titled “Complete Example”---# figdeck Presentation
From Markdown to Figma Slides
---## Table of Contents
- Overview- Feature Introduction- Demo- Summary
---## Overview
figdeck is a tool that convertsMarkdown files to Figma Slides.
The CLI and Figma Plugin work together.
---## Features
- Markdown parsing- WebSocket communication- Automatic slide generation
---# Thank You
Any questions?This example generates the following 5 slides:
- Title slide “figdeck Presentation”
- Content slide “Table of Contents” (4 bullet items)
- Content slide “Overview” (2 paragraphs)
- Content slide “Features” (3 bullet items)
- Title slide “Thank You”
Support Status
Section titled “Support Status”| Syntax | Status | Notes |
|---|---|---|
| Headings (H1-H4) | Supported | H1/H2 are slide titles |
| Paragraphs | Supported | |
| Bullet points | Supported | Both ordered and unordered |
| Bold | Supported | |
| Italic | Supported | |
| Supported | GFM | |
Inline code | Supported | With background color |
| Links | Supported | Clickable |
| Blockquotes | Supported | With left border |
| Code blocks | Supported | Syntax highlighting |
| Tables | Supported | GFM, alignment supported |
| Images | Supported | Local and remote |
| Figma links | Supported | :::figma blocks |
| align/valign | Supported | Slide alignment settings |
| Footnotes | Supported | GFM, displayed at slide bottom |
| Transitions | Supported | Slide transition animations |
| Custom Fonts | Supported | Per-element font families |
| Background Component | Supported | Figma Component/Frame as background |