# How to publish an HTML presentation online

Last verified: 2026-08-25
Canonical page: https://slidesfly.com/guides/publish-html-presentation-online

Publish an existing, self-contained HTML presentation in the Slidesfly browser publisher or with
the CLI, then open the returned reader URL before sharing it. Slidesfly starts after generation; it
does not create the presentation or replace a general website host.

## Verified source and live result

- Source artifact: https://slidesfly.com/examples/plain-html/deck.html
- Size: 3832 bytes
- SHA-256: b91c5bbb153a49599ad0c84a519392f3bfe80f53d131f2b0d2d36bda86273dc6
- Live reader: https://slidesfly.xyz/d/hPTjZDoztFZRUFkbDzGbgz
- Current production version: 4 (2026-08-03T00:04:58.067445Z)
- Current production asset: https://r.slidesfly.xyz/hPTjZDoztFZRUFkbDzGbgz/4/index.html
- Verification: the current reader asset and downloadable source were byte-for-byte identical on
  2026-08-25.

This proof applies to the linked example. Test every other deck independently.

## Browser workflow

1. **Download and inspect the example:** Download deck.html, open it directly, and use the arrow keys to confirm that all three slides work without a development server.
2. **Open the browser publisher:** Go to slidesfly.com/#publish, optionally enter a title, then drag deck.html into the upload area or choose the file.
3. **Wait for the live result:** A successful publish changes the result to “Deck is live” and shows the generated slidesfly.xyz reader URL.
4. **Open the reader before sharing:** Open the returned URL, check navigation and layout, then copy that exact URL instead of constructing one yourself.

## CLI workflow

Install Slidesfly from the official site and continue only when the version is
0.1.2 or newer.

```bash
curl -fsSL https://slidesfly.com/install.sh | sh
slidesfly --version
slidesfly publish ./deck.html --title "Plain HTML example" --json
```

A successful JSON result has `ok: true` and includes the generated `deck_id`, complete reader
`url`, `visibility: "unlisted"`, and `anonymous: true`. The private claim credential remains
in `~/.slidesfly/config.json` and is not printed.

## Failure recovery

- **FILE_NOT_FOUND:** The CLI path does not point to the downloaded HTML file. Recovery: Resolve the real path, confirm the file exists, and retry with that path.
- **INVALID_HTML:** The file is empty, has the wrong extension, or does not contain an HTML document marker. Recovery: Fix the artifact locally and open it in a browser before retrying.
- **MALICIOUS_CONTENT:** The single-file deck loads a remote script or matches another blocking security rule. Recovery: Bundle runtime code into the file. Do not auto-rewrite and retry rejected content.
- **QUOTA_EXCEEDED:** The file or publish count exceeds the current anonymous or account limit. Recovery: Follow the returned limit hint; compress the artifact or use an eligible account.
- **RATE_LIMITED:** Too many publish requests were sent in a short period. Recovery: Wait about 60 seconds and retry once instead of sending repeated requests.
- **Reader behavior breaks:** The deck depends on same-origin storage, remote runtime code, or another sandboxed capability. Recovery: Remove that dependency and retest navigation, fonts, images, and layout in the reader.

## Choose the right publishing path

- **Slidesfly:** The artifact is already a presentation and you want an anonymous first publish, a deck reader, and later same-URL updates. Boundary: It does not generate the presentation or run server-side application code.
- **General static hosting:** The artifact is a website or app and you need project-level routes, deployment configuration, or broader hosting control. Boundary: You own the hosting project, viewer experience, access policy, and update workflow.
- **Presentation editor:** You still need to create, edit, or collaboratively design the presentation before sharing it. Boundary: The workflow starts before the finished HTML artifact exists.
- **Send HTML or PDF directly:** Recipients need an offline attachment or a fixed document instead of a managed reader URL. Boundary: Attachments do not provide the same live-link, update, or reader behavior.

## Current limits and security boundaries

- Anonymous publishing accepts one self-contained HTML file, up to
  1 MB, and creates an unlisted deck. The anonymous rate
  limit is 3 decks per IP per UTC day.
- Uploaded HTML runs inside a sandboxed, opaque-origin iframe.
- Remote script sources are rejected for single-file decks; bundle runtime code into the artifact.
- Reader availability follows owner deletion, expiry, visibility, moderation, and current-version
  policy.

## Continue

- Publish in browser: https://slidesfly.com/#publish
- Quickstart: https://slidesfly.com/docs/quickstart
- CLI reference: https://slidesfly.com/docs/cli
- Security architecture: https://slidesfly.com/security
