Marp vs Slidev vs reveal.js for lecture slides
For lecture decks, Marp is the least setup and the most portable: one Markdown file, one command to PDF, no build. Slidev is a Vue application for developer talks with animations, code features and components, one Node project per deck. reveal.js is an HTML framework whose Markdown plugin loads a file into a page, strongest for interactive web content. A course of forty decks: Marp; a live-code talk: Slidev; a web page: reveal.js.
This comparison is for instructors, so it looks at the course-level questions (files, export, notes, reuse) rather than feature counts. The Marp facts were tested on marp-cli 4.5 in September 2026; the Slidev and reveal.js facts come from each project's documentation and are marked as such.
What each one is
- Marp: a Markdown-to-slides converter (Marp Core on Marpit) with a CLI, a VS Code extension and a plain file format. Output: HTML, PDF, PPTX, images.
- Slidev (from its docs): a Vue and Vite based presentation tool; a deck is a
slides.mdinside a Node project with a dev server, themes as npm packages, components in slides, code features (line highlighting, Monaco editor, live diffs), and export to PDF, PPTX and images through Playwright. - reveal.js (from its docs): an HTML presentation framework; slides are
<section>elements in an HTML page, with a Markdown plugin that reads slides from a.mdfile or from a<textarea>. PDF export is the browser's print of a?print-pdfview.
The file
| Marp | Slidev | reveal.js | |
|---|---|---|---|
| A deck is | one .md file |
a project folder with slides.md, package.json, node_modules |
an .html page plus optional .md |
| Renders without a project | yes (marp-cli or VS Code) | no (needs the project's dependencies) | yes, with the framework files present |
| Readable in any Markdown viewer | yes | mostly (frontmatter per slide, Vue components show as tags) | the .md yes, the page no |
| Forty decks in a course folder | forty files | forty projects, or one project with many entries | forty pages sharing one framework copy |
This row decides it for a course. Marp's deck is a file; the others are applications.
Setup
- Marp:
npm i -g @marp-team/marp-cli, or the VS Code extension, or nothing at all with the online editor. - Slidev:
npm init slidevper deck, thennpm run dev; export needs Playwright's browser download (from its docs). - reveal.js: download or clone the framework, write the HTML page, serve it locally (the Markdown plugin fetches the file, so
file://usually fails; a local server is the documented way).
Speaker notes and presenting
All three have notes and a presenter view. Marp: notes are HTML comments; presenter view in the HTML export (press P), also in Lecture Studio. Slidev: notes are comments too, presenter mode in the dev server with a drawing layer (docs). reveal.js: notes in an <aside class="notes"> or a Note: line in Markdown, speaker view with the notes plugin (docs).
PDF and PowerPoint
- Marp:
marp deck.md --pdfand--pptx, one command, exact rendering. - Slidev:
slidev exportto PDF,--format pptxfor PowerPoint, through Playwright (docs). Animations are flattened. - reveal.js: open
deck.html?print-pdfin Chrome and print to PDF (docs). No PPTX.
For a course that hands students a PDF every week, Marp's one command is the difference between doing it and not.
Columns, images, math, code
- Marp:
![bg right:40%]splits,divcolumns with a class, KaTeX or MathJax, highlight.js. Tested. - Slidev (docs): layouts as frontmatter (
layout: two-cols), KaTeX, Shiki with line highlighting and click-to-reveal, Mermaid and PlantUML built in, Vue components. - reveal.js (docs): layout by hand in HTML or with its layout helpers, MathJax or KaTeX plugin, highlight.js plugin with line highlights, fragments.
Slidev has the most for code-heavy talks. Marp has enough for lectures and stays a file.
Offline and long-term
Marp's HTML export is self-contained apart from web fonts and twemoji; the PDF is fully offline. A Slidev deck depends on its node_modules and will need the same versions to build in three years (docs describe pinning). A reveal.js page needs its framework folder next to it and then works forever offline. For material that must still open at the end of the decade, Marp Markdown plus the PDF, or reveal.js with its framework vendored.
Lecture Studio's choice
Lecture Studio writes decks as Marp for the reasons in the file table: a course is a folder of plain files that an assistant can read, cite and edit, that git can diff, and that marp-cli can export. It is not the tool for a live-coded conference talk; that is Slidev's ground.
FAQ
Marp vs Slidev: which is better?
For a course: Marp, because a deck is one file with no project. For a developer talk with live code, animations and components: Slidev, which is built for it.
Marp vs reveal.js: which should I use?
Marp when the deck should be a Markdown file that exports to PDF in one command; reveal.js when the deck is a web page with interactive content and you are comfortable with HTML.
Can I convert between them?
Not directly. The Markdown of a Marp deck is close to reveal.js's Markdown plugin format (slides separated by ---), so simple decks move with light editing; Slidev's per-slide frontmatter and components do not translate.
Which one exports to PowerPoint?
Marp (--pptx) and Slidev (export --format pptx). reveal.js does not.