Slides that survive the conference laptop
Deckhand turns a Markdown file into one self-contained HTML slide deck. No dev server, no framework, no internet at presentation time. It just opens.
There's a specific flavor of panic reserved for the speaker who plugs into a conference A/V laptop and discovers their slides need a dev server. The venue machine has no Node, no wifi worth trusting, and a projector tech who would like you to start now.
Deckhand exists for that moment. It's a command-line tool that reads a Markdown file and writes one HTML file. That file is the deck: styles inlined, syntax highlighting baked in, keyboard navigation included. Double-click it on any machine made this decade and you're presenting.
npx mdslides talk.md -o talk.html
The output should not be a project
Writing slides in Markdown is a solved, wonderful thing: drafts live in git, diffs are readable, and you never fight a WYSIWYG box again. The unsolved part has always been what you get out. reveal.js hands you a framework's worth of files. Slidev is genuinely excellent, but sharing a deck means running a Vue dev server or shipping a whole single-page app. Marp is close in spirit, and still pulls an asset pipeline along with it.
Deckhand's position is that the output should be less of a project than the input. One
.md in, one .html out. You can email the deck as an attachment, drop it in Slack, put it
on a USB stick, or archive it next to the meeting notes, and in ten years it will still open,
because it depends on nothing but a browser.
The essentials are all in that single file: arrow keys, space, or click to advance, f for
fullscreen, n for speaker notes, an optional progress bar and slide counter, and three
themes (default, dark, minimal) with a --css flag for layering your own look on top. A
--watch mode rebuilds on save while you're drafting, which is as close to a dev server as
it gets, and it's optional.
The constraint did the designing
Building "everything inlined" turned out to be a useful forcing function. Web fonts? Inline them or use system stacks. Syntax highlighting? Do it at build time, so the deck ships pre-highlighted HTML instead of a JavaScript highlighter that runs on stage. Every feature had to justify its bytes in a file a human might email. Features that couldn't, didn't ship. The result renders instantly even on the crustiest podium ThinkPad, because by the time the file opens, all the work is already done.
Try it
If you have a talk brewing: npx mdslides talk.md -o talk.html, split slides with ---,
open the result in a browser. Then send the file to your phone and present from that, just
because you can.
This post is part of the build log: every app my automated factory ships gets written up here, honestly. Browse everything at apps.charliekrug.com, or subscribe via RSS. Comments are open below.
Loading comments…