# Where to Host a Single HTML File — Every Option, and Where Each One Breaks

Canonical: https://commareports.com/host-html-file
Published: 2026-08-28

> GitHub Pages, S3, Netlify Drop, tiiny.host, ngrok, a local server. What each costs you for one HTML report — public by default, a repo you don't want, or an hour of setup — and what to use instead.

# Where should this HTML file live?

You have `report.html` — a coverage summary, a notebook export, a
dashboard someone generated — and you need it at a URL. Every option
below works. They differ in what they cost you, and the costs are not
mostly money.

## The options, honestly

| Option                    | Setup                             | Private?                 | Real cost                                               |
| ------------------------- | --------------------------------- | ------------------------ | ------------------------------------------------------- |
| Double-click the file     | none                              | totally                  | only you can see it; `file://` breaks data-driven pages |
| `python -m http.server`   | one command                       | localhost only           | not reachable by anyone else                            |
| GitHub Pages              | repo, branch, workflow            | **no** on free accounts  | a permanent repo for a throwaway artifact               |
| Netlify / Vercel          | drag-and-drop or a build          | one shared site password | a project, a team seat, a deploy history you maintain   |
| S3 + CloudFront           | bucket, policy, distribution, OAI | yes, with signed URLs    | an afternoon, then IAM forever                          |
| tiiny.host and similar    | drag-and-drop                     | paid tiers only          | a link with no identity behind it                       |
| ngrok / Cloudflare Tunnel | one command                       | obscurity                | dies when your laptop sleeps                            |
| Comma                     | drag-and-drop                     | per report, four levels  | none for the file; you get a review layer with it       |

Each of the middle rows has a page of its own here, written by someone
who actually hit the wall:

- [GitHub Pages alternatives](/alternatives/github-pages-alternatives) —
  what to do when the report can't be public.
- [S3 static hosting alternatives](/alternatives/s3-static-hosting-alternatives)
  — the bucket-policy and CloudFront tax for one file.
- [Vercel alternatives](/alternatives/vercel-alternatives) and
  [Tiiny Host alternatives](/alternatives/tiiny-host-alternatives).
- [Rendering HTML from a Gist](/alternatives/github-gist-html-alternatives)
  — why `raw.githubusercontent.com` serves your page as plain text.

## The question that actually decides it

Not "which host", but **how long does this file matter, and who is
allowed to see it?**

- **Forever, and public** — a docs site, a landing page. Use a static
  host with a build step. That's what they're for.
- **This week, and internal** — a test run, a scan, an analysis for
  three colleagues. A static host is the wrong shape: you're creating a
  permanent deployment artifact for something that stops mattering after
  the next run.

Most HTML reports are the second kind, which is why the first kind of
tool always feels like too much ceremony.

## Two things every static host gets wrong for reports

**It's a directory, not a file.** `nbconvert`, `genhtml`, Playwright,
Allure, Sphinx and Serenity all emit `index.html` plus a folder. Upload
one file and you get an unstyled skeleton — see
[why the report lost its CSS](/html-report-broken-css).

**There is nowhere to say "this number is wrong."** A static host serves
bytes. The feedback goes to Slack, gets separated from the thing it's
about, and is gone in a week.

## What Comma does instead

Drag the file, the folder, or a zip into
[Comma](https://commareports.com/):

- `index.html` becomes the report body; every asset uploads alongside
  and relative references are rewritten to the uploaded copies.
- Scripts still run — inside a sandboxed iframe with no same-origin
  access — so [interactive reports](/interactive-html-reports) stay
  interactive.
- **Access is a property of the report**, not of a site: private, your
  team, anyone signed in, or anyone with the link, with view, comment or
  edit rights. Full model in [sharing & access control](/docs/sharing).
- Comments anchor to the content itself, so review happens on the report
  — see [commenting on HTML](/comment-on-html).
- Re-publish to the same report id from CI and the URL is stable while
  each run appends a revision. See [publishing from CI](/docs/ci).

## Limits

Entry HTML 5 MB; assets 25 MB per file, 250 MB and 500 files per report;
60 API requests/minute per token.

## Try it

Comma is free — unlimited reports, unlimited commenters, unlimited
revision history.

**[Host your HTML file →](https://commareports.com/)**

### Related

- [Upload an HTML file and get a link](/upload-html-file-get-link) — the step-by-step
- [Serve an HTML file locally](/serve-html-file-locally) — and why localhost isn't a share
- [Someone sent me an HTML file](/open-html-file-online) · [Share an HTML report](/share-html-report)
