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-after with relative or absolute click indexes, @vueuse/motion bound to click ranges, per-slide transitions including view-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: true writing 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. Lutrin has twenty-four official layouts, one maintainer, and eight first-party kits each installable in one lutrin kit install — but nothing third-party at all, which is the part that matters. We do have a browser playground of our own; it runs the real compiler with nothing installed and hands out both the .html and the .pptx from the page. Mermaid, icons and images still degrade there — each one named on the page rather than dropped in silence.

Where Lutrin is different

  • The .pptx is 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 --json reports measured overflow, images too low-resolution for the area they land in, and a better-suited layout, as JSON anchored to source lines and 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 build produces a static single-page application in dist/ — 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 is needed for the two main outputs. Slidev's PDF, PPTX and PNG exports rely on Playwright, so playwright-chromium has to be installed in the project: without it there is no export. Lutrin's .pptx and HTML are written by Node ≥ 22 alone — though our own PDF and image exports need a browser just as theirs do, and refuse without one. We ship puppeteer-core, and exactly one thing uses it — Mermaid, which measures the text it lays out and so needs a real layout engine. It drives a Chrome, Edge, Brave or Chromium already on the machine, or one lutrin setup-mermaid downloads. On a machine with neither, the build still succeeds: the diagram degrades to its source as a code block and the build reports how many did. That is the difference worth having in a locked-down runner — a missing browser costs Slidev the export, and costs us a diagram.
  • Charts as a DSL block. Slidev has Mermaid and PlantUML; for a bar or donut chart from data you write a component. Lutrin has ```chart alongside Mermaid, LaTeX and Lucide icons, sized by the engine and drawn into both outputs.

Side by side

 SlidevLutrin
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, and an equation is a real PowerPoint equation with the picture kept underneath as a fallback. Charts, diagrams and icons are pictures, each one carrying its vector as well as its raster, so PowerPoint 2019+ keeps them sharp at any zoom and every other reader draws the raster.
PDF export Yes, the default format, with --with-clicks, --range, --dark. --pdf writes a 16:9 PDF, one page per slide, with an outline; --png and --jpeg write one file per slide at 2×. No per-range or dark-mode flags, and no notes annotations.
Export dependencies Playwright — playwright-chromium must be installed in the project, or there is no export. Node ≥ 22 writes .pptx and HTML. A browser — one already on the machine, or one lutrin setup-mermaid downloads — renders Mermaid (optional: without it the diagram degrades to its source) and drives the PDF and image exports (required: the build refuses before writing).
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, sync across every open window and a batch notes editor. Built into the exported file: P for full screen, N for notes, timer, wall clock and next-slide preview in a second window, O for an overview grid. No server needed.
Interactivity in the deliverable Monaco editors, iframes, arbitrary Vue components, live drawing, camera and screen recording. None of that: the file runs no code of yours, on purpose. What moves in it is click-to-reveal steps, keyboard navigation and the presenter window.
Animation Per element, with absolute or relative click indexes and motion presets. Four effects — fade, wipe, zoom, appear — applied per block by the engine, from one table both outputs read, so a named effect means the same thing in the .pptx and in the HTML.
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 new writes a starter deck that compiles with no diagnostics, then npx lutrin build deck.md -o deck.pptx — or point it at any .md you already have. One file, not a project.
Validation Not a documented feature. Measured overflow, under-resolved images, layout suggestions, --json. build writes nothing while validation holds an error, short of an explicit --force.
Licence and price MIT. Free. No watermark, nothing paid. MIT. Free. No watermark, nothing paid.
Maturity 52.18.0, released 2026-07-14. Created April 2021, ~48,000 stars. 2.0.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.