hakimel/reveal.js
 Watch   
 Star   
 Fork   
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.jsdist/plugin/notes.js, plugin/highlight/monokai.cssdist/plugin/highlight/monokai.css)
  • ES module paths renamed.esm.js files are now .mjs (e.g. dist/reveal.esm.jsdist/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.cssreveal.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

2023-10-27 20:57:55
reveal.js

5.0.0

Scroll view

reveal.js 5.0 comes with a groundbreaking new feature; scroll view! (https://github.com/hakimel/reveal.js/pull/3482)

Slide decks are a great format for giving presentations, but scrollable web pages are easier for viewers to read on their own.

The scroll view gives you the best of both worlds—without any extra effort. Present in the format best suited for presenting, share in the format best suited for consumption.

Here's what it looks in action:

https://github.com/hakimel/reveal.js/assets/629429/bd0e35ed-a859-4703-84ed-aac87702a6b6

Want to try it out yourself? Check out the announcement deck I put together for slides.com 👉 https://slides.com/news/scroll-mode/scroll

How to use it

The scroll view is enabled by initializing reveal.js with view: "scroll" or by appending ?view=scroll to a deck URL.

Reveal.initialize({ view: 'scroll' });

It's possible to fine tune this view through multiple new config options. Full documentation available at https://revealjs.com/scroll-view.

Breaking change

The scroll view is automatically enabled for viewports below 435px wide. This is done because I believe the scroll view to be a superior way to browse any deck on a mobile device. If you want to revert this behavior and always paginate between slides, see scrollActivationWidth:

Reveal.initialize({ scrollActivationWidth: null })

Changes

  • The PDF print view can now be activated via config Reveal.initialize({ view: 'print' }) (@hakimel in #3482)
  • The new URL query for activating the print view is ?view=print. It used to be ?print-pdf, which is still supported for backwards compatibility. (@hakimel in #3482)

Fixes

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