A deck that explains itself · June 11, 2026
No slide objects. No drag handles. No .pptx.
Just one markdown file — every # heading starts a new slide.
You're reading slide two of the file that drew it.
Type markdown. Get a slide.
That block on the left? It renders as the slide on the right — live, as you save.
# Second slide
## with a subtitle
- a point
- another point
- ==the one that matters==Lists build one press at a time — no markup needed:
→ and this appears← steps back through themThen add a held line with .
Only what slides actually need:
inline code and fenced blocks| Key | Does |
|---|---|
→ space |
next |
O |
overview |
F |
fullscreen |
Fenced blocks are tokenized by Shiki — the same engine VS Code uses:
Drop a language after the fence and it just lights up.
export default {
brand: { text: 'mdslides' },
theme: 'angular',
transition: 'fade',
};Inline like eiπ+1=0, or a centered block:
KaTeX renders it server-side — no MathJax flash, fonts auto-bundled.
| Key | Action |
|---|---|
→ space PageDn |
next slide / reveal |
← PageUp |
back |
O |
overview grid — jump anywhere |
F |
fullscreen |
. |
black the screen |
? |
help |
The URL hash tracks your slide, so #/3 deep-links straight here.
Three ways out, same one file:
Static HTML or PDF — no runtime, no account, no lock-in.
mdslides ./slides.md # present (live-reload dev server)
mdslides build ./slides.md # self-contained dist/ → host anywhere
mdslides export ./slides.md # slides.pdf, one page per slidenpx @exor404/mdslidesIt asks for a name, scaffolds a starter deck, and opens it.
The next slide you make starts with #.