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 — what to do when the report can't be public.
- S3 static hosting alternatives — the bucket-policy and CloudFront tax for one file.
- Vercel alternatives and Tiiny Host alternatives.
- Rendering HTML from a Gist
— why
raw.githubusercontent.comserves 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.
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:
index.htmlbecomes 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 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.
- Comments anchor to the content itself, so review happens on the report — see commenting 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.
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.
Related
- Upload an HTML file and get a link — the step-by-step
- Serve an HTML file locally — and why localhost isn't a share
- Someone sent me an HTML file · Share an HTML report