miinideckmiinideck
PricingUse casesBlog
Sign in
Comparisons

Quarto Pub vs RPubs vs Posit Connect vs GitHub Pages: where to publish a Quarto or R Markdown report

Quarto Pub, RPubs, Posit Connect Cloud, GitHub Pages or Netlify, an HTML attachment, or a private link: what each one is built for, why a rendered report loses its styling when you send the HTML on its own, and which route fits a report meant for a client or an advisor.

By miinideck·October 10, 2026·Updated October 13, 2026·9 min read

The render finished. The report looks right in your browser: the tabsets switch, the figures are sharp, the code is folded away. Now it has to reach a client, a co-author or your advisor, and you go looking for the publish button.

quarto publish offers you a handful of destinations, and RStudio has its own Publish button. Almost every one of them is built to put the report on the open web. That's what you want for a blog post or a teaching notebook. It's not what you want for a client's numbers or a chapter nobody has signed off yet.

TL;DR
  • Decide first whether the report is meant to be found or meant for specific people. Quarto Pub, for one, publishes every document publicly by design.
  • If it should be public, the one-command routes (Quarto Pub, or GitHub Pages and Netlify through quarto publish) are the right tools.
  • If it's for specific people, render one self-contained HTML file (embed-resources: true) or zip the report with its _files folder, then send it through a private-link host.
  • Sending the .html on its own is the most common way a Quarto report arrives broken. The styles and scripts live in a folder next to it.

Is the report meant to be public, or for specific people?

This one question removes half the options.

The one-click destinations are designed for publishing. Quarto's own documentation is explicit about its free service: "all documents and sites published to Quarto Pub are publicly visible." That isn't a flaw. Quarto Pub exists so that a talk, a tutorial or a paper's companion site can be read and cited by anyone.

A report for one client, a thesis chapter going to a committee, an analysis with a partner's data in it: those are deliveries, not publications. They need to open for the people you send them to and stay out of search, and that's a different kind of tool.

What are the ways to publish a Quarto or R Markdown report?

There are six common routes, and each one is designed for a different job:

