Free and open source, no account needed
Markdown Slides Editor Online
Write a deck in plain Markdown on the left and it renders on the right. You can present it from this page, open a presenter window with your notes, share a link that holds the whole deck, or print it with one page per slide.
- Plain MarkdownSlides split on
---, notes go after???and fragments after--. GitHub still renders the file as a normal document. - Present modeFull screen with keyboard and pointer navigation. There’s a presenter window with the next slide and a clock, and you can deep link to any slide.
- Uses the same rendererOne plugin turns the Markdown your app stores into an
<article>of<section>s. It works on the server or in the browser.
Install the plugin, and the editor if you want to author decks
npm install @react-markdown-kit/renderer @react-markdown-kit/slidesnpm install @react-markdown-kit/editorYou only need the first line to render a deck. The root entry doesn’t load React, so a server component or a static build gets the same <article> of <section>s. The /present entry adds present mode. The left pane of this page is built from the editor and the /editor entry.
Making slides from Markdown
- 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 HTML with no script, classes or inline styles, and the notes get 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. On GitHub, in a diff or in any other editor, the file shows up as a document with horizontal rules. A
---inside a fence, a quote or a list doesn’t split the slide, and front matter at the top sets the title, the aspect ratio and the 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 { defineMarkdownPreset } from '@react-markdown-kit/renderer' import { slides } from '@react-markdown-kit/slides/present' const preset = defineMarkdownPreset({ extensions: [slides({ hashRouting: true, sync: 'talk' })], })import { defineMarkdownPreset } from '@react-markdown-kit/renderer' 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} />
More docs. 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
If you add embed=1 to a share link, the page hides everything except the deck (the footer, the landing copy and the editor all go away). The deck fills the frame, opens in present mode and keeps keyboard and pointer navigation inside the frame, so arrow keys and clicks move the slides once the frame has focus. There’s a small Open in React Markdown Kit link in the corner that opens the full editor in a new tab with the same deck.
<iframe
src="https://reactmarkdownkit.com/markdown-slides?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 doesn’t need to load anything from your server. Press Share on this page to copy a link with your deck in it, then add &embed=1. An embedded deck doesn’t touch the address bar or open a 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 add 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, and the right pane is the renderer with the same preset. The deck re-renders as you type. Press Present in the deck’s control bar to show it from this window. - The deck lives in the address bar.
?d=is the source, deflated and base64url encoded, so a link carries 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, and it stays on the same slide as this window. - Printing gives each slide a 16 by 9 inch page, using the stylesheet’s
break-after: pageand this site’s own@pagerule. The deck scales with container units, so nothing has to measure the window. - The other plugins are in the editor demo, the Mermaid canvas is in the Mermaid editor, and the renderer demo covers rendering on its own.
Questions
- Can I make slides from Markdown?
- Yes. Separate slides with --- between blank lines and the file becomes a deck. It’s still a normal document on GitHub, in a diff and in any editor that doesn’t know about 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. Notes are hidden in the deck and shown in the presenter window, next to the upcoming slide and a clock.
- Can I present Markdown slides in the browser?
- Yes. Present goes full screen with keyboard navigation. You can also 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 shows up on the next keypress.
- Can I set a class or a background on one slide?
- Yes. Use a comment on a line by itself to set class, background or name. Front matter at the top of the file sets the title, the aspect ratio and the 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 shows only the deck, in present mode. Keys work inside it, and there’s a link that opens the full editor.
- Is it a Marp or Slidev alternative?
- For decks inside a React app, yes. If you need to export files, probably not. Marp and Slidev export PDF and PPTX, and this plugin only renders sections from Markdown your app already stores (and prints one page per slide). What the plugin renders.