Quarto Pub alternatives for private documents
quarto publish quarto-pub is the shortest distance between a .qmd and
a URL, and for public work it is excellent — free, fast, no account
plumbing beyond the first login.
Then someone renders the quarterly numbers with it, and the fact that the free service publishes to the open web stops being a detail.
Where Quarto Pub stops
- Public by default is the whole model. The free service is a publishing surface for open work. There is no per-document team, no email-domain gate, no named viewer list.
- No comment layer. Quarto renders beautiful documents that people immediately want to argue with, and there is nowhere in the document for the argument to go.
- Overwrite, not history. Re-publishing replaces what was there. "What did the forecast say before we changed the assumption?" has no answer.
- One-command publishing is IDE-shaped. It works from CI with a token, but the artifact that lands is still a public site, so scheduled internal reports end up somewhere else anyway.
The shortlist
1. Comma — render with Quarto, publish to an access-controlled URL
Nothing about the Quarto side changes. Render to a self-contained file and publish the file:
quarto render report.qmd --to html -M embed-resources:true
curl -X POST https://commareports.com/api/v1/reports \
-H "Authorization: Bearer $COMMA_API_TOKEN" \
-H "Content-Type: application/json" \
-d "$(jq -n --arg h "$(cat report.html)" \
'{title:"Q3 forecast", html:$h, visibility:"team"}')"
embed-resources: true matters: it inlines CSS, JS, fonts and images so
the document is one portable file, which is exactly what a report
destination wants. Observable JS cells, plotly figures and cross-references
keep working — the report renders in a sandboxed iframe with scripts
enabled.
What you get on top: private / team / domain / link visibility, anchored
comment threads on any paragraph, table cell or figure, and revisions at
one id — re-PATCH next quarter and the link you already circulated shows
the new render with the old ones still diffable.
Not for: hosting a multi-page Quarto website with routing. Publish those as a zip bundle, or keep them on a static host.
Pricing: Free — unlimited reports, viewers, commenters and revisions. Team and Enterprise are sales-led.
2. GitHub Pages — versioned, free, public unless you pay a lot
quarto publish gh-pages is a first-class target and git gives you real
history. Private Pages requires GitHub Enterprise. No comments on the
rendered page. See
GitHub Pages alternatives.
3. Netlify / Cloudflare Pages — when it is actually a site
quarto publish netlify exists, and for a Quarto book or website with
dozens of pages a real static host is the correct answer. Access control
means adding Netlify's password protection or Cloudflare Access on top.
See Cloudflare Access alternatives.
4. Posit Connect — scheduled execution behind your own login
If the .qmd needs to run on a schedule against internal data with SSO
in front of it, this is the product built for that. It is also a licensed
server you now operate. See
Posit Connect alternatives.
At a glance
| Destination | Access control | Versions | Comments | Best for |
|---|---|---|---|---|
| Comma | Private → public, 5 | Yes | Yes, anchored | Single-document reports |
| Quarto Pub | Public (free service) | No | No | Open work, papers, talks |
| GitHub Pages | Enterprise only | Via git | No | Docs that ship with a repo |
| Netlify / CF | Add-on / paid | Deploys | No | Quarto websites and books |
| Posit Connect | SSO | Yes | No | Scheduled R/Python execution |
Checked September 2026. Verify current plans before committing.
How to choose
- A paper, a tutorial, a talk? Quarto Pub. Public is the point.
- A book or a docs site? A static host — the multi-page shape is what they are for.
- One rendered document that a team responds to, every week? That is a report, not a site. Publish it where the replies can land.