WayWhat the reader getsWhat it's built forWhere it gets awkward
Quarto Pub (quarto publish quarto-pub)A public page on a quarto.pub addressPublishing openly, straight from the command lineEverything on it is public
RPubs (RStudio's Publish button)A page on rpubs.comEasy web publishing of R Markdown documents from RStudioPosit is retiring it and points new publishing to Connect Cloud (dates below the next table)
Posit Connect Cloud (quarto publish posit-cloud)A hosted page or appPosit's hosted publishing for Quarto, R Markdown, Shiny and other data contentOn the free plan, everything you publish is public
GitHub Pages or Netlify (quarto publish gh-pages / quarto publish netlify)A public websiteA report or book that lives in a repository and is versioned with itPublic by default; a password on these hosts is its own question
Email the HTML fileA file to download and openHanding over a copyThe default render leaves its styles behind (see the next section), and an attachment can't be updated
A private-link host (miinideck)The rendered report, open in their browser, at an unguessable address kept out of searchA finished report going to specific peopleStatic only: no Shiny, no live database, and it doesn't render anything for you

If you're weighing a password on GitHub Pages or Netlify, which free plans let you password-protect a page goes host by host.

The details that change (visibility, size limits, passwords) are in this second table, dated and taken only from each vendor's own pages:

Who can open itSize limitPassword on the page
Quarto PubAnyone. Every published document is public100 MB per document; 10 GB of bandwidth a month, described as a soft limitNot offered: every document is public
Posit Connect CloudAnyone, on the Free and Basic plans; private link sharing starts on EnhancedNot statedNot stated
GitHub PagesAnyone. On GitHub Free the repository must be public; on paid plans the site is public even from a private one1 GB per published siteNo. Private visibility needs GitHub Enterprise Cloud
miinideckPeople you send the link to; noindex by defaultNo-account uploads take 3 MB per file; Free tier 10 MB per file; Solo 25 MB ($4.99/mo); Studio 50 MB ($14.99/mo)Yes, on every tier, including a No-account upload (changing it later needs an account)

Checked on each vendor's own documentation on 1 October 2026. "Not stated" means we couldn't find it on their pages, not that they don't offer it. Vendors change their limits without telling us, so check their site for what's current. Our own row comes from our plan limits. RPubs' own homepage says it retires in June 2027 and that existing documents stay accessible through 31 December 2031, with Connect Cloud as Posit's recommended home for new publishing.

Why does my report lose its styling when I send the HTML?

Because by default the report isn't one file.

We rendered a plain Quarto HTML report on 30 September 2026 with the default settings. Quarto wrote report.html and, next to it, a report_files/ folder holding the stylesheets, the JavaScript and a web font the page loads. Send report.html on its own and the reader's browser looks for that folder, doesn't find it, and shows the report without its theme. Anything that depends on those scripts, such as tabsets and code folding, stops working too.

There are two fixes, and both work.

Put everything in one file. Add this to the document's YAML header:

format:
  html:
    embed-resources: true

Quarto then inlines the styles, scripts and images into the HTML itself. Our test report came out as a single file of about 1.2 MB, which is small enough to email or upload anywhere. Reports with heavy interactive widgets grow fast, because each widget's JavaScript library gets inlined too. Check the file size before you pick where it goes.

Or zip the folder. Put report.html and report_files/ into one ZIP and upload that. The folder structure survives, so the relative paths still resolve. On miinideck the HTML file at the top of the ZIP becomes the page, and every file type in our test render's folder (CSS, JavaScript, fonts) is one we serve. The best free way to host a ZIP bundle covers the ways a zipped site can still break.

R Markdown has the same choice under a different name: the self_contained option of html_document. The rmarkdown documentation lists it as on by default (self_contained = TRUE), so a knitted report is normally one file already; the same page notes that MathJax, if you use it, still loads from the web. We tested the Quarto side only. We haven't rendered an R Markdown report for this page, so open your own output folder and check what's actually there before you send it.

Which one should I use?

The short version:

  • It should be public and citable, like a talk, a tutorial or a paper's companion. Quarto Pub, or Posit Connect Cloud's free plan, which is public too.
  • It lives in a repository and should be versioned with the code, like a book or a project site. GitHub Pages or Netlify through quarto publish.
  • It needs to run code when someone opens it, like a Shiny app or a dashboard that queries a database. That needs a server. See the next section.
  • It's a finished report for a client, a co-author or a committee. Render one self-contained file (or zip the folder) and send it through a private link.

For the wider question of which channel suits a report going to one named client, sharing an HTML report with a client compares email, drives and links side by side.

What won't any of them fix?

A few things belong to the report, not to where you put it.

Server-side code needs a server. A Shiny app, a parameterised report that re-runs on demand, or anything that queries a database when it opens can't be carried by a static file, on any of the routes above. Shiny apps go on a service built for them, such as shinyapps.io or Posit Connect. What a file host carries is the pre-rendered slice, where the computation already ran.

Anything fetched when the page opens isn't in your file. A map widget loads its tiles from a tile server each time someone opens the report. Whether they load depends on that server and its rules, not on your render. We haven't tested map tiles on our own viewer, so if your report has a map, open the link in a private window before you send it.

What's rendered is readable. Hiding code with echo: false hides the code. The data behind an interactive chart is still inside the HTML, and anyone can view the page source. If a widget was built from row-level data you shouldn't hand over, aggregate before you render.

When a private link is the right shape

That's the job miinideck is built around: a finished report, going to specific people, where you want to keep hold of the link.

Compared with the routes above, what it changes is who controls the link after you send it. The address can't be guessed and stays out of search, so the report reaches the people you send it to and anyone they forward it to, and you can add a password when that isn't enough. With an account you can re-render and replace the file at the same link, so version two doesn't need a second email. Turn on Review and anyone holding the link can pin comments to a specific plot or table without making an account. The reader needs a browser and nothing else: no R, no account, no download.

The upload itself, and what you can do without an account, are on host a Quarto report as a private link; the file-size limit on each plan is on the pricing page. A report can also stand in for a slide deck. If you're presenting research findings, user research findings as a private HTML report walks through why that format holds up.


And if you're still deciding where your file should live at all, where to put a file online maps every option by what you're holding.

More in Comparisons

Best free way to send an HTML email to a client for approval before it goes out

A test send, your ESP's preview, a rendering-test service, a screenshot, the .html as an attachment, or a hosted page link: what each one shows the client, what a browser preview can and can't prove about an email, and the combination that gets sign-off without surprises.

October 14, 2026·8 min read

Best free way to share API docs with a partner before launch

Postman's published docs, SwaggerHub, a hosted docs portal, GitHub Pages, the raw OpenAPI file, or one rendered HTML page behind a private link: what each is built for, how to turn a spec into a single page with one command, and what to strip out before anyone outside sees it.

October 11, 2026·8 min read

Best free way to share an interactive chart as a link

A screenshot, an HTML attachment, Datawrapper, Flourish, Tableau Public, a public site, a drive, or a private link: what each one is built for, who ends up able to see the chart, and why the same Plotly chart can be 4.8 MB or 12 KB.

October 8, 2026·9 min read

Send your own private link.

miinideck turns a single HTML file into an unguessable link with optional password and expiry. Default-private, never indexed.

See pricingTry it free →
miinideck

HTML files, finally as links — for AI builders, agencies, and consultants. Default-noindex, default-private, default-yours.

Product

  • Pricing
  • Use cases
  • Free HTML hosting
  • Try it free

Resources

  • Blog
  • Free tools
  • Featured on
  • Report abuse

Legal

  • Privacy
  • Terms
Listed onmiinideck listed on Product Huntmiinideck listed on Faziermiinideck listed on TheSaaSDirmiinideck listed on AIToolHuntmiinideck listed on LaunchNest
© 2026 miinideckMade for people who don't want their work indexed.