Distribution & Analytics
Self-contained output
Every render produces a self-contained directory — index.html, speaker.html, sync.js, and all copied image assets. It works in any browser without a server.
my-talk/
index.html ← main presentation (share this)
speaker.html ← speaker view
sync.js ← speaker view sync module
images/ ← copied assets
Sharing options
Zip and email:
zip -r my-talk.zip my-talk/
Web server:
scp -r my-talk/ user@server:/var/www/html/
GitHub Pages — put the output in a docs/ folder or push to a gh-pages branch.
Local HTTP server (also resolves speaker view popup-blocker issues):
python3 -m http.server 8080
# open http://localhost:8080/my-talk/
PDF export
Browser print — simplest option:
- Open
my-talk/index.html File → Print(Ctrl/Cmd + P)- Destination → Save as PDF
Headless Chrome — more control over page size:
chromium --headless --print-to-pdf=my-talk.pdf my-talk/index.html
Speaker notes are in speaker.html — they are not included in the PDF export.
Session analytics
Use display instead of opening index.html directly to enable session logging:
java -jar md-slides.jar display my-talk
This opens the presentation in your browser and writes every navigation event to my-talk/deck.log:
- Navigation events with method (arrow, goto, history)
- Timer start, pause, and resume
- Break mode toggles
- Session start and end
After presenting, run report to analyze the session:
java -jar md-slides.jar report my-talk
The report shows:
- Total presentation time (excluding breaks)
- Per-slide time spent
- Navigation path taken
- Break durations
Review after each talk to improve pacing and identify which slides consistently run long.
Smart default
MD-Slides infers what you want from context — no subcommand required:
java -jar md-slides.jar my-talk # → render (first time)
java -jar md-slides.jar my-talk # → display (if deck.log exists)
java -jar md-slides.jar my-talk.md # → render
If the output directory already contains deck.log, the smart default switches to display automatically — it assumes you're re-presenting an existing deck. Pass --display explicitly to force session logging on a fresh render:
java -jar md-slides.jar my-talk --display