markdown to slides · compared
Lutrin vs Slidev
Slidev turns Markdown into a live web application you perform from — editable code on stage, drawing over the slide, camera recording. Lutrin turns Markdown into a file you hand to somebody who will never clone your repository. Same input, two different artefacts, and the question is only which of the two you actually have to produce.
What Slidev does better
If you are giving a talk rather than filing a document, most of this list is the reason to stop reading and go use Slidev. It is MIT, free, mature, and none of what follows is a roadmap item for us.
Four things Slidev does that Lutrin cannot
- Live code on stage. A code block marked
{monaco}becomes a real Monaco editor you type into during the talk, with a diff mode and a runner that executes the snippet. Lutrin's HTML is a static document; it will never run your code in front of an audience. - Animation at the level of the single element.
v-click/v-clicks/v-afterwith relative or absolute click indexes,@vueuse/motionbound to click ranges, per-slide transitions includingview-transition. Lutrin has four deck-wide effects — fade, wipe, zoom, appear — and no way to choreograph one element. - Drawing on the slide while you present. Stylus
detection so an Apple Pencil draws while a finger still navigates,
annotations synced live to every connected viewer, and
drawings: persist: truewriting them back into the source so they survive into the exported PDF. Lutrin has nowhere to put this: its output is a file, not a session. - An ecosystem, and a five-year track record. Around 48,000 GitHub stars, themes and addons distributed as ordinary npm packages you switch on from the frontmatter, a zero-install browser playground at sli.dev/new, a presenter route with three layouts and an overview mode. Lutrin has twelve official layouts, one maintainer and no theme market.
Where Lutrin is different
- The
.pptxis a document, not a screenshot. Slidev does export PPTX — that has been a supported format for years, and anyone telling you otherwise is working from an old memory. What its own documentation says is the narrow, checkable thing: "all the slides in the PPTX file will be exported as images, so the text will not be selectable" (presenter notes do carry across). Lutrin writes native text boxes, tables and shapes with the fonts embedded. If the deck's next stop is a colleague who has to fix a number in it, that is the whole difference. - You are not allowed to position anything. Slidev goes
the other way deliberately: UnoCSS classes per slide, scoped CSS, custom
Vue layouts in
./layouts/. Lutrin has no coordinate, no explicit column and no CSS override, and adding one is written into the project contract as a thing that will be refused. This is a real loss of control, traded for decks that come out the same shape whoever wrote them. - Validation that measures geometry, not syntax.
lutrin validate --jsonreports measured overflow, images too low-resolution for the area they land in, and a better-suited layout, as positioned JSON built for an agent's write → validate → fix loop. Slidev documents no equivalent. - A brand that travels as data. A Slidev theme is an npm package of Vue components and CSS — more powerful than a kit, and code you are running. A Lutrin kit is tokens, layouts, fonts and logos; installation executes nothing and refuses any executable entry.
- One HTML file.
slidev buildproduces a static single-page application indist/— a directory of assets to host. Lutrin's HTML output is one standalone document with presenter mode inside it. Both work offline; the difference is a file versus a folder. - No browser in the toolchain. Slidev's PDF, PPTX and
PNG exports rely on Playwright, so
playwright-chromiumhas to be installed in the project. Lutrin builds on Node ≥ 22 with no headless browser at all — which is what makes it survivable in a locked-down runner. - Charts as a DSL block. Slidev has Mermaid and PlantUML;
for a bar or donut chart from data you write a component. Lutrin has
```chartalongside Mermaid, LaTeX and Lucide icons, sized by the engine and drawn into both outputs.
Side by side
| Slidev | Lutrin | |
|---|---|---|
| PPTX export | Yes — slides land as images, text not selectable (its own docs). Presenter notes are carried over per slide. | Native shapes, text boxes and tables, fonts embedded — the text is text. Charts, equations and icons are rasterised images. |
| PDF export | Yes, the default format, with --with-clicks, --range, --dark. |
None. The two outputs are .pptx and standalone HTML. |
| Export dependencies | Playwright — playwright-chromium must be installed in the project. |
Node ≥ 22. No browser, no headless Chromium. |
| Who decides the layout | You: 19 built-in layouts, custom Vue layouts, UnoCSS classes, scoped CSS, global layers. | The engine: layouts inferred from the content's structure. No coordinate or explicit column exists in the DSL. |
| When a slide overflows | Write CSS, a utility class, or a component. | There is no escape hatch. The engine paginates, and the overflow is reported before the build. |
| Web output | A static SPA in dist/ — a directory of assets to host. |
One standalone .html file. |
| Presenter mode | Ahead of us here: a /presenter route with three layouts, next-slide preview, sync across every open window, an overview route and a batch notes editor. |
Built into the exported file: P for full screen, N for notes and timer in a second window. No server needed. |
| Interactivity in the deliverable | Monaco editors, iframes, arbitrary Vue components, live drawing, camera and screen recording. | None. The deliverable is a static file, on purpose. |
| Animation | Per element, with absolute or relative click indexes and motion presets. | Four effects — fade, wipe, zoom, appear — applied per block by the engine. |
| Diagrams & charts | Mermaid and PlantUML. No documented built-in syntax for data charts. | Mermaid, plus ```chart for data charts, LaTeX and icons. |
| How a brand travels | A theme or addon: an npm package of styles, components and layouts. | A kit: data only. Install runs nothing and refuses executable entries. |
| Getting started | Node ≥ 20.12. pnpm create slidev scaffolds a project — or run a single .md with the global CLI, or start from the browser playground. |
Node ≥ 22. npx lutrin build deck.md -o deck.pptx against a bare .md. No scaffold. |
| Validation | Not a documented feature. | Measured overflow, under-resolved images, layout suggestions, --json. build refuses to emit a deck holding an error. |
| Licence and price | MIT. Free. No watermark, nothing paid. | MIT, free to use — every slide carries Made with Lutrin until a seat is bought. That mark is the only difference between the tiers. |
| Maturity | 52.18.0, released 2026-07-14. Created April 2021, ~48,000 stars. | 1.2.0, one maintainer. |
Run the comparison yourself
Write a plain deck — a title, three slides of bullets, one Mermaid
diagram, speaker notes. Both tools eat it almost unchanged: Slidev splits
on --- and takes notes from HTML comments, Lutrin splits on
# or ---.
slidev export --format pptx slides.md
npx lutrin build slides.md -o lutrin.pptx
Open both in PowerPoint and try to click into the title and retype it. That is one measurable difference, demonstrated rather than asserted.
Now reverse the test on the same deck. Ask for a code block the audience can edit while you talk, a diagram that assembles itself over four clicks, or the subtitle nudged 40 px to the left. Slidev does all three. Lutrin has no syntax for any of them and will not grow one.
Every claim about Slidev on this page was checked against Slidev's own documentation on 2026-07-30, against @slidev/cli 52.18.0 (published 2026-07-14). Star counts and version numbers go stale within weeks; treat them as of that date. If a statement here has stopped being true, tell us. Sources: the Slidev guide, its exporting page, the Monaco editor feature, the built-in layouts.