Skip to main content

Markdown slides viewer

Upload a text or Markdown file or paste content. Separate slides with ---.

Works offlineFree & unlimited
or paste content below
All processing happens in your browser. No data is sent to any server.

Markdown separated by a --- line on its own is the closest thing presentation tools have to a common format: Marp, reveal.js, Deckset and Obsidian all read it. This page takes that same text and presents it without installing any of them. It splits the document on every standalone ---, renders each block with a small Markdown subset, sanitises the result with DOMPurify, and gives you a dark or light slide canvas, a thumbnail strip, zoom, a running presenter timer and the keyboard controls you expect from a remote clicker. There is no export and no account: paste, press F, talk.

Key facts about Markdown slides viewer

Key facts about Markdown slides viewer
Slide separatorA line containing exactly --- between two newlines. Nothing else splits a slide, so a horizontal rule inside a slide will split it too
Markdown supported# ## ### headings, **bold**, *italic*, `inline code`, - bullet lists, and plain paragraphs
Markdown not supportedImages, links, tables, block quotes, fenced code blocks, numbered lists, footnotes and front matter — they render as literal text
SanitiserEvery rendered slide passes through DOMPurify before it reaches the DOM, with inline style attributes allowed and scripts stripped
ThemesTwo, applied to the slide canvas itself: dark (slate background, near-white headings) and light (white background, near-black headings)
Presenter timerCounts up in mm:ss from the moment you start it, independent of the slide you are on
Zoom25 to 300 percent in 25-point steps, applied to the slide canvas, with 0 to reset
KeyboardRight arrow or space next, left arrow previous, Home first, End last, F fullscreen, Escape exit, plus and minus zoom, T thumbnails, question mark for shortcuts
File input.txt, .md and .markdown are read as text; the contents replace whatever is in the editor
Text alignmentSlides are centred vertically and horizontally by design; bullet lists align left inside that block

What happens to your file

Your slide text is never sent anywhere. It lives in the textarea and in the rendered slide canvas, both inside this tab, and the Markdown-to-HTML step runs in page memory with DOMPurify sanitising the output before it is inserted. There is no upload, no autosave to a server and no account, so a deck drafted here is as private as a local file — and disappears on reload, which is worth knowing before you close the tab on an unsaved draft. Dropping a .md file reads it locally with FileReader; the file itself is not copied anywhere.

About this tool

  1. 1

    Write or paste your Markdown

    Put a --- on its own line between slides. A first-level heading makes a good title slide; bullets carry the body.

  2. 2

    Or drop a .md file

    Drag a .txt, .md or .markdown file onto the editor and its contents load straight in, replacing what was there.

  3. 3

    Pick a theme

    Dark reads better in a dim room and on a projector; light matches a printed handout and a bright meeting room. The choice applies to the slide canvas, not the page around it.

  4. 4

    Check the thumbnails

    The strip shows every slide at a glance, which is how you catch the slide that accidentally split in two because of a stray --- inside it.

  5. 5

    Press F and present

    Fullscreen gives you the slide, a counter and nothing else. Right arrow or space advances, left arrow goes back, Escape exits.

  6. 6

    Start the timer

    The count-up timer runs independently of the slides, so you can see how long you have been talking without leaving presentation mode.

Specs & compatibility
InputTextarea, or drop a .txt, .md or .markdown file
Slide split--- on its own line
RendererRegex-based Markdown subset plus DOMPurify sanitisation
ThemesDark, light
Zoom25 to 300 percent
TimerCount-up, mm:ss, start and pause
OutputOn-screen presentation only — no PDF, PPTX or image export
PersistenceNone. Reloading the page clears the deck
Browser supportAny modern browser; fullscreen uses the standard fullscreen behaviour of the tab
Cost / accountFree, unlimited, no signup
  • Keep the --- separators surrounded by blank lines; a --- directly under text is a Markdown horizontal rule in some editors and will still split the slide here.
  • One heading and three bullets is about the maximum that stays readable at the default zoom on a projector.
  • Images and links are not rendered, so a deck written for Marp will show its image syntax as literal text — strip those lines before presenting here.
  • Use zoom rather than changing font sizes: the canvas scales as a whole, so proportions stay right.
  • Start the timer at the first slide, not before, if you want an honest reading of how long the talk actually runs.
  • The deck is not saved anywhere, so keep the Markdown in a file and paste it in — treat this page as the projector, not the document store.
  • Press T to hide the thumbnail strip when you are presenting on a small screen and want the slide as large as possible.
  • Split on --- like Marp and reveal.js
  • Headings, bold, italic, code and bullets
  • Dark and light slide themes
  • Thumbnail strip
  • Count-up presenter timer
  • Zoom 25 to 300 percent
  • Fullscreen presentation mode
  • Full keyboard navigation
  • Presenting a Markdown deck on a machine that has no presentation software installed.
  • Giving a short internal talk without opening a slide editor at all.
  • Rehearsing timing with the built-in count-up timer before a conference slot.
  • Turning meeting notes into a walkthrough during the meeting itself.
  • Checking how a Marp or reveal.js deck breaks into slides before building it properly.
  • Teaching from a plain-text outline that can live in the same repository as the code being taught.
Put three hyphens on a line of their own between two blank lines. The document is split on that exact pattern, so every block between separators becomes one slide, in order. Nothing else creates a slide break — not a heading, not a page break character. The flip side is that a horizontal rule written the same way inside a slide will also split it, which the thumbnail strip makes obvious at a glance.
A deliberate subset: first, second and third level headings, bold, italic, inline code, hyphen bullet lists and plain paragraphs. Images, links, tables, block quotes, fenced code blocks, numbered lists and front matter are not converted and will appear as the literal characters you typed. That covers most of what a talk needs on screen, and keeps the renderer small enough to run instantly as you type.
No. This page presents; it does not export. There is no PDF, PPTX or image output, which is a deliberate scope choice — exporting well means reproducing fonts and pagination faithfully, and that is a different tool. If you need a file to send afterwards, keep the Markdown itself as the artefact, or build the same text in a Markdown deck tool that has an export step and use this page only for presenting.
Neither. The text stays in the textarea and the rendered slides stay in the tab. Nothing is sent to a server, nothing is written to storage and there is no account. The practical consequence is that reloading or closing the tab loses the deck, so write your Markdown in a file and paste it here rather than drafting directly in the page. Dropping a .md file reads it locally; the file is not copied anywhere.
Yes. The Markdown subset produces HTML that is passed through DOMPurify before it is inserted into the page, with inline style attributes permitted and anything executable removed. That means a pasted deck containing a script tag or an event-handler attribute renders as inert text rather than running. It is the same protection you would want when previewing Markdown that arrived from a colleague or a repository.
Yes. It counts up in minutes and seconds from the moment you start it and is independent of which slide you are on, so moving forwards and backwards does not reset it. It keeps running in fullscreen. Because nothing is persisted, closing or reloading the tab resets it to zero — start it deliberately at the beginning of a rehearsal if you want an honest measurement of how long the talk runs.
View all

Part of File viewers that open the file in your browser

Updated

We use anonymous analytics to improve ToolChamp. No personal data is stored or sold. Privacy Policy