R Markdown vs. Quarto for automated reports: which one do you prefer?

I’ve been thinking about the pros and cons of R Markdown and Quarto, especially for automated reporting workflows in public health and epidemiology.

For a long time, R Markdown has been the standard tool for creating reproducible reports in R. It works very well for combining code, narrative text, tables, and figures into outputs like HTML, PDF, Word, and slides. Many of us have probably used it for surveillance bulletins, outbreak summaries, and regular analysis reports. One of its biggest strengths is that it is mature, widely documented, and deeply integrated into the R ecosystem.

On the other hand, Quarto is a newer publishing system that builds on many of the same ideas but aims to be more modern, flexible, and language-agnostic. It supports R, Python, Julia, and Observable, and it has a cleaner structure for larger publishing workflows. For teams working across tools or thinking about long-term scalability, Quarto can feel like a strong step forward.

For automated reports specifically

For automated reporting, both tools can work very well. R Markdown may be the easier option if you already have established scripts and templates running on a schedule. Quarto may be more attractive if you are building a new reporting system, want cleaner project organization, or expect the workflow to grow over time.

I think the choice often depends less on which tool is “better” overall and more on the context: team familiarity, maintenance needs, report complexity, and whether the workflow needs to support multiple output formats or multiple programming languages.

I’d be interested to hear how others in the community think about this. Have you used R Markdown, Quarto, or both for automated reports? What has worked well for you, and what challenges have you run into? Please share your experience, preferences, and any lessons learned from real projects!

1 Like

Hi,

I don’t really use automated reports, but I’ve been using Quarto for the past year and a half to generate interactive dashboards, webpages, and presentations for the courses I tutor at work. I really like its clean structure, the ability to generate Mermaid diagrams directly inside the document, and the option to render PDFs via Typst, which removes the need for LaTeX distributions. I also find the publishing options faster, especially when using Quarto inside Positron, as it offers better integration with GitHub.

2 Likes

Thanks both!

I love using Rmd workflows for very clear project structures.

E.g I’ll have a “main.R” script, which runs several scripts like load_packages.R, import_data, clean_data.R, etc etc, plus scripts for generating tables and figures.

This means that the Rmd itself is very light on code, with the chunks just printing objects from the environment. And I have visibility of all the scripts in my project because they’re all run from main.R

I am frustrated that Quarto does not allow this, because a .qmd file cannot read from the global environment.

Anyone else? Do you find this limitation relevant to your work?

1 Like

Thanks Luis for bringing the topic on. Here are some my reflections on .rmd and .qmd

  • First, .qmd is built on top of .rmd. It means that .qmd support almost features you could find in .rmd, plus additional features. That is one of the reason why we should migrate to .qmd. One of the reason why the team decided to rebrand .rmd because of its name would mislead ppl thing that it is only available for R, although .rmd could support a polyglot notebook with Python, Julia, stata, and many more type of code cells.
  • .rmd does not come with a CLI, so it would be harder to integrate in a CI,CD system
  • In term of familarity and maintainence, .qmd keep almost of .rmd syntax while unifying fragmented .rmd related packages. For example, chunk options can still be defined inside the chunk opening, or using fenced comment like #|. But the major change would be there is no bookdown, xaringan, etc. It forced people to rewrite the codebase, like we did with the epirhandbook and it was a huge amount of effort
  • And last but sadly, Yihui Xie, father of .rmd, stepped down in Posit 2 years ago, which mean that .rmd will no longer have any major update. Meanwhile, quarto is about having its v2.0 major update. It will be rewritten in Rust, so it is promisingly come up with Language Server Protocol, which is better to be integrated into modern data science stack, for example LLM support.

There are many more and I believe we could discuss in the meeting then!

2 Likes

It is also important to take into account the constraints of the work environment, where some packages may be restricted. For example, R Markdown is already well established, while Quarto is relatively new and its installation involves extra steps that may not yet be permitted in highly secure workplaces. For quick outputs, R Markdown offers a wide variety of templates, which is an advantage. However, Quarto represents the best path forward for growth.

1 Like

Love this inside knowledge @ph.ntluong95 !