This renderer allows safe author-controlled HTML.
HTML is useful for small layout accents, keyboard hints like F, or semantic snippets.
<p class="note">Keyboard hint: <kbd>F</kbd></p>
Official Marp Core can allow, deny, or sanitize HTML through its html option.
HTML comments that are not directives become presenter notes.
# Slide title
<!-- Remember to pause here and ask for questions. -->
This site captures notes from Marp Core; a future presenter view could render them.
Marp is extensible through markdown-it and Marpit plugins.1
This site adds footnotes and redistributes them per slide so they do not all land at the end.
Marp is extensible.[^plugins]
[^plugins]: This deck uses a markdown-it footnote plugin.
Footnotes are a project extension here, not part of the bare Marpit syntax. ↩︎
The engine in this project is configured in src/utils/marp.ts.
const marp = new Marp({
inlineSVG: true,
html: true,
math: false,
});
marp.use(markdownItPrism);
marp.use(footnote);
marp.use(marpSlideFootnotes);
marp.use(katex, {});
That means this deck demonstrates Marp plus local code highlighting, KaTeX, and footnote extensions.
Inline SVG wraps each slide in an SVG + foreignObject.
Why it matters:
::backdrop styling for the slide letterbox area::backdrop {
background: #020617;
}
Marp CLI's bespoke template supports a transition local directive.
---
transition: fade 700ms
---
# This transition applies to the next slide boundary
Built-ins include fade, cover, cube, flip, slide, wipe, zoom, and many more. Use _transition: none to disable one boundary.
Custom transitions are CSS keyframes with Marp naming conventions.
@keyframes marp-transition-dissolve {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
@keyframes marp-incoming-transition-slide-up {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
Useful export metadata lives in front matter.
---
lang: en-US
title: Marp Feature Showcase
author: Logical Elixirs
description: A live deck demonstrating Marp features.
keywords: markdown, slides, marp
url: https://example.com/slides/marp-feature-showcase
image: https://example.com/og.png
---
Use real alt text for images unless an image is purely decorative.
Marp for VS Code recognizes marp: true.
---
marp: true
---
Marp CLI converts decks from the terminal.
npx @marp-team/marp-cli slides.md --html
npx @marp-team/marp-cli slides.md --pdf
npx @marp-team/marp-cli slides.md --pptx
npx @marp-team/marp-cli --watch slides.md
npx @marp-team/marp-cli --server .
Chrome/Chromium powers PDF and PowerPoint export paths.
| Layer | Role |
|---|---|
| Marpit | Minimal Markdown + CSS slide framework |
| Marp Core | Official themes, math, emoji, auto-scaling, Marp flavor |
| Marp CLI | Terminal conversion, watch/server, export templates |
| Marp for VS Code | Authoring, preview, completions, export |
| Your app | Custom renderer, navigation, plugins, hosting |
---
marp: true
theme: gaia
class: invert
paginate: true
size: 16:9
style: |
section.lead { text-align: center; }
---
<!-- _class: lead invert -->
# Talk title
Speaker · Event
---
# The story
- Context
- Tension
- Resolution
| Need | Use |
|---|---|
| New slide | --- horizontal ruler |
| Deck config | YAML front matter |
| One-slide override | _directive spot directive |
| Reveal items | * bullets or 1) ordered items |
| Full-bleed image |  |
| Split layout |  |
| Two columns | CSS grid/flex or HTML |
| Big title | # <!-- fit --> Title |
| Notes | Non-directive HTML comments |
| Custom look | style directive or custom theme CSS |
Start simple, add directives only when the story needs them.
This is a real presenter note captured by Marp, not displayed on the slide.