hakimel/reveal.js
 Watch   
 Star   
 Fork   
2026-09-10 23:08:21
reveal.js

6.0.2

Changes

  • Fix cross-origin XSS through the postMessage API by validating iframe preview URLs
  • Fix Markdown attributes targeting the last list item instead of the whole list when separated by a blank line #3931
  • Prevent offscreen slides from receiving keyboard focus #1587
  • Fix pinch-to-zoom gestures incorrectly triggering slide changes
  • Improve slide layout and scroll view performance
  • Fix slides repeatedly loading and unloading while scrolling
  • Scale navigation controls, progress bars and media buttons for mobile viewports
  • Round slide scale to two decimal places
  • Update dependencies to address security vulnerabilities. Building and developing reveal.js now requires Node.js 22.12 or later

Full Changelog: https://github.com/hakimel/reveal.js/compare/6.0.1...6.0.2

2026-04-11 15:16:58
reveal.js

6.0.1

Changes

  • Upgrade to Vite 8 and TS 6
  • Blacklist previewIframe in postMessage API #3887
  • Fix exception in media control removal during PDF exports #3888

Full Changelog: https://github.com/hakimel/reveal.js/compare/6.0.0...6.0.1

2026-03-11 19:59:53
reveal.js

6.0.0

New Package: @revealjs/react

reveal.js now has an official React wrapper! The @revealjs/react package lets you build presentations using React components—<Deck>, <Slide>, <Stack>, <Fragment>, and <Code>. Learn more over at revealjs.com/react.

import { Deck, Slide, Fragment } from '@revealjs/react';

<Deck>
  <Slide>
    <h1>Hello World</h1>
    <Fragment asChild>
      <h2>Appears on click</h2>
    </Fragment>
  </Slide>
</Deck>

Try it out by pulling reveal.js master and running npm run react:demo.

Breaking Changes

See the full upgrade guide for step-by-step instructions. The short version:

  • Plugin paths have moved —if your presentation HTML loads plugins directly from the file system or via CDN, update your paths from plugin/<name>/plugin.js to dist/plugin/<name>.js (e.g. plugin/notes/notes.js → dist/plugin/notes.js, plugin/highlight/monokai.css → dist/plugin/highlight/monokai.css)
  • ES module paths renamed — .esm.js files are now .mjs (e.g. dist/reveal.esm.js → dist/reveal.mjs). If you import via bare module specifiers this doesn't affect you.
  • CSS paths changed — if you install via npm, the dist/ prefix has been dropped from the public package API (e.g. reveal.js/dist/reveal.css → reveal.js/reveal.css).
  • TypeScript — reveal.js now ships with types included. If you were previously using @types/reveal.js you can remove it and migrate. Note that the type names are slightly different, more info in the upgrade guide.

