6.0.2
- 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
6.0.1
- Upgrade to Vite 8 and TS 6
- Blacklist
previewIframein 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
6.0.0
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.
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.jstodist/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.jsfiles 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.jsyou can remove it and migrate. Note that the type names are slightly different, more info in the upgrade guide.
- 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:
alttags 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
syncevent is now dispatched when reveal.js syncs (@hakimel) - Add
removeHiddenSlides()to the API (@hakimel) data-idis now supported for slide links (@hakimel)data-preview-linkvalue now takes precedence over the anchor'shref(@hakimel in #3854)- Prevent iframes from stealing keyboard focus, controllable via the new
preventIframeAutoFocusconfig option (@hakimel) - Pressing Enter on the active slide in overview mode now exits the overview and opens that slide (@tobi-or-not-tobi)
- The
displayconfig option now supports!important(@boba-beba) - Distinct active/hover state difference in overview mode (@hakimel in #3780)
- 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
5.2.1
- 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.getStateandReveal.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
5.2.0
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
- 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
closeSearchandtoggleSearch(@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
codetags by default (@hakimel in 0d02d8a303a39b02c919d86c94ec477d1e1b107d) - Muted background videos now autoplay in the speaker view.
- Prevent
initializefrom being called twice (@hakimel in 16ac4b00671a8ac6433091118c4ebd9b00255545) - Auto-animate no longer skips matching fragments on adjacent slides (@hakimel in 6dea2a50941bf3be6824b3eadc5cb17feb87eb5b)
- 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
slidechangeevent in scroll view (@hakimel in fe4a6e82b01df923085fa867656cf11180490465)
Full Changelog: https://github.com/hakimel/reveal.js/compare/5.1.0...5.2.0
5.1.0
- Add the
enter-fullscreenclass 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
- MathJax3 plugin now works with in non-singleton reveal.js instances (@jokester in https://github.com/hakimel/reveal.js/pull/3595)
- Changing slides via swipe gestures now works when swiping on videos—unless their controls are visible (@hakimel)
- Fix exception when destroying uninitialized reveal.js instance (@hakimel in #3593)
- Fix videos restarting each time a fragment is shown (@hakimel in #2882)
- Fix broken backwards navigation in RTL mode (@hakimel)
- Fix error when the notes plugin receives a non-string message (@NatKarmios in https://github.com/hakimel/reveal.js/pull/3588)
- Fix question mark shortcut on non-English keyboard layouts (@lechten in https://github.com/hakimel/reveal.js/pull/3603)
- Fix
r-stackoverflow behavior in Chromium browsers (@alifeee in https://github.com/hakimel/reveal.js/pull/3598)
Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.5...5.1.0
5.0.5
- Keyboard navigation support in scroll view (@hakimel in #3515)
- Add F1 shortcut for showing help overlay (@gchriz in #3570)
- Fix postMessage XSS exploit (@hakimel in 3dade6117628beb7706b4abdc61c268ce281abbc)
- Fix stack backgrounds not working in scroll view (@bouzidanas in #3568)
- Fix
fragmentshownandfragmenthiddennot firing in scroll view (@bouzidanas, @ hakimel in #3580)
Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.4...5.0.5
5.0.3
- 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)
- 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
5.0.2
- Upgrade dependencies (@Mister-Hope in https://github.com/hakimel/reveal.js/pull/3505)
- Make Markdown plugin callable without a reveal deck instance (@hakimel in https://github.com/hakimel/reveal.js/issues/3517)
- Fix exception in speaker view (@hakimel #2512)
- Fix issue where a future vertical slide background sometimes flashed into view prematurely (@hakimel in https://github.com/hakimel/reveal.js/issues/3520)
Full Changelog: https://github.com/hakimel/reveal.js/compare/5.0.0...5.0.2