Skip to content

From Markdown

Import a .md file and get a presentation directly — no AI, no API keys, no waiting. Slides are mapped deterministically from your markdown structure.

This is ideal for developers, technical writers, and anyone who prefers writing slides in a text editor or version-controlling their decks in git.

Advanced import section showing Import JSON, Import Markdown, and Paste Markdown tabs

  1. From the presentation list, click New presentation
  2. Select Import Markdown
  3. Upload your .md file
  4. Choose a language
  5. Click Import

A new presentation is created with slides mapped from your markdown.

Slides are separated by --- (horizontal rules). An optional YAML frontmatter block at the top sets deck-level metadata:

---
title: Quarterly Review
theme: deckyard
lang: en-GB
---
# Quarterly Review
Q4 2025 Results
---
## Revenue Growth
- SaaS revenue up 34%
- Enterprise contracts doubled
- Churn reduced to 1.2%
---
> "Best quarter in company history."
> -- Sarah Chen, CEO

The importer extracts and maps these markdown elements to Deckyard slide types:

  • Headings# Title and ## Subtitle become slide titles and section breaks
  • Bullet lists — Become content or list slides
  • Blockquotes — Become quote slides with attribution (> -- Author, Title)
  • Images![alt](url "caption") become image slides or image-text slides
  • Tables — Pipe tables (| A | B |) become table slides
  • Code blocks — Preserved with language and optional line highlights
  • Columns::left:: / ::right:: markers split content into two-column layouts
  • Speaker notes — HTML comments (<!-- notes -->) or Note: blocks
  • Bold-colon lists- **Term**: description patterns become structured list slides

You can control slide types explicitly with a layout: directive in per-slide frontmatter:

DirectiveSlide Type
layout: title or layout: coverTitle slide
layout: section or layout: chapterChapter/section break
layout: quoteQuote slide
layout: imageFull image slide
layout: image-left / image-rightImage + text side-by-side
layout: two-cols or two-columnTwo-column content
layout: comparisonSide-by-side comparison
layout: tableTable slide
layout: listStructured list
layout: end or layout: outroClosing/payoff slide

Example with per-slide frontmatter:

---
layout: image-right
## Our Approach
We combine speed with quality.
![Team photo](https://example.com/team.jpg)

When no layout: is set, the importer uses content-based heuristics — a slide with only a blockquote becomes a quote slide, a slide with only an image becomes an image slide, and so on.

Two formats are supported:

HTML comments (works in most markdown renderers):

## Slide Title
Content here.
<!-- Remember to mention the Q3 comparison -->

Note: prefix (Slidev/Marp convention):

## Slide Title
Content here.
Note:
Remember to mention the Q3 comparison.
This runs to the end of the slide.

When you don’t specify a layout:, the importer detects slide types from content:

  • First slide with only headings → title slide
  • Heading-only slide later in the deck → chapter/section slide
  • Blockquote → quote slide
  • Image with no other text → image slide
  • Image + heading + body text → image-text slide
  • Column markers with headings → comparison slide
  • Column markers without headings → two-column content slide
  • Pipe table → table slide
  • **Bold**: description list pattern → structured list slide
  • Everything else → content slide

The importer handles:

  • HTTPS URLs — Kept as-is (e.g. ![](https://example.com/photo.jpg))
  • Data URIs — Automatically uploaded to your media storage

Relative image paths (e.g. ./images/photo.jpg) cannot be resolved from plain markdown text and will produce a warning. Use absolute URLs instead, or upload images separately after import.

  1. Review slide type assignments — adjust any the importer guessed wrong
  2. Add images where you used relative paths
  3. Fine-tune content and speaker notes
  4. Generate the second language version if presenting bilingually
  5. Choose or adjust the theme
  • Use --- consistently — Every slide boundary needs a horizontal rule
  • --- inside code blocks is safe — Fenced code blocks are not split
  • One heading per slide — The first heading becomes the slide title
  • Keep it simple — The importer handles standard markdown well; exotic extensions may not map perfectly

The markdown format is compatible with conventions used by popular slide-from-markdown tools (Slidev, Marp, reveal.js). If you have existing markdown decks from these tools, they should import cleanly — the layout: directives, --- separators, and speaker note conventions all work.