Markdown Slides Editor Online
Write a deck as plain Markdown on the left and watch it render on the right. Present it from this page, open a presenter window with your notes, share a link that holds the whole deck, and print one page per slide.
- Plain MarkdownSlides split on
---, notes after???, fragments after--. GitHub still renders the file as a document. - Present modeFull screen, keyboard and pointer navigation, a presenter window with the next slide and a clock, deep links to any slide.
- The renderer you already useOne plugin turns the Markdown your app stores into an
<article>of<section>s, on the server or in the browser.
The plugin, plus the editor for authoring
npm install @react-markdown-kit/renderer @react-markdown-kit/slidesnpm install @react-markdown-kit/editorRendering a deck needs only the first line, and the root entry loads no React: a server component or a static build gets the same <article> of <section>s. The /present entry adds the show; the editor and the /editor entry are what the left pane of this page is made of.
Slides from Markdown in three steps
- Render a deck. Put
slides()in a preset. Slides split on---, the notes start at???, a--is a pause, and<!-- class | background | name: … -->comments set a slide’s properties. The output is static: no script, no classes, no inline style, and the notes carry the HTMLhiddenattribute.import Markdown, { defineMarkdownPreset } from '@react-markdown-kit/renderer' import { slides } from '@react-markdown-kit/slides' import '@react-markdown-kit/slides/styles.css' const preset = defineMarkdownPreset({ extensions: [slides()] }) <div className="rmk-document"> <Markdown preset={preset}>{deck}</Markdown> </div> - Write plain Markdown. The same file is a document with rules on GitHub, in a diff and in any editor. A
---inside a fence, a quote or a list never splits, and front matter at the top sets the title, the aspect ratio, and defaults for every slide.--- title: Q3 review --- # Welcome --- <!-- class: center, middle --> ## Numbers Revenue is up. -- So are costs. ??? Pause before the second line. - Present, then edit. The
/presententry’sslides()gives the deck a Present button, keyboard and pointer navigation, fragments, a presenter view with the notes and a clock,#3deep links and aBroadcastChannelthat keeps two windows on the same slide. The/editorentry adds the slide break, the markers and the directive chips to the editor, with four toolbar buttons.import { slides } from '@react-markdown-kit/slides/present' const preset = defineMarkdownPreset({ extensions: [slides({ hashRouting: true, sync: 'talk' })], })import { MarkdownEditor } from '@react-markdown-kit/editor' import { slides } from '@react-markdown-kit/slides/editor' const preset = defineMarkdownPreset({ extensions: [slides()] }) <MarkdownEditor preset={preset} value={source} onChange={setSource} />
Go deeper. The slides plugin docs cover the dialect, every directive and diagnostic, the emitted HTML, the tokens the stylesheet reads, printing, and the editor and present options. Editor basics covers the editor the left pane lives in.
Put a deck in your own page
Add embed=1 to a share link and the page drops everything but the deck: no footer, no landing copy, no editor. The deck fills the frame, opens in present mode, and keeps its keyboard and pointer navigation inside it, so arrow keys and clicks move the slides once the frame has the focus. A small Open in React Markdown Kit link sits in the corner and opens the full editor in a new tab with the same deck.
<iframe
src="https://slides.reactmarkdownkit.com/?embed=1&d=uIyBXZWxjb21lCgotLS0KCiMjIFNlY29uZCBzbGlkZQoKT25lIGZpbGUsIHR3byBzbGlkZXMu"
title="A deck written in Markdown"
width="100%"
height="480"
loading="lazy"
allowfullscreen
></iframe>The d value is the whole deck, so the frame loads nothing from you. Press Share on this page to copy a link with your deck in it, then add &embed=1. An embedded deck writes no address bar and opens no sync channel, so several frames on one page stay independent. Give the frame the aspect ratio of your slides (16 by 9 by default) and allowfullscreen if you want the full screen button to work. See the embed on its own.
About this editor
- The left pane is the rich editor with the
/editorentry; the right pane is the renderer with the same preset. Type and the deck re-renders; press Present in the deck’s control bar to show it from this window. - The address bar holds the deck:
?d=is the source, deflated and base64url encoded, so a link is the whole file. Share copies a link that opens in present mode. Presenter window opens a second window with the next slide, the notes and a clock; it and this window move together. - Print gives each slide a 16 by 9 inch page, with the stylesheet’s
break-after: pageand this site’s own@pagerule. The deck uses container units to scale, so nothing measures the window. - See the other plugins at work in the editor demo, the Mermaid canvas in the Mermaid editor, or just the rendering in the renderer demo.
Questions
- Can I make slides from Markdown?
- Yes. Separate slides with --- between blank lines and the file is a deck. The same file is still a plain document on GitHub, in a diff and in any editor that does not know the plugin. The dialect.
- How do I add speaker notes to Markdown slides?
- Put ??? on its own line. Everything after it in that slide is a note: hidden in the deck, shown in the presenter window next to the next slide and a clock.
- Can I present Markdown slides in the browser?
- Yes. Press Present for full screen with keyboard navigation, open a presenter window that stays in sync, and share a link that opens the deck in present mode.
- How do I reveal points one at a time?
- Put -- on its own line between them. Each -- starts a fragment that appears on the next keypress.
- Can I set a class or a background on one slide?
- Yes, with a comment alone on its line: class, background or name. Front matter at the top of the file sets the title, the aspect ratio and defaults for every slide.
- Can I embed a Markdown deck in a blog post?
- Yes. Add embed=1 to a share link and put it in an iframe. The frame holds the deck alone, in present mode, with the keys working inside it and a link that opens the full editor.
- Is it a Marp or Slidev alternative?
- For decks inside a React app, yes. For exporting files, no: Marp and Slidev export PDF and PPTX, while this plugin renders sections from Markdown your app already stores and prints one page per slide. What the plugin renders.