Reveal.js workflow

Publish Reveal.js without breaking its runtime assets

Use Slidesfly for a finished Reveal.js presentation when you want a deck-specific reader URL and account-managed updates or sharing controls. Package index.html with every local runtime, theme, plugin, and media asset at the archive root, publish the zip, then verify navigation inside Slidesfly’s sandboxed content-domain reader.

Last tested: July 28, 202610 minute workflow

When this path fits—and when it does not

Use this path for an already built Reveal.js deck when deck-specific viewing, same-URL updates, or controlled sharing matters. Use a general static host when you need arbitrary server behavior, custom deployment infrastructure, or control beyond a presentation reader. Slidesfly does not generate or edit Reveal.js source.

Use local assets

Slidesfly rejects remote script references in uploaded deck content. Keep the Reveal.js runtime and any plugins inside the presentation directory. A typical output looks like:

reveal-deck/
├── index.html
├── dist/
│   ├── reveal.css
│   ├── reveal.js
│   └── theme/
├── plugin/
└── assets/

Package the deck

  1. Open index.html locally

    Check horizontal and vertical navigation, code blocks, images, speaker-independent playback, and theme files.
  2. Remove remote scripts

    Download and reference the required runtime locally. Keep every relative path inside the deck directory.
  3. Create a root-level archive

    Run the zip command from inside the deck directory so index.html is not nested under another folder.
cd reveal-deck
zip -r ../reveal-deck.zip .
cd ..

Publish and update

slidesfly login --json
slidesfly publish ./reveal-deck.zip --title "Reveal.js product review" --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 stable reader URL:

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

The example is unlisted. Public indexing, private access, password protection, allowlists, expiry, deletion, and quarantine remain separate policies enforced around the sandboxed reader.

Reader compatibility checklist

CheckWhy
Arrow keys and touchConfirm both the deck runtime and outer reader behave predictably.
FullscreenThe Slidesfly reader uses F for shell fullscreen.
PluginsSyntax highlighting and Markdown plugins must be included locally.
Browser storageThe opaque-origin iframe cannot provide normal localStorage or cookies.
External linksPopups work, but top-level navigation is not granted to the deck iframe.

Publishing failures and recovery

ErrorRecovery
AUTH_REQUIREDRun the official login flow, then retry the zip publish.
BILLING_NOT_ENABLEDDo not imply checkout is available; verify Pricing and use another host.
MALICIOUS_CONTENTRemove remote scripts or appeal a false positive through the report route.
QUOTA_EXCEEDEDReduce archive size, remove unused assets, or use an eligible plan.

Framework reference: Reveal.js installation documentation.