# What changed in reveal.js

> 32 changes in reveal.js 6 from its official release notes, upgrade guides and advisories: 8 breaking, 2 security, 6 new APIs and options. Each one cited. Sources checked 2026-10-30. HTML: https://unstale.sh/npm/reveal.js/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## reveal.js 6

### Breaking changes

- Building and developing reveal.js now requires Node.js 22.12 or later. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- The data-preview-link value now takes precedence over the anchor's href. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- ES module files now use the .mjs extension; update direct file imports. Bare module specifier imports are unaffected. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- The project switches from gulp to Vite for building and running reveal.js. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Pressing Enter on the active slide in overview mode now exits overview and opens that slide. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Plugin files have moved from plugin/<name>/plugin.js to dist/plugin/<name>.js; update paths when loading plugins from the file system or a CDN. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- The dist/ prefix has been dropped from the public npm package CSS path. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Videos blocked from autoplaying with audio now play muted and show an unmute button instead of using the previous browser-dependent blocked state. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)

### Security

- Iframe preview URLs are validated to fix cross-origin XSS through the postMessage API. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Blacklists previewIframe in the postMessage API. (6.0.1) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.1)

### New APIs and options

- The `controls: 'speaker'` option shows controls only in speaker view. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Slide links now support the data-id attribute. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- The new configuration option controls whether iframes are prevented from stealing keyboard focus. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- The API adds removeHiddenSlides(). (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- An official React wrapper lets you build presentations using the Deck, Slide, Stack, Fragment, and Code components. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- A sync event is dispatched when reveal.js syncs. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)

### Performance

- Slide layout and scroll view performance is improved. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)

### Behavior and default changes

- Navigation controls, progress bars and media buttons scale for mobile viewports. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- The display configuration option now supports !important. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- The math plugin supports MathJax 4. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Screen readers now announce image and video alt tags, and slide content is better punctuated in screen reader text. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)

### Tooling

- TypeScript types are now included in the reveal.js package; users previously relying on @types/reveal.js can remove it and migrate to the included types. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)

### Fixes and other changes

- Markdown attributes target the whole list rather than only the last list item when separated by a blank line. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Offscreen slides no longer receive keyboard focus. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Pinch-to-zoom gestures no longer incorrectly trigger slide changes. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Slide scale is rounded to two decimal places. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Slides no longer repeatedly load and unload while scrolling. (6.0.2) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.2)
- Fixes an exception during media control removal in PDF exports. (6.0.1) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.1)
- Fixes cases where multiple videos started simultaneously sometimes failed to render in Mobile Safari. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Fixes missing thumbnails in adjacent stacks with more than 10 vertical slides. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Calling sync() now also updates slide classes, fixing issues after adding or removing slides. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
- Fixes videos not autoplaying on Android when navigating with control arrows and when autoplaying initially. (6.0.0) — [release notes](https://github.com/hakimel/reveal.js/releases/tag/6.0.0)
