Ship the Quarto report. Not the repository.
The .qmd renders beautifully on your machine. Then comes sharing: create a repo, configure a GitHub Pages workflow (for one document), or settle for a PDF that drops the interactive bits. With embed-resources: true the render is a single HTML file carrying its own CSS, figures and fonts. That file is one upload away from being a link.
Drop your Quarto report here — get a live link
.zip, folder, or single .html — free, no account, live for 30 days.
The artifact dead-end
The default sharing routes all drag in Git: commit the qmd, configure Pages or Netlify, wait on a build. Fine for a permanent site. Far too heavy for Tuesday's analysis.
Sending the raw .qmd or a PDF is a compromise either way: the reader can't run the source, and the PDF quietly drops the TOC links, the theme, and any htmlwidgets.
Two lines to a live link
Build your output like you already do, then hand the folder to the action:
Render the document to one HTML file
quarto render report.qmd --to html.github/workflows/ci.yml
- uses: bitgate/ship-page-action@v1
if: always()
with:
path: report.htmlOr with plain curl — no account needed
curl -fsS -X POST https://ship.page/deploy \
-H "Content-Type: text/html" \
--data-binary @report.html | jq -r .urlpath: report.html deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.
What you get
- embed-resources: true bakes figures, CSS and fonts into one HTML file. A verified 2 MB render with a matplotlib figure and a formatted table uploads as-is.
- The rendered page keeps its structure: floating TOC, section anchors, figure captions, syntax highlighting. Served untouched, exactly as quarto wrote it.
- Full websites work too. quarto render on a project writes _site/. Zip that up, and you have a multi-page drop with working navigation.
- Reproducible by construction: quarto render re-executes the code chunks. The numbers on the page can't drift from the code that made them.
- Anonymous links live 30 days. For a recurring report, a named API drop gives you one stable URL that redeploys in place.
Downloadable example
A rendered report. Served as-is.
A short pilot-results report (markdown, a matplotlib figure, a pandas table). Rendered with quarto 1.8 and embed-resources: true, then verified to load exactly as rendered. Download it and re-upload it yourself.
Questions
Can you host an entire site, or just single documents?
Both. A single .qmd with embed-resources outputs one HTML file—upload it directly. A website or book project renders into _site/—zip that folder and ship it. Navigation, search, and cross-links all work, because the folder is served exactly as rendered.
Do interactive figures survive?
Anything client-side works: htmlwidgets, plotly figures, Observable JS, tabsets. Anything that needed the render machine—Shiny server parts, live databases—does not. Quarto's HTML output is static by design, which is exactly what a drop serves.
What about quarto publish?
quarto publish targets Quarto Pub, Netlify, or Pages—each saddled with an account and a project model. If the report just needs a URL, render plus one upload skips all of that.
Does the viewer need Quarto (or any fonts) installed?
No. Rendering happens on your machine before anything gets uploaded. What ships is the finished HTML with resources embedded. The reader needs a browser and nothing else.
How to update a published report.
Anonymous drops are immutable: render again, upload again, get a new link. For a living document, deploy with an sp_ API key and a name—every render overwrites the same URL in place.
Related recipes
- Jupyter: Send a notebook to someone who doesn't run Jupyter
- Reveal.js: Your reveal.js deck deserves a URL. Not an email attachment.
- MkDocs: mkdocs build, then one POST — docs on a URL
Try it on your next run
Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.
Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.