Changes

  • Switch from gulp to Vite for building and running reveal.js (@hakimel)
  • Add official React wrapper for reveal.js — @revealjs/react (@hakimel)
  • TypeScript types are now published as part of the package, based on the great work over at @types/reveal
  • Dark mode and llms.txt support for revealjs.com.
  • Add controls: 'speaker' config option to show controls only in speaker view (@hakimel in #3853)
  • Videos blocked from autoplaying with audio will now play muted with an unmute button, replacing the previous browser-dependent blocked state (@hakimel)
  • MathJax 4 support in the math plugin (@Khlick in #3811)
  • Accessibility improvements: alt tags on images and videos are now announced by screen readers, and slide content is better punctuated for screen reader text (@hakimel in #3757, #3772)
  • sync() now also updates slide classes, fixing issues when adding or removing slides and then calling sync (@hakimel)
  • A sync event is now dispatched when reveal.js syncs (@hakimel)
  • Add removeHiddenSlides() to the API (@hakimel)
  • data-id is now supported for slide links (@hakimel)
  • data-preview-link value now takes precedence over the anchor's href (@hakimel in #3854)
  • Prevent iframes from stealing keyboard focus, controllable via the new preventIframeAutoFocus config option (@hakimel)
  • Pressing Enter on the active slide in overview mode now exits the overview and opens that slide (@tobi-or-not-tobi)
  • The display config option now supports !important (@boba-beba)
  • Distinct active/hover state difference in overview mode (@hakimel in #3780)

Fixes

  • Fix videos not autoplaying when navigating with control arrows on Android (@hakimel)
  • Fix initial video autoplay not working on Android (@hakimel)
  • Fix multiple videos started simultaneously sometimes failing to render in Mobile Safari (@hakimel)
  • Fix overview mode missing slide thumbnails in adjacent stacks with more than 10 vertical slides (closes #3754) (@hakimel)
  • Fix missing font in dracula theme (fixes #3781) (@hakimel)
  • Fix SCSS deprecation warnings by refactoring all themes to latest Sass syntax (@hakimel)

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.2.1...6.0.0

2025-03-28 20:51:23
reveal.js

5.2.1

Lightbox bug fixes and improvements

  • Prevent reveal.js keyboard shortcuts while lightbox is open (@tobi-or-not-tobi in https://github.com/hakimel/reveal.js/pull/3767)
  • Opening iframe lightboxes via [data-preview-link] now works all element types, not just <a> (@hakimel)
  • Lightbox state is now persisted/restored when calling Reveal.getState and Reveal.setState (@hakimel)
  • Lightbox now syncs between speaker view and main window (@hakimel)
  • Fix pause overlay/lightbox layering conflict (@tobi-or-not-tobi in https://github.com/hakimel/reveal.js/pull/3768)
  • Added lightbox example to demo.html

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.2.0...5.2.1

2025-03-19 19:03:33
reveal.js

5.2.0

New Feature: Lightbox

Any element in your presentation can now be turned into an image/video lightbox trigger. Clicking reveals a full-size lightbox overlay where users can view your image or video. This is great for things like clickable thumbnails in a gallery.

<!-- Click to show "A.png" in an overlay -->
<img src="A.png" data-preview-image>

<!-- Click show "B.png" in an overlay -->
<img src="A.png" data-preview-image="B.png">

<!-- Click to show "C.mp4" in an overlay and scale it to "cover" -->
<img src="A.png" data-preview-video="C.mp4" data-preview-fit="cover">

<!-- Works with any element type -->
<button data-preview-video="C.mp4">Play video</button>

Docs: revealjs.com/lightbox.

Here's what it looks like in action:

https://github.com/user-attachments/assets/3d7d5885-8099-412c-b26d-ef294adbbb3d

Changes

  • Upgrade to gulp 5.0.
  • Add controls: "speaker-only" config option for only showing controls in speaker view (@gpotter2 in https://github.com/hakimel/reveal.js/pull/3716)
  • Extend search API to include closeSearch and toggleSearch (@lechten in https://github.com/hakimel/reveal.js/pull/3685)
  • Automatic source code spellcheck via GitHub action (@yarikoptic in https://github.com/hakimel/reveal.js/pull/3602)
  • Math plugin now ignores code tags by default (@hakimel in 0d02d8a303a39b02c919d86c94ec477d1e1b107d)
  • Muted background videos now autoplay in the speaker view.
  • Prevent initialize from being called twice (@hakimel in 16ac4b00671a8ac6433091118c4ebd9b00255545)
  • Auto-animate no longer skips matching fragments on adjacent slides (@hakimel in 6dea2a50941bf3be6824b3eadc5cb17feb87eb5b)

Bug fixes

  • Fix reveal.js not covering full viewport height in iOS by switching to 100dvh (@hakimel in 6cebb771eec18e244a23719f94baf0e70242abe7)
  • Fix background video restarting when switching fragments from notes view (https://github.com/hakimel/reveal.js/issues/3633)
  • Fix gulp package not working in gulp 5 (@dennybiasiolli in https://github.com/hakimel/reveal.js/pull/3701)
  • Fix last slide not triggering slidechange event in scroll view (@hakimel in fe4a6e82b01df923085fa867656cf11180490465)

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.1.0...5.2.0

2024-04-11 14:45:27
reveal.js

5.1.0

Changes

  • Add the enter-fullscreen class to any element in your presentation to turn it into fullscreen trigger (@hakimel)
  • Video backgrounds now continue to play seamlessly across multiple slides (@hakimel)

https://github.com/hakimel/reveal.js/assets/629429/d1bcbced-5ede-4e2d-83fb-d3f3804eb674

Fixes

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.5...5.1.0

2024-02-26 18:17:44
reveal.js

5.0.5

Changes

  • Keyboard navigation support in scroll view (@hakimel in #3515)
  • Add F1 shortcut for showing help overlay (@gchriz in #3570)

Fixes

  • Fix postMessage XSS exploit (@hakimel in 3dade6117628beb7706b4abdc61c268ce281abbc)
  • Fix stack backgrounds not working in scroll view (@bouzidanas in #3568)
  • Fix fragmentshown and fragmenthidden not firing in scroll view (@bouzidanas, @ hakimel in #3580)

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.4...5.0.5

2023-12-22 20:18:06
reveal.js

5.0.4

Fixes

  • Missing slide backgrounds in mobile scroll view (#3554)
2023-12-15 16:03:32
reveal.js

5.0.3

Changes

  • Search plugin now supports searching for diacritics and searches full phrases (@t-fritsch in #3532)
  • Jump-to-slide now adapts to the configured slide number format (@hakimel in #3501)
  • Slide background XSS prevention (@EastSun5566 in https://github.com/hakimel/reveal.js/pull/3548)

Fixes

  • Fix speaker notes not appearing in PDF exports (@hakimel in #3535)
  • Fix exception when stepping backwards through code highlights (@hakimel in #3524)
  • Fix exception when navigating decks in mobile browsers (@hakimel in #3539)
  • Fix pause/help overlay position in scroll view (@hakimel in #3542)
  • Fix mobile scroll view navigation when fragments began at a index higher than 1 (@hakimel #3540)

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.2...5.0.3

2023-11-09 16:05:58
reveal.js

5.0.2

Changes

Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.0...5.0.2