Reveal.js workflow

Package Reveal.js with local runtime assets, then verify the reader

Use Slidesfly for a finished Reveal.js deck when you want a presentation-specific reader and stable update path. Keep reveal.mjs, CSS, plugins, fonts, and media inside one build directory, zip its contents with index.html at the root, publish from an eligible Pro account, and test the live reader before sharing.

Author
Slidesfly
Reviewed by
Slidesfly maintainers
Published
Updated
Tested with
Reveal.js 6.0.1, 46 local runtime files, a byte-matched index and reveal.mjs, archive extraction, and live reader navigation

10 minute workflow

When this Reveal.js publishing path fits

Use this workflow for an already authored Reveal.js deck when deck-specific viewing, same-URL updates, or public/unlisted sharing matters. Use a general static host when you need server behavior, arbitrary deployment configuration, or full control outside a presentation reader. Slidesfly publishes the built artifact; it does not generate or edit Reveal.js source.

Keep the Reveal.js runtime and assets local

Slidesfly accepts local relative script files inside a multi-file archive and rejects remote <script src> references. The verified source uses the Reveal.js 6 ES module runtime:

reveal-deck/
├── index.html
└── dist/
    ├── reveal.css
    ├── reveal.mjs
    ├── theme/black.css
    └── plugin/

Add only the plugins, themes, fonts, images, video, and data files your deck actually references. The proof fixture copies the full installed dist directory for a reproducible baseline, which is larger than a minimal deck.

Build and create a root-level archive

  1. Install the pinned runtime

    Commit reveal.js 6.0.1 and its lockfile with the deck source.
  2. Build or copy the local runtime

    Confirm build/index.html references ./dist/reveal.mjs and local styles.
  3. Zip from inside build

    This keeps index.html at the archive root rather than under build/.
npm install --save-exact reveal.js@6.0.1
npm run build
test -f build/index.html

cd build
zip -r ../reveal-deck.zip .
cd ..
unzip -l reveal-deck.zip | head

The verified artifact is 2,675,652 compressed bytes and 5,127,395 uncompressed bytes. If you add local assets, recheck both file count and uncompressed plan size.

Publish and later update the same reader URL

slidesfly login --json
slidesfly publish ./reveal-deck.zip   --title "Reveal.js product review"   --visibility unlisted   --json

# Later: keep the same reader URL
slidesfly publish ./reveal-deck-v2.zip --id YOUR_DECK_ID --json

A successful publish returns the generated deck ID and reader URL:

{
  "ok": true,
  "data": {
    "deck_id": "YOUR_GENERATED_DECK_ID",
    "url": "https://slidesfly.xyz/d/YOUR_GENERATED_DECK_ID",
    "visibility": "unlisted",
    "anonymous": false
  }
}

Public indexing, expiry, deletion, and quarantine remain separate policies enforced around the sandboxed reader. Multi-file decks support public or unlisted visibility, not private visibility.

Reveal.js reader compatibility checklist

CheckVerified behaviorWhat can still vary
Runtimedist/reveal.mjs loads from the versioned reader path.Custom bundlers and older Reveal.js import paths.
NavigationThe live deck advanced from slide 1 to slide 2.Vertical slides, fragments, touch, and custom key bindings.
PluginsLocal relative plugin modules are allowed.Every plugin must be included and tested; CDN imports are rejected.
Storage and linksThe iframe has an opaque origin and no top-navigation permission.Code that expects cookies or persistent browser storage.
sandbox="allow-scripts allow-popups allow-popups-to-escape-sandbox allow-forms"

Reveal.js publishing failures and recovery

FailureRecovery
AUTH_REQUIREDRun the supported login flow, then retry the zip publish.
FORBIDDENUse an eligible Pro account and public or unlisted visibility.
INVALID_HTMLMove index.html to the archive root and remove unsafe or excess files.
MALICIOUS_CONTENTReplace CDN script imports with local relative runtime files.
Missing theme, plugin, or mediaInspect reader requests, correct relative paths, rebuild, and republish.

Reveal.js 6.0.1 live proof

The generated and reader index.html files are both 1,654 bytes with SHA-256 c21712a5f88d90c5ad8c99292696c22dff6c69a7ba34550b1e7356e534a31bc3. The local and reader dist/reveal.mjs files are both 139,091 bytes with SHA-256 4bbf460b02602dd2d73c86622a84b7004aca667f8719b9ce3e89fcb64a7dcfaa.