<?xml version="1.0" encoding="UTF-8"?>
<rss  xmlns:atom="http://www.w3.org/2005/Atom" 
      xmlns:media="http://search.yahoo.com/mrss/" 
      xmlns:content="http://purl.org/rss/1.0/modules/content/" 
      xmlns:dc="http://purl.org/dc/elements/1.1/" 
      version="2.0">
<channel>
<title>Quarto (Pre-release)</title>
<link>https://prerelease.quarto.org/docs/blog/</link>
<atom:link href="https://prerelease.quarto.org/docs/blog/index.xml" rel="self" type="application/rss+xml"/>
<description></description>
<image>
<url>https://prerelease.quarto.org/quarto-blog-v2.png</url>
<title>Quarto (Pre-release)</title>
<link>https://prerelease.quarto.org/docs/blog/</link>
</image>
<generator>quarto-1.10.1</generator>
<lastBuildDate>Tue, 24 Mar 2026 00:00:00 GMT</lastBuildDate>
<item>
  <title>Quarto 1.9</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2026-03-24-1.9-release/</link>
  <description><![CDATA[ 






<p>Quarto 1.9 is out! You can get the current release from the <a href="../../../../docs/download/index.html">download page</a>.</p>
<p>Sharing your work just got easier with integrated Posit Connect Cloud publishing. Typst users will appreciate book project support and article layouts, while experimental PDF accessibility standards bring PDF/A and PDF/UA compliance to both LaTeX and Typst. This release also introduces LLM-friendly output for websites, the <code>quarto use brand</code> command for keeping your brand assets in sync, and list tables for authoring complex tables with familiar bullet syntax.</p>
<p>You can read about these improvements and some other highlights below. You can find all the changes in this version in the <a href="../../../../docs/download/changelog/1.9/">Release Notes</a>.</p>
<section id="publish-to-posit-connect-cloud" class="level2">
<h2 class="anchored" data-anchor-id="publish-to-posit-connect-cloud">Publish to Posit Connect Cloud</h2>
<p>You can now publish documents and websites to <a href="https://connect.posit.cloud">Posit Connect Cloud</a> directly from the command line. For example, publish your Quarto website project with:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> publish posit-connect-cloud</span></code></pre></div></div>
</div>
<p>Posit Connect Cloud is a hosted platform for sharing data applications and documents without managing your own infrastructure. It includes a free tier for unlimited static document publishing. Read more in <a href="../../../../docs/publishing/posit-connect-cloud.html">Publishing &gt; Posit Connect Cloud</a>.</p>
</section>
<section id="improvements-to-typst-support" class="level2">
<h2 class="anchored" data-anchor-id="improvements-to-typst-support">Improvements to Typst Support</h2>
<p>Quarto 1.9 brings substantial improvements to Typst output:</p>
<ul>
<li><a href="../../../../docs/books/book-output.html#typst-output">Book projects</a> can now render to Typst via the bundled <code>orange-book</code> extension, with chapter numbering, cross-references, and professional textbook styling.</li>
<li><a href="../../../../docs/authoring/article-layout.html">Article layout</a> support lets you place content in the margins, create full-width figures, or add side notes.</li>
<li>New options: <code>mathfont</code>, <code>codefont</code>, <code>linestretch</code>, <code>linkcolor</code>, <code>citecolor</code>, <code>filecolor</code>, <code>thanks</code>, and <code>abstract-title</code>.</li>
<li><a href="../../../../docs/output-formats/typst.html#theorems">Theorem styling</a> with four appearance options: <code>simple</code>, <code>fancy</code>, <code>clouds</code>, or <code>rainbow</code>.</li>
</ul>
<p>We’ll have a detailed blog post on all the Typst improvements soon.</p>
</section>
<section id="pdf-accessibility-experimental" class="level2">
<h2 class="anchored" data-anchor-id="pdf-accessibility-experimental">PDF Accessibility (Experimental)</h2>
<p>We’re rolling out experimental support for PDF accessibility standards in 1.9. The new <code>pdf-standard</code> option enables PDF/A archival formats and PDF/UA accessibility compliance for both LaTeX and Typst outputs. Alt text from <code>fig-alt</code> attributes now passes through to PDF for screen reader support, and Typst gains support for alt text on cross-referenced equations.</p>
<p>Read more in our <a href="../../../../docs/blog/posts/2026-03-05-pdf-accessibility-and-standards/">PDF Accessibility and Standards blog post</a> or the documentation for <a href="../../../../docs/output-formats/pdf-basics.html#pdf-accessibility-standards">LaTeX</a> and <a href="../../../../docs/output-formats/typst.html#pdf-accessibility-standards">Typst</a>.</p>
</section>
<section id="output-for-llms" class="level2">
<h2 class="anchored" data-anchor-id="output-for-llms">Output for LLMs</h2>
<p>Quarto can now generate <a href="https://llmstxt.org/">llms.txt</a> format output for your website, making your content more accessible to large language models and AI-powered tools.</p>
<p>Enable it in your website configuration:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_quarto.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" data-filename="_quarto.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">website</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb2-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">title</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"My Documentation"</span></span>
<span id="cb2-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">llms-txt</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">true</span></span></code></pre></div></div>
</div>
<p>When you render your site, Quarto creates:</p>
<ul>
<li>An <code>llms.txt</code> index file at the root of your site listing all pages</li>
<li>A <code>.llms.md</code> markdown file alongside each HTML page (e.g., <code>guide.html</code> gets <code>guide.llms.md</code>)</li>
</ul>
<p>The markdown files contain clean versions of your content—navigation, sidebars, and scripts are stripped out; tables, code blocks, and callouts are converted to standard markdown.</p>
<p>Read more, including how to customize what appears in LLM output, in <a href="../../../../docs/websites/website-llms.html">Websites &gt; Output for LLMs</a>.</p>
</section>
<section id="quarto-use-brand-command" class="level2">
<h2 class="anchored" data-anchor-id="quarto-use-brand-command"><code>quarto use brand</code> Command</h2>
<p>Keep your project’s brand assets in sync with an external source using the new <code>quarto use brand</code> command:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> use brand myorg/shared-brand</span></code></pre></div></div>
</div>
<p>The command copies brand files from a GitHub repository, local directory, or zip archive into your project’s <code>_brand/</code> directory. Quarto walks you through each step—confirming trust for remote sources, creating the directory if needed, and asking whether to overwrite or remove files.</p>
<p>See <a href="../../../../docs/authoring/brand.html#quarto-use-brand">Guide &gt; Brand</a> for <code>--dry-run</code>, <code>--force</code>, and other options.</p>
</section>
<section id="list-tables" class="level2">
<h2 class="anchored" data-anchor-id="list-tables">List Tables</h2>
<p>List tables provide a new syntax for creating tables with complex content—multiple paragraphs, code blocks, or nested lists—using familiar bullet syntax instead of grid table formatting:</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb4-1">::: {.list-table}</span>
<span id="cb4-2"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>- Function</span>
<span id="cb4-3"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">  - </span>Description</span>
<span id="cb4-4"></span>
<span id="cb4-5"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>- <span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">`sum()`</span></span>
<span id="cb4-6"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">  - </span>Add values:</span>
<span id="cb4-7"></span>
<span id="cb4-8">    <span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```python</span></span>
<span id="cb4-9">    <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>])</span>
<span id="cb4-10">    <span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span>
<span id="cb4-11"></span>
<span id="cb4-12"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">- </span>- <span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">`len()`</span></span>
<span id="cb4-13"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">  - </span>Count items:</span>
<span id="cb4-14"></span>
<span id="cb4-15"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">    - </span>Works on lists</span>
<span id="cb4-16"><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">    - </span>Works on strings</span>
<span id="cb4-17">:::</span></code></pre></div></div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<table class="caption-top table">
<thead>
<tr class="header">
<th style="text-align: left;">Function</th>
<th style="text-align: left;">Description</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td style="text-align: left;"><p><code>sum()</code></p></td>
<td style="text-align: left;"><p>Add values:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1"><span class="bu" style="color: null;
background-color: null;
font-style: inherit;">sum</span>([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>, <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>])</span></code></pre></div></div></td>
</tr>
<tr class="even">
<td style="text-align: left;"><p><code>len()</code></p></td>
<td style="text-align: left;"><p>Count items:</p>
<ul>
<li>Works on lists</li>
<li>Works on strings</li>
</ul></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<p>Each top-level bullet represents a row; nested bullets represent cells. This syntax is much easier to maintain than grid tables, especially when cells contain code or other block elements.</p>
<p>List tables support all the usual table features: captions, cross-references, column widths, and alignment. Thanks to Martin Fischer for the original development, with contributions from Albert Krewinkel and William Lupton.</p>
<p>Find all the details in <a href="../../../../docs/authoring/tables.html#list-tables">Guide &gt; Tables</a>.</p>
</section>
<section id="other-highlights" class="level2">
<h2 class="anchored" data-anchor-id="other-highlights">Other Highlights</h2>
<ul>
<li><p><a href="../../../../docs/websites/website-search.html#search-result-highlighting">Search Result Highlighting</a>: Improved highlighting of search terms on destination pages, with persistent marks, automatic tab activation for matches inside tabsets, and cross-element highlighting for multi-word searches.</p></li>
<li><p>Privacy-focused features for websites:</p>
<ul>
<li><p><a href="../../../../docs/websites/website-tools.html#cookie-consent">A privacy-first default for cookie consent</a>: The default for cookie consent has changed to <code>type: express</code>, providing opt-in consent that blocks cookies until users explicitly agree. This privacy-conscious default is designed with modern privacy regulations in mind.</p></li>
<li><p><a href="../../../../docs/websites/website-search.html#cookie-consent-and-user-tracking">Algolia Search Insights avoids cookies</a>: Use Algolia Insights now uses persistent cookies only if <code>cookie-consent</code> is active, and the user has opted-in.</p></li>
<li><p><a href="../../../../docs/websites/website-tools.html#plausible-analytics">Use Plausible Analytics</a>: Add privacy-friendly Plausible Analytics to websites via the <code>plausible-analytics</code> configuration option.</p></li>
</ul></li>
<li><p><a href="../../../../docs/authoring/videos.html#accessibility-label"><code>aria-label</code> for videos</a>: Improve accessibility of embedded videos by providing custom descriptive labels for screen readers instead of the default “Video Player” label.</p></li>
<li><p><a href="../../../../docs/output-formats/pdf-basics.html#syntax-highlighting">New <code>syntax-highlighting</code> Option</a>: Replaces the deprecated <code>highlight-style</code> (Pandoc 3.8). Supports style names, custom <code>.theme</code> files, <code>none</code>, or <code>idiomatic</code> for format-native highlighting.</p></li>
<li><p>Metadata and brand extensions now work without a <code>_quarto.yml</code> project. A temporary default project is created in memory.</p></li>
<li><p><a href="../../../../docs/extensions/engine.html">Engine extensions</a> allow replacement of the execution engine:</p>
<ul>
<li>Julia is now a bundled extension instead of being built-in.</li>
<li><strong>quarto-marimo</strong> will soon change from a filter extension to an engine extension.</li>
<li>New <code>quarto create extension engine</code> command.</li>
<li>New <code>quarto call build-ts-extension</code> command.</li>
<li>New <strong>Quarto API</strong> for engine extensions to use. (This is in flux and will not be documented for the next few releases, but <a href="https://quarto-dev.github.io/dev-notes/posts/2026-03-04/">there is a dev blog post about it</a>.)</li>
</ul></li>
</ul>
<p>Dependency updates:</p>
<ul>
<li><code>pandoc</code> updated to 3.8.3</li>
<li><code>typst</code> updated to 0.14.2</li>
<li><code>esbuild</code> updated to 0.25.10</li>
<li><code>deno</code> updated to 2.4.5</li>
<li><code>mermaid</code> updated to 11.12.0</li>
</ul>
</section>
<section id="acknowledgements" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgements">Acknowledgements</h2>
<p>We’d like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:</p>
<p><a href="https://github.com/CoryMcCartan">CoryMcCartan</a>, <a href="https://github.com/DanChaltiel">DanChaltiel</a>, <a href="https://github.com/Data-Wise">Data-Wise</a>, <a href="https://github.com/FrankwaP">FrankwaP</a>, <a href="https://github.com/Joao-O-Santos">Joao-O-Santos</a>, <a href="https://github.com/LukasDSauer">LukasDSauer</a>, <a href="https://github.com/MBe-iUS">MBe-iUS</a>, <a href="https://github.com/MarcoPortmann">MarcoPortmann</a>, <a href="https://github.com/MariaBarrioSchez">MariaBarrioSchez</a>, <a href="https://github.com/MateusMolina">MateusMolina</a>, <a href="https://github.com/Selbosh">Selbosh</a>, <a href="https://github.com/ThePurox">ThePurox</a>, <a href="https://github.com/TucoFernandes">TucoFernandes</a>, <a href="https://github.com/aecoleman">aecoleman</a>, <a href="https://github.com/amirhome61">amirhome61</a>, <a href="https://github.com/andrewheiss">andrewheiss</a>, <a href="https://github.com/azankl">azankl</a>, <a href="https://github.com/bensoltoff">bensoltoff</a>, <a href="https://github.com/bruvellu">bruvellu</a>, <a href="https://github.com/byzheng">byzheng</a>, <a href="https://github.com/cbrnr">cbrnr</a>, <a href="https://github.com/chendaniely">chendaniely</a>, <a href="https://github.com/chi-raag">chi-raag</a>, <a href="https://github.com/christopherkenny">christopherkenny</a>, <a href="https://github.com/coatless">coatless</a>, <a href="https://github.com/cynthiahqy">cynthiahqy</a>, <a href="https://github.com/darwindarak">darwindarak</a>, <a href="https://github.com/davidskalinder">davidskalinder</a>, <a href="https://github.com/dmenne">dmenne</a>, <a href="https://github.com/fconil">fconil</a>, <a href="https://github.com/fkgruber">fkgruber</a>, <a href="https://github.com/fkohrt">fkohrt</a>, <a href="https://github.com/fredguth">fredguth</a>, <a href="https://github.com/gadenbuie">gadenbuie</a>, <a href="https://github.com/apps/github-actions">github-actions[bot]</a>, <a href="https://github.com/gsathler-vi">gsathler-vi</a>, <a href="https://github.com/hamgamb">hamgamb</a>, <a href="https://github.com/herosi">herosi</a>, <a href="https://github.com/icarusz">icarusz</a>, <a href="https://github.com/idavydov">idavydov</a>, <a href="https://github.com/jeremy886">jeremy886</a>, <a href="https://github.com/jkrumbiegel">jkrumbiegel</a>, <a href="https://github.com/jmcphers">jmcphers</a>, <a href="https://github.com/jonas37">jonas37</a>, <a href="https://github.com/jorherre">jorherre</a>, <a href="https://github.com/jreades">jreades</a>, <a href="https://github.com/jromanowska">jromanowska</a>, <a href="https://github.com/jtbayly">jtbayly</a>, <a href="https://github.com/juleswg23">juleswg23</a>, <a href="https://github.com/juliasilge">juliasilge</a>, <a href="https://github.com/kathsherratt">kathsherratt</a>, <a href="https://github.com/kusnezoff-alexander">kusnezoff-alexander</a>, <a href="https://github.com/lrrichter">lrrichter</a>, <a href="https://github.com/lwjohnst86">lwjohnst86</a>, <a href="https://github.com/maelle">maelle</a>, <a href="https://github.com/matthiasbaitsch">matthiasbaitsch</a>, <a href="https://github.com/mipmip">mipmip</a>, <a href="https://github.com/mstrms2000">mstrms2000</a>, <a href="https://github.com/multimeric">multimeric</a>, <a href="https://github.com/mvuorre">mvuorre</a>, <a href="https://github.com/mykolaskrynnyk">mykolaskrynnyk</a>, <a href="https://github.com/nichtich">nichtich</a>, <a href="https://github.com/nithinmkp">nithinmkp</a>, <a href="https://github.com/nrichers">nrichers</a>, <a href="https://github.com/orbsmiv">orbsmiv</a>, <a href="https://github.com/paytonej">paytonej</a>, <a href="https://github.com/petrelharp">petrelharp</a>, <a href="https://github.com/phongphuhanam">phongphuhanam</a>, <a href="https://github.com/pm-gusmano">pm-gusmano</a>, <a href="https://github.com/posit-snyk-bot">posit-snyk-bot</a>, <a href="https://github.com/prosoitos">prosoitos</a>, <a href="https://github.com/rabyj">rabyj</a>, <a href="https://github.com/sasja-san">sasja-san</a>, <a href="https://github.com/sbwiecko">sbwiecko</a>, <a href="https://github.com/serialc">serialc</a>, <a href="https://github.com/spaette">spaette</a>, <a href="https://github.com/spraetor">spraetor</a>, <a href="https://github.com/stragu">stragu</a>, <a href="https://github.com/szimmer">szimmer</a>, <a href="https://github.com/the-solipsist">the-solipsist</a>, <a href="https://github.com/thomasp85">thomasp85</a>, <a href="https://github.com/yyzeng">yyzeng</a>, <a href="https://github.com/zhe00a">zhe00a</a>.</p>
<p>The airplane departure emoji in the <a href="thumbnail.png">listing and social card image</a> for this post comes from <a href="https://openmoji.org/" class="external">OpenMoji</a>– the open-source emoji and icon project. License: <a href="https://creativecommons.org/licenses/by-sa/4.0/#" class="external">CC BY-SA 4.0</a></p>


</section>

 ]]></description>
  <category>Quarto 1.9</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2026-03-24-1.9-release/</guid>
  <pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2026-03-24-1.9-release/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>PDF Accessibility and Standards</title>
  <dc:creator>Gordon Woodhull</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2026-03-05-pdf-accessibility-and-standards/</link>
  <description><![CDATA[ 






<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Quarto 1.9 Feature
</div>
</div>
<div class="callout-body-container callout-body">
<p>This post is part of a series highlighting new features in the 1.9 release of Quarto. Get the latest release on the <a href="../../../../docs/download/index.html">download page</a>.</p>
</div>
</div>
<p>2025 was a big year for PDF accessibility. LaTeX and Typst both released support for PDF tagging and accessibility standards, just in time for new regulations in the <a href="https://en.wikipedia.org/wiki/European_Accessibility_Act">EU</a> (June 2025) and <a href="https://accessible.org/ada-title-ii-web-accessibility/">US</a> (April 2026).</p>
<p>Quarto 1.9 brings this support to you as a Quarto user.</p>
<section id="what-pdf-standards-do" class="level2">
<h2 class="anchored" data-anchor-id="what-pdf-standards-do">What PDF Standards Do</h2>
<p>Currently LaTeX supports the newer UA-2 standard, and Typst supports the older UA-1 standard. Typst is likely to have UA-2 support later in 2026.</p>
<p>Both standards instruct the PDF renderer to provide screen readers:</p>
<ul>
<li>The semantic structure of the text (title, heading, paragraph, figure, etc)</li>
<li>The natural reading order</li>
<li>Spatial coordinates for highlighting and assistive navigation</li>
<li>Required metadata such as title and language</li>
</ul>
</section>
<section id="how-to-enable-a-pdf-standard-in-quarto" class="level2">
<h2 class="anchored" data-anchor-id="how-to-enable-a-pdf-standard-in-quarto">How to enable a PDF Standard in Quarto</h2>
<p>In Quarto 1.9, specify a PDF standard for your document or project with <code>pdf-standard</code></p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<p><strong>PDF (LaTeX)</strong></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pdf</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pdf-standard</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> ua-2</span></span></code></pre></div></div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<p><strong>Typst</strong></p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb2-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">typst</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb2-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">pdf-standard</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> ua-1</span></span></code></pre></div></div>
</div>
</div>
</div>
<p><code>pdf-standard</code> takes a single standard name or list of standard names. PDF version is used if provided in the list, but otherwise inferred from the standard.</p>
<p>If you specify a PDF standard, Quarto first instructs LaTeX or Typst to use the standard when producing the PDF, and then validates the output PDF against the standard using veraPDF, an open-source PDF validation tool. If veraPDF is not installed, you’ll get a warning but still receive a PDF – it just won’t be validated.</p>
<div class="callout callout-style-default callout-note callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Installing veraPDF
</div>
</div>
<div class="callout-body-container callout-body">
<p>To install veraPDF, you’ll first need Java, then run:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb3-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> install verapdf</span></code></pre></div></div>
</div>
</div>
</div>
<p>When a document passes validation, you’ll see output like:</p>
<pre><code>[verapdf]: Validating my-document.pdf against PDF/UA-2... PASSED</code></pre>
</section>
<section id="creating-accessible-pdfs" class="level2">
<h2 class="anchored" data-anchor-id="creating-accessible-pdfs">Creating accessible PDFs</h2>
<p>Quarto’s Markdown-based workflow handles many accessibility requirements automatically:</p>
<ul>
<li>Document metadata (title, author, date, language) flows into the PDF’s built-in metadata fields.</li>
<li>The semantic structure of Markdown satisfies PDF tagging requirements. For Typst this is always enabled; for LaTeX it is enabled when you specify a standard that requires it.</li>
<li>Alt text for images is carried through to the PDF for screen readers.</li>
</ul>
<p>But you do need to make sure your document has:</p>
<ul>
<li>A <strong>title</strong> in the YAML front matter.</li>
<li><strong>Alt text for every image</strong>, specified with <code>fig-alt</code>. See <a href="https://prerelease.quarto.org/docs/authoring/figures.html#alt-text">Figures</a> for details.</li>
</ul>
<p>See the <a href="https://prerelease.quarto.org/docs/output-formats/pdf-basics.html#accessibility-requirements">LaTeX</a> and <a href="https://prerelease.quarto.org/docs/output-formats/typst.html#accessibility-requirements">Typst</a> documentation for more details.</p>
</section>
<section id="if-your-document-fails-validation" class="level2">
<h2 class="anchored" data-anchor-id="if-your-document-fails-validation">If your document fails validation</h2>
<p>LaTeX does not perform validation during PDF generation, so if veraPDF validation fails, that’s a warning, and you still get a partially-accessible PDF as long as you use <code>pdf-standard: ua-2</code>.</p>
<p>Typst fails and does not produce a PDF if its built-in validation fails during PDF generation. However, in Typst all accessibility features are on by default, so you can generate a partially-accessible PDF by rendering without <code>pdf-standard</code>.</p>
</section>
<section id="current-limitations" class="level2">
<h2 class="anchored" data-anchor-id="current-limitations">Current limitations</h2>
<p>We ran our test suite – 188 LaTeX examples and 317 Typst examples – to find where Quarto PDFs do not yet pass UA-1 or UA-2, and where users will need to change their documents.</p>
<section id="latex" class="level3">
<h3 class="anchored" data-anchor-id="latex">LaTeX</h3>
<p>Margin content is the biggest structural blocker. If you use <code>.column-margin</code> divs, <code>cap-location: margin</code>, <code>reference-location: margin</code>, or <code>citation-location: margin</code>, the resulting PDF will not pass UA-2. The underlying <code>sidenotes</code> and <code>marginnote</code> LaTeX packages <a href="https://github.com/quarto-dev/quarto-cli/issues/14103">do not cooperate with PDF tagging</a>.</p>
<p>(Margin content does work with Typst and passes UA-1 – see <a href="https://prerelease.quarto.org/docs/output-formats/typst.html#article-layout">Typst Article Layout</a>.)</p>
<p>There are smaller upstream issues in Pandoc, LaTeX, and LaTeX packages, <a href="https://github.com/quarto-dev/quarto-cli/pull/14097#issuecomment-3947653207">documented here</a>.</p>
</section>
<section id="typst" class="level3">
<h3 class="anchored" data-anchor-id="typst">Typst</h3>
<p>In our tests, Typst catches every UA-1 violation, and fails to generate the PDF. veraPDF did not detect any violation that Typst did not.</p>
<p>Typst also seems to do a very good job of generating UA-1 compliant output by default – almost all errors were due to missing titles or missing alt text.</p>
<p>However, we did discover that <a href="https://prerelease.quarto.org/docs/books/book-output.html#typst-output">Typst books</a> are not yet compliant. There is a <a href="https://github.com/flavio20002/typst-orange-template/issues/38">structural problem with the Typst orange-book package</a> and we’ll work with the maintainers to correct it.</p>
</section>
</section>
<section id="conclusion" class="level2">
<h2 class="anchored" data-anchor-id="conclusion">Conclusion</h2>
<p>Although Typst currently targets an the earlier UA-1 standard, today it seems to offer better PDF accessibility than LaTeX.</p>
<p>We expect PDF accessibility support to improve through the LaTeX ecosystem throughout 2026 as awareness of UA-2 and the new regulations spreads.</p>
<p>If you run into accessibility issues with PDF output, please search the <a href="https://github.com/orgs/quarto-dev/discussions">Quarto discussions</a> and open a new one with the <code>accessibility</code> label for any issues you discover.</p>


</section>

 ]]></description>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2026-03-05-pdf-accessibility-and-standards/</guid>
  <pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2026-03-05-pdf-accessibility-and-standards/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>posit::conf(2025) Quarto talks</title>
  <dc:creator>Andrew Holz</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-11-24-conf-talk-videos/</link>
  <description><![CDATA[ 






<p>The posit::conf(2025) session videos are now live! We’ve created a curated playlist highlighting all the talks that showcase Quarto—how it is evolving, how people are using it, and how they’re building on top of it.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=RnKN-0bM7C0bwXfQ&amp;list=PLitrm9UndxcvQgAigiiOofTEPAWpROiiK" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">
</iframe>
<p>Talks included in the playlist, broken up into a few categories for easier browsing, are as follows:</p>
<section id="quarto-extensions-advanced-features" class="level1">
<h1>Quarto Extensions &amp; Advanced Features</h1>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Speakers</th>
<th>Title</th>
<th>Thumbnail</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Carlos Scheidegger (Quarto Team)</strong></td>
<td>What we’re doing to make Quarto fast(er)</td>
<td><a href="https://youtu.be/OBHppBRztO4"><img src="https://img.youtube.com/vi/OBHppBRztO4/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="even">
<td><strong>Christophe Dervieux (Quarto Team)</strong></td>
<td>Beyond the Basics: Expanding Quarto’s Capabilities</td>
<td><a href="https://youtu.be/u9ev3mvC-p0"><img src="https://img.youtube.com/vi/u9ev3mvC-p0/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="odd">
<td><strong>Garrick Aden-Buie</strong></td>
<td>Theming Made Easy: Introducing brand.yml</td>
<td><a href="https://youtu.be/DPaoNM8Ux04"><img src="https://img.youtube.com/vi/DPaoNM8Ux04/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="even">
<td><strong>Gordon Woodhull (Quarto Team)</strong></td>
<td>Brand YML and Dark Mode in Quarto</td>
<td><a href="https://youtu.be/WNwsgS-klMA"><img src="https://img.youtube.com/vi/WNwsgS-klMA/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="odd">
<td><strong>JooYoung Seo</strong></td>
<td>maidr: Empowering Accessible, Multimodal Data Science with Quarto</td>
<td><a href="https://youtu.be/QR7mdgM8Hf0"><img src="https://img.youtube.com/vi/QR7mdgM8Hf0/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
</tbody>
</table>
</section>
<section id="workflow-automation-reporting" class="level1">
<h1>Workflow Automation &amp; Reporting</h1>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Speakers</th>
<th>Title</th>
<th>Thumbnail</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Becca Krouse</strong></td>
<td>Instant Impact: Developing {docorator} to Simplify Document Production</td>
<td><a href="https://youtu.be/SWt-lcnYlNM"><img src="https://img.youtube.com/vi/SWt-lcnYlNM/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="even">
<td><strong>John Paul Helveston</strong></td>
<td>surveydown: A Markdown-Based Platform for Interactive Surveys</td>
<td><a href="https://youtu.be/VwoeFKNvN5k"><img src="https://img.youtube.com/vi/VwoeFKNvN5k/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="odd">
<td><strong>Keaton Wilson</strong></td>
<td>Using Quarto to Improve Formatting and Automation</td>
<td><a href="https://youtu.be/vHrI17AeYGs"><img src="https://img.youtube.com/vi/vHrI17AeYGs/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
</tbody>
</table>
</section>
<section id="teaching-education" class="level1">
<h1>Teaching &amp; Education</h1>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Speakers</th>
<th>Title</th>
<th>Thumbnail</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Claus Wilke</strong></td>
<td>Teaching data visualization with R entirely in Quarto</td>
<td><a href="https://youtu.be/Q7y0YqCuvHc"><img src="https://img.youtube.com/vi/Q7y0YqCuvHc/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="even">
<td><strong>Mine Çetinkaya-Rundel (Quarto Team)</strong></td>
<td>Leveraging LLMs for student feedback in introductory data science courses</td>
<td><a href="https://youtu.be/5gS7AUGwZPs"><img src="https://img.youtube.com/vi/5gS7AUGwZPs/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="odd">
<td><strong>Ted Laderas</strong></td>
<td>Empowering Learners with WebR, Pyodide, and Quarto</td>
<td><a href="https://youtu.be/EQ9_MP2PYL8"><img src="https://img.youtube.com/vi/EQ9_MP2PYL8/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
</tbody>
</table>
</section>
<section id="business-collaboration-publishing" class="level1">
<h1>Business, Collaboration &amp; Publishing</h1>
<table class="caption-top table">
<thead>
<tr class="header">
<th>Speakers</th>
<th>Title</th>
<th>Thumbnail</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><strong>Andrew Heiss</strong> and <strong>Gabe Osterhout</strong></td>
<td>Election Night Reporting Using R &amp; Quarto</td>
<td><a href="https://youtu.be/UCloM4GcfVY"><img src="https://img.youtube.com/vi/UCloM4GcfVY/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="even">
<td><strong>Bill Pikounis</strong></td>
<td>Quarto for Business Collaboration and Technical Documentation in Word docx format</td>
<td><a href="https://youtu.be/4-dQ2Q985A0"><img src="https://img.youtube.com/vi/4-dQ2Q985A0/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
<tr class="odd">
<td><strong>Timothy Keyes</strong></td>
<td>Trust, but Verify: Lessons from Deploying LLMs</td>
<td><a href="https://youtu.be/HYQaZTLb2Co"><img src="https://img.youtube.com/vi/HYQaZTLb2Co/hqdefault.jpg" class="img-fluid" alt="thumb"></a></td>
</tr>
</tbody>
</table>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Tip
</div>
</div>
<div class="callout-body-container callout-body">
<p><strong>Workshop materials now available:</strong><br>
The Quarto team has published full materials from the two workshops at posit::conf 2025: “Branded Websites, Presentations, Dashboards, and PDFs with Quarto” and “Extending Quarto”.<br>
You can access the workshop websites, exercise source code, and full slide decks under a CC BY-SA 4.0 license from the <a href="../../../../docs/blog/posts/2025-10-27-conf-workshops-materials/">Quarto blog</a>.</p>
</div>
</div>
<p>We hope you enjoyed this look back at the Quarto sessions from posit::conf(2025). Every year the community brings new ideas, new tools, and new ways of working — and we’d love to see <strong>your</strong> voice added to the mix. We hope to see you next year, and maybe even see <em>you</em> up on stage sharing your own work at posit::conf!</p>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Conference</category>
  <category>Videos</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-11-24-conf-talk-videos/</guid>
  <pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-11-24-conf-talk-videos/thumbnail.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>posit::conf(2025) Quarto workshop materials</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-10-27-conf-workshops-materials/</link>
  <description><![CDATA[ 






<p>At posit::conf(2025), we were thrilled to offer two comprehensive Quarto workshops designed to help users at different stages of their journey with Quarto. Whether you were looking to create beautifully branded outputs or extend Quarto’s functionality with custom solutions, these workshops provided hands-on learning experiences with expert instructors.</p>
<p>All materials from both workshops are available online. You can access the full workshop websites, source code, and exercises to learn at your own pace or adapt them for your own teaching; they are both released with a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
<section id="branded-websites-presentations-dashboards-and-pdfs-with-quarto" class="level2">
<h2 class="anchored" data-anchor-id="branded-websites-presentations-dashboards-and-pdfs-with-quarto">Branded Websites, Presentations, Dashboards, and PDFs with Quarto</h2>
<p><a href="https://posit-conf-2025.github.io/quarto-brand/" class="btn btn-primary rounded">Workshop website</a> <a href="https://github.com/posit-conf-2025/quarto-brand/" class="btn btn-primary rounded"><i class="bi bi-github"></i> Source</a> <a href="https://github.com/posit-dev/quarto-brand-exercises/" class="btn btn-primary rounded"><i class="bi bi-github"></i> Exercises</a></p>
<p>Led by <a href="https://ivelasq.rbind.io/">Isabella Velásquez</a>, Posit, PBC and <a href="https://www.linkedin.com/in/sarakaltman">Sara Altman</a>, Posit, PBC.</p>
<blockquote class="blockquote">
<p>Designed for data scientists, analysts, and content creators, this immersive session will teach you how to craft cohesive reports and presentations while refining your workflow with Quarto’s latest features.</p>
<p>You will learn how to create dynamic websites, professional PDF documents, engaging presentations, and interactive dashboards using Quarto. This workshop highlights Quarto’s powerful theming capabilities, including the new support for brand.yml, which ensures that your work maintains a professional and cohesive style across all formats.</p>
<p>By the end of the session, you’ll be equipped to:</p>
<ul>
<li>Build and deploy Quarto websites.</li>
<li>Generate professional presentations and PDF reports.</li>
<li>Create interactive dashboards for data visualization and reporting.</li>
<li>Use brand.yml to define and apply consistent theming across all outputs.</li>
</ul>
<p>Whether you’re looking to enhance your personal projects or streamline organizational outputs, this workshop will equip you with the tools to create polished, professional results.</p>
</blockquote>
</section>
<section id="extending-quarto" class="level2">
<h2 class="anchored" data-anchor-id="extending-quarto">Extending Quarto</h2>
<p><a href="https://posit-conf-2025.github.io/quarto-extend/" class="btn btn-primary rounded">Workshop website</a> <a href="https://github.com/posit-conf-2025/quarto-extend/" class="btn btn-primary rounded"><i class="bi bi-github"></i> Source</a> <a href="https://github.com/posit-conf-2025/quarto-extend-exercises/" class="btn btn-primary rounded"><i class="bi bi-github"></i> Exercises</a></p>
<p>Led by <a href="https://mine-cr.com/">Mine Çetinkaya-Rundel</a>, Posit, PBC + Duke University and <a href="https://www.cwick.co.nz/">Charlotte Wickham</a> Posit, PBC.</p>
<blockquote class="blockquote">
<p>In this workshop, we will dive deep into ways of customizing your Quarto outputs with tooling beyond built-in features. This workshop is designed for data scientists, analysts, and technical writers looking to extend Quarto’s capabilities to suit their unique workflows better.</p>
<p>Participants will learn how to create custom extensions, including new formats, templates, and filters, to enhance their document production process. Through hands-on exercises and real-world examples, you’ll gain practical skills in:</p>
<ul>
<li>Developing and integrating custom formats to support diverse outputs while reducing repetition across projects.</li>
<li>Substituting Quarto’s templates with your own to customize formats beyond the built-in options.</li>
<li>Implementing filters to automate and streamline content transformation.</li>
</ul>
<p>By the end of the workshop, you will be able to leverage Quarto’s extensibility to create powerful, tailored solutions for your documentation needs. Whether you have just worked on a few Quarto projects or are an everyday user, this workshop will equip you with the tools and knowledge to take your document workflows to the next level.</p>
</blockquote>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Workshop</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-10-27-conf-workshops-materials/</guid>
  <pubDate>Mon, 27 Oct 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-10-27-conf-workshops-materials/thumbnail.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Quarto Wizard 1.0.0: Democratising Quarto Extension Management</title>
  <dc:creator>Mickaël CANOUIL, _Ph.D._</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/</link>
  <description><![CDATA[ 






<div class="callout callout-style-default callout-note callout-titled" title="Community Contribution">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Note</span>Community Contribution
</div>
</div>
<div class="callout-body-container callout-body">
<p>The <span class="quarto-wizard" title="Quarto Wizard Logo" aria-label="Quarto Wizard Logo"></span> Quarto Wizard extension and listing directory website are built and maintained by <a href="https://mickael.canouil.fr">Mickaël CANOUIL, <em>Ph.D.</em></a>.</p>
<p>In this post, he explains what it is and how it can help you manage Quarto extensions directly from Positron or Visual Studio Code.</p>
</div>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="featured.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/featured.png" class="hero-banner img-fluid quarto-figure quarto-figure-center figure-img" alt="Cartoon dog wizard wearing blue hat with red band holding magic wand creating HTML and CSS code scrolls in starry night scene." width="600"></a></p>
</figure>
</div>
<p>I’m absolutely thrilled to announce <strong><span class="quarto-wizard" title="Quarto Wizard Logo" aria-label="Quarto Wizard Logo"></span> Quarto Wizard 1.0.0</strong>, a groundbreaking extension for Visual Studio Code and Positron that transforms how you interact with the Quarto ecosystem. If you’ve ever found yourself wrestling with command-line extension management or struggling to discover the perfect template for your project, this tool is about to become your new best friend.</p>
<p>Install it today from the <a href="https://marketplace.visualstudio.com/items?itemName=mcanouil.quarto-wizard">VS Code marketplace</a> or <a href="https://open-vsx.org/extension/mcanouil/quarto-wizard">Open VSX Registry</a>:</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<ul>
<li><p>Via VS Code or Positron Extensions view:</p>
<ul>
<li>Search for “Quarto Wizard”.</li>
<li>Click “Install”.</li>
</ul>
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/extensions-marketplace-dark.png" title="Extensions View: Marketplace" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center" data-group="quarto-wizard-dark" alt="Visual Studio Code Extensions Marketplace showing Quarto Wizard search
results with install button.
" width="500"> <img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/extensions-marketplace-light.png" title="Extensions View: Marketplace" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center" data-group="quarto-wizard-light" alt="Visual Studio Code Extensions Marketplace showing Quarto Wizard search
results with install button.
" width="500"></p></li>
</ul>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<ul>
<li><p>Via the command line:</p>
<div class="tabset-margin-container"></div><div class="panel-tabset">
<ul class="nav nav-tabs"><li class="nav-item"><a class="nav-link active" id="tabset-1-1-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-1" aria-controls="tabset-1-1" aria-selected="true" href="">Visual Studio Code</a></li><li class="nav-item"><a class="nav-link" id="tabset-1-2-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-2" aria-controls="tabset-1-2" aria-selected="false" href="">Positron</a></li></ul>
<div class="tab-content">
<div id="tabset-1-1" class="tab-pane active" aria-labelledby="tabset-1-1-tab">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">code</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--install-extension</span> mcanouil.quarto-wizard</span></code></pre></div></div>
</div>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Tip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Be sure to execute the command <em>Shell Command: Install ‘code’ command in PATH</em> from Visual Studio Code’s Command Palette (<span class="visually-hidden"></span>) if you haven’t done so already.</p>
</div>
</div>
</div>
<div id="tabset-1-2" class="tab-pane" aria-labelledby="tabset-1-2-tab">
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb2-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">positron</span> <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--install-extension</span> mcanouil.quarto-wizard</span></code></pre></div></div>
</div>
<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
Tip
</div>
</div>
<div class="callout-body-container callout-body">
<p>Be sure to execute the command <em>Shell Command: Install ‘positron’ command in PATH</em> from Positron’s Command Palette (<span class="visually-hidden"></span>) if you haven’t done so already.</p>
</div>
</div>
</div>
</div>
</div></li>
</ul>
</div>
</div>
</div>
<p>Quarto has revolutionised scientific and technical publishing by enabling reproducible documents that seamlessly blend code, narrative text, and visualisation. However, one persistent friction point has been managing the rich and ever-growing ecosystem of extensions and templates—until now.</p>
<section id="b58fc729-690b-4000-b19f-365a4093b2ff7b7b3c206d6574612071756172746f2d77697a617264203e7d7d-quarto-wizard-your-gui-for-quarto-extensions" class="level2">
<h2 class="anchored" data-anchor-id="b58fc729-690b-4000-b19f-365a4093b2ff7b7b3c206d6574612071756172746f2d77697a617264203e7d7d-quarto-wizard-your-gui-for-quarto-extensions"><span class="quarto-wizard" title="Quarto Wizard Logo" aria-label="Quarto Wizard Logo"></span> Quarto Wizard: Your GUI for Quarto extensions</h2>
<p>I designed <strong>Quarto Wizard</strong> to address a fundamental challenge I’ve observed in the community: whilst Quarto’s command-line interface is powerful, many users prefer visual interfaces for discovering, installing, and managing extensions.</p>
<section id="seamless-ide-integration" class="level3">
<h3 class="anchored" data-anchor-id="seamless-ide-integration">Seamless IDE integration</h3>
<p><strong>Quarto Wizard integrates beautifully with both the VS Code and Positron ecosystems</strong>, appearing as a dedicated icon in the Activity Bar alongside your other development tools. This provides instant access to extension management without disrupting your coding flow, whether you’re in Microsoft’s VS Code or Posit’s new Positron IDE.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-activity-bar-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-activity-bar-dark.png" title="Quarto Wizard Explorer View (Dark)" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard Extensions Installed panel in Visual Studio Code showing
no extensions installed message with green Install Extensions button.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-activity-bar-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-activity-bar-light.png" title="Quarto Wizard Explorer View (Light)" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard Extensions Installed panel in Visual Studio Code showing
no extensions installed message with green Install Extensions button.
" width="500"></a></p>
</figure>
</div>
<p>The solution is <strong>multi-modal installation</strong>: you can now install extensions through multiple pathways that suit your workflow: from the command line, through the web directory, or via the <strong>Quarto Wizard</strong> GUI in your IDE.</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row quarto-layout-valign-center">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<ol type="1">
<li>Open the Command Palette (<span class="visually-hidden"></span>).</li>
<li>Type <code>Quarto Wizard: Install Extensions</code> and select it.</li>
<li>Browse the list of available Quarto extensions.</li>
<li>Select the Quarto extension(s) you want to install.</li>
<li>Answer the prompts to confirm the installation.</li>
</ol>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-install-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-install-dark.png" title="Quarto Wizard: Install Extensions (Dark)" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard extension selection dialog showing list of available
extensions with checkboxes including LIVE, HIGHLIGHT TEXT, GITHUB, and
other Quarto extensions.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-install-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-install-light.png" title="Quarto Wizard: Install Extensions (Light)" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard extension selection dialog showing list of available
extensions with checkboxes including LIVE, HIGHLIGHT TEXT, GITHUB, and
other Quarto extensions.
" width="500"></a></p>
</figure>
</div>
</div>
</div>
</div>
</section>
<section id="intelligent-extension-management" class="level3">
<h3 class="anchored" data-anchor-id="intelligent-extension-management">Intelligent extension management</h3>
<p>The <strong>“Recently Installed Extensions”</strong> feature helps track your workflow and easily reproduce project setups across different environments. This is invaluable for researchers collaborating across multiple machines or teaching workshops where consistent setups are essential, regardless of whether team members use VS Code or Positron.</p>
<p>What makes this particularly powerful is that <strong>Quarto Wizard</strong> tracks which extensions were installed through its interface by adding <code>source</code> metadata to the <code>_extensions.yml</code> file, enabling seamless updates and removals.<sup>1</sup> This source tracking transforms extension maintenance from manual archaeology into an effortless workflow. The extension maintains detailed metadata about installed extensions, enabling batch operations and dependency tracking. The Explorer View provides a comprehensive overview of all installed extensions with visual indicators for updates and management options.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-update-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-update-dark.png" title="Quarto Wizard: Explorer View Update (Dark)" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard Extensions Installed panel showing expanded iconify
extension details with update button and version information.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-update-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-update-light.png" title="Quarto Wizard: Explorer View Update (Light)" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Wizard Extensions Installed panel showing expanded iconify
extension details with update button and version information.
" width="500"></a></p>
</figure>
</div>
</section>
<section id="template-workflow-simplified" class="level3">
<h3 class="anchored" data-anchor-id="template-workflow-simplified">Template workflow simplified</h3>
<p>Beyond extension management, I’ve designed <strong>Quarto Wizard</strong> to ease the process of discovering and using document templates. Once you’ve selected a template, <strong>Quarto Wizard</strong> lets you customise and save the document. The file is not created until you confirm, allowing you to adjust the filename and location.</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row quarto-layout-valign-center">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<ol type="1">
<li>Open the Command Palette (<span class="visually-hidden"></span>).</li>
<li>Type <code>Quarto Wizard: Use Template</code> and select it.</li>
<li>Browse the list of available Quarto templates.</li>
<li>Select the Quarto template(s) you want to use.</li>
<li>Answer the prompts to confirm the selection.</li>
</ol>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-template-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-template-dark.png" title="Quarto Wizard: Use Template (Dark)" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Visual Studio Code showing Quarto Wizard with installed extensions list
and document editor displaying invoice template with YAML frontmatter.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/vscode-template-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-template-light.png" title="Quarto Wizard: Use Template (Light)" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Visual Studio Code showing Quarto Wizard with installed extensions list
and document editor displaying invoice template with YAML frontmatter.
" width="500"></a></p>
</figure>
</div>
</div>
</div>
</div>
</section>
</section>
<section id="powered-by-a-comprehensive-extension-directory" class="level2">
<h2 class="anchored" data-anchor-id="powered-by-a-comprehensive-extension-directory">Powered by a comprehensive extension directory</h2>
<section id="a-curated-catalogue-of-250-extensions" class="level3">
<h3 class="anchored" data-anchor-id="a-curated-catalogue-of-250-extensions">A curated catalogue of 250+ extensions</h3>
<p>At the heart of <strong>Quarto Wizard</strong> lies the <a href="https://m.canouil.dev/quarto-extensions/">Quarto Extensions directory (m.canouil.dev/quarto-extensions/)</a>, a comprehensive listing I maintain that catalogues extensions from across the entire Quarto ecosystem.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-home-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-home-dark.png" title="Mickaël CANOUIL's Quarto Extensions directory" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website displaying grid of extension cards including
webr, Reveal.js Clean theme, and Hikmah Academic templates.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-home-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-home-light.png" title="Mickaël CANOUIL's Quarto Extensions directory" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website displaying grid of extension cards including
webr, Reveal.js Clean theme, and Hikmah Academic templates.
" width="500"></a></p>
</figure>
</div>
<p>To date, it includes over 250 extensions contributed by the community, covering a vast array of functionalities from citation management to interactive visualisations. This directory powers <strong>Quarto Wizard</strong>’s discovery features, providing rich metadata about each extension including descriptions, licensing, version tags, and GitHub stars. The directory is continuously updated through GitHub’s API, ensuring you always have access to the latest extensions from the community.</p>
</section>
<section id="one-click-installation-from-the-web" class="level3">
<h3 class="anchored" data-anchor-id="one-click-installation-from-the-web">One-click installation from the web</h3>
<p>What’s particularly exciting is that you can install extensions or use templates <strong>directly from the website itself</strong>. Each extension listed at <a href="https://m.canouil.dev/quarto-extensions/">m.canouil.dev/quarto-extensions/</a> includes multiple installation options: traditional command-line via terminal, or one-click installation through <strong>Quarto Wizard</strong> in VS Code, Positron, or VSCodium. Simply browse the directory, find the extension you need, and choose your preferred installation method. The website generates the appropriate commands or launches your IDE directly. This flexibility means teams with mixed technical backgrounds can all access the same powerful extensions.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-modal-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-modal-dark.png" title="Mickaël CANOUIL's Quarto Extensions install modal" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website with Install Options popup showing manual
terminal command and Quarto Wizard installation options for Visual
Studio Code, Positron, and VSCodium.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-modal-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-modal-light.png" title="Mickaël CANOUIL's Quarto Extensions install modal" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website with Install Options popup showing manual
terminal command and Quarto Wizard installation options for Visual
Studio Code, Positron, and VSCodium.
" width="500"></a></p>
</figure>
</div>
<p>For example, you might want to add the <a href="https://github.com/mcanouil/quarto-iconify"><strong>Iconify</strong></a> extension to access over 200,000 open source vector icons in your documents, or the <a href="https://github.com/mcanouil/quarto-animate"><strong>Animate</strong></a> extension to bring your presentations to life with CSS animations. Perhaps the <a href="https://github.com/mcanouil/quarto-spotlight"><strong>Spotlight</strong></a> extension for Reveal.js catches your eye for creating dramatic Reveal.js presentations that highlight your mouse position. All of these extensions (and hundreds more) are just a click away.</p>
</section>
<section id="template-discovery-made-easy" class="level3">
<h3 class="anchored" data-anchor-id="template-discovery-made-easy">Template discovery made easy</h3>
<p>Additionally, the Quarto Extensions directory excels at <strong>template discovery and deployment</strong> which is enhanced with powerful filtering options: you can sort by recently updated, filter by popularity, browse by categories (<em>i.e.</em>, Shortcodes, Filters, Formats, Projects, Reveal.js Plugins), or search for specific functionality. Each extension clearly indicates whether it’s a template with <strong>“Use”</strong> buttons alongside <strong>“Install”</strong> options.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-template-dark.png" class="lightbox" data-gallery="quarto-wizard-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-template-dark.png" title="Mickaël CANOUIL's Quarto Extensions list view filtered by formats" class="dark-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website in list view showing Template extensions with
install and use buttons.
" width="500"></a></p>
</figure>
</div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="assets/media/quarto-extensions-template-light.png" class="lightbox" data-gallery="quarto-wizard-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-template-light.png" title="Mickaël CANOUIL's Quarto Extensions list view filtered by formats" class="light-content img-fluid img-thumbnail rounded-3 border-light quarto-figure quarto-figure-center figure-img" alt="Quarto Extensions website in list view showing Template extensions with
install and use buttons.
" width="500"></a></p>
</figure>
</div>
<p>Whether you’re crafting an academic paper using journal-specific formats, creating professional invoices with my <a href="https://github.com/mcanouil/quarto-invoice"><strong>Invoice</strong></a> extension template, or building stunning presentations with themed templates like my <a href="https://github.com/mcanouil/quarto-revealjs-coeos"><strong>Reveal.js Coeos</strong></a> extension, browsing available templates becomes as simple as scrolling through a curated gallery.</p>
<p>This directory creates a seamless experience: instead of manually searching GitHub repositories or memorising command-line syntax, you can browse hundreds of extensions with detailed information at your fingertips. This transforms extension discovery from a treasure hunt into a curated shopping experience.</p>
</section>
</section>
<section id="addressing-real-workflow-friction" class="level2">
<h2 class="anchored" data-anchor-id="addressing-real-workflow-friction">Addressing real workflow friction</h2>
<p>I designed <strong>Quarto Wizard</strong> and the extension directory at <a href="https://m.canouil.dev/quarto-extensions/">m.canouil.dev/quarto-extensions</a> to directly tackle several persistent Quarto pain points I’ve encountered:</p>
<ul>
<li><p><strong>Discovery challenges</strong>: Finding relevant extensions in the growing ecosystem becomes intuitive through the visual browser interface powered by the comprehensive extensions directory.</p></li>
<li><p><strong>Command-line intimidation</strong>: Users who prefer graphical interfaces no longer need to memorise terminal commands.</p></li>
<li><p><strong>Document setup complexity</strong>: Template-based document initialisation eliminates manual YAML configuration.</p></li>
<li><p><strong>Extension maintenance</strong>: Updates, removals, and dependency management become point-and-click operations rather than command-line archaeology.</p></li>
<li><p><strong>Source tracking</strong>: <strong>Quarto Wizard</strong> automatically adds source metadata to installed extensions, enabling future updates and proper version management.</p></li>
<li><p><strong>Stable installations</strong>: <strong>Quarto Wizard</strong> installs extensions from GitHub releases/tags by default instead of the potentially unstable default branch, ensuring more reliable installations and more replicable environments.</p></li>
</ul>
</section>
<section id="perfect-for-diverse-use-cases" class="level2">
<h2 class="anchored" data-anchor-id="perfect-for-diverse-use-cases">Perfect for diverse use cases</h2>
<p>The extension shines across multiple scenarios:</p>
<ul>
<li><p><strong>Academic researchers</strong> can quickly install citation management tools, bibliography extensions like <a href="https://github.com/pandoc-ext/multibib"><strong>Multibib</strong></a> or <a href="https://github.com/pandoc-ext/section-bibliographies"><strong>Section Bibliographies</strong></a>, and journal-specific formatting, whether they’re using VS Code or Positron for their analysis work.</p></li>
<li><p><strong>Data scientists</strong> gain easy access to computational extensions like <a href="https://github.com/coatless/quarto-webr"><strong>WebR</strong></a>, visualisation tools, and interactive notebook capabilities. This is particularly powerful in Positron, which is designed specifically for data science workflows.</p></li>
<li><p><strong>Technical writers</strong> can browse and install extensions for enhanced typography with for example the <a href="https://github.com/mcanouil/quarto-highlight-text"><strong>Highlight Text</strong></a> extension for multi-format text highlighting, code highlighting, and advanced formatting options of their Reveal.js presentations with <a href="https://github.com/EmilHvitfeldt/quarto-revealjs-editable"><strong>Reveal.js Editable</strong></a> extension in their preferred IDE.</p></li>
<li><p><strong>Workshop instructors</strong> can ensure all participants have consistent extension setups through guided installation processes, regardless of whether attendees prefer VS Code or Positron.</p></li>
</ul>
</section>
<section id="future-ready-architecture" class="level2">
<h2 class="anchored" data-anchor-id="future-ready-architecture">Future-ready architecture</h2>
<p>I’ve built <strong>Quarto Wizard</strong> on robust foundations that ensure long-term reliability. The extension integrates with GitHub’s API through the <a href="https://m.canouil.dev/quarto-extensions/">Quarto Extensions directory</a> for real-time metadata, includes attestation verification for security, and maintains full compatibility with both VS Code and Positron environments.</p>
<p>The modular architecture allows for future enhancements whilst maintaining backwards compatibility. As the Quarto ecosystem continues expanding and as Positron evolves alongside VS Code, <strong>Quarto Wizard</strong> will support new extension types and project management workflows in both environments.</p>
</section>
<section id="getting-started-today" class="level2">
<h2 class="anchored" data-anchor-id="getting-started-today">Getting started today</h2>
<p>Begin your <strong>Quarto Wizard</strong> journey by installing the extension from the VS Code marketplace, the Open VSX Registry, or directly through your IDE’s Extensions view. Once installed, the <strong>Quarto Wizard</strong> icon appears in your Activity Bar, providing immediate access to extension management and project tools.</p>
<p>You have multiple paths to explore Quarto extensions:</p>
<ol type="1">
<li><strong>Through Quarto Wizard</strong>: Click the <strong>Quarto Wizard</strong> icon in your IDE’s Activity Bar and browse the integrated catalogue.</li>
<li><strong>Via the web directory</strong>: Visit <a href="https://m.canouil.dev/quarto-extensions/">m.canouil.dev/quarto-extensions</a> where you can browse all extensions and install them directly from the website. Each extension offers installation buttons for <strong>Quarto Wizard</strong>, VS Code, Positron, VSCodium, or traditional terminal commands.</li>
<li><strong>Traditional command-line</strong>: Use the familiar <code>quarto add</code> commands if you prefer.</li>
</ol>
<p>Try installing your first extension: perhaps <a href="https://github.com/mcanouil/quarto-iconify"><strong>Iconify</strong></a> extension for comprehensive icon support or <a href="https://github.com/mcanouil/quarto-github"><strong>GitHub</strong></a> for seamless GitHub linking. Whether you click “Install” on the website, use <strong>Quarto Wizard</strong>’s interface, or type commands in the terminal, the choice is yours. The difference in experience compared to traditional command-line installation is immediately apparent, especially when browsing the visual catalogue with its filtering options, popularity indicators, and rich metadata.</p>
<p>I believe <strong>Quarto Wizard</strong> represents a significant step forward in making Quarto’s powerful publishing capabilities accessible to users regardless of their comfort level with command-line tools or their choice of IDE. By providing intuitive visual interfaces for complex operations, <strong>Quarto Wizard</strong> democratises access to the rich Quarto ecosystem whilst maintaining the flexibility and power that makes Quarto exceptional.</p>
<p>The future of reproducible publishing is here, and it’s more accessible than ever in whichever modern development environment you prefer.</p>


</section>


<div id="quarto-appendix" class="default"><section id="footnotes" class="footnotes footnotes-end-of-document"><h2 class="anchored quarto-appendix-heading">Footnotes</h2>

<ol>
<li id="fn1"><p>Quarto CLI does not natively track installation sources as of version 1.8.24 (<a href="https://github.com/quarto-dev/quarto-cli/issues/11468">quarto-dev/quarto-cli#11468</a>).↩︎</p></li>
</ol>
</section></div> ]]></description>
  <category>community</category>
  <category>quarto</category>
  <category>vscode</category>
  <category>positron</category>
  <category>extensions</category>
  <category>productivity</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/</guid>
  <pubDate>Mon, 20 Oct 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-10-20-quarto-wizard-1-0-0/featured.png" medium="image" type="image/png" height="96" width="144"/>
</item>
<item>
  <title>Quarto 1.8</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-10-13-1.8-release/</link>
  <description><![CDATA[ 






<p>Quarto 1.8 is available! You can get the current release from the <a href="../../../../docs/download/index.html">download page</a>.</p>
<p>Quarto 1.8 improves support for light and dark brand colors and logos, brand extensions for sharing brands across Quarto projects, HTML accessibility checks powered by Axe-core, and access to more information about execution context from your code cells. You can read about these improvements and some other highlights below. You can find all the changes in this version in the <a href="../../../../docs/download/changelog/1.8/">Release Notes</a>.</p>
<section id="dark-and-light-colors-and-logos-in-brand" class="level2">
<h2 class="anchored" data-anchor-id="dark-and-light-colors-and-logos-in-brand">Dark and light colors and logos in brand</h2>
<p>You can now specify <code>light</code> and <code>dark</code> versions of any colors or logo in a brand specification:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_brand.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="_brand.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">color</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">foreground</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">light</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#333333"</span></span>
<span id="cb1-4"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dark</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#EEEEEE"</span></span>
<span id="cb1-5"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">background</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-6"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">light</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#EEEEEE"</span></span>
<span id="cb1-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dark</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#333333"</span></span>
<span id="cb1-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">logos</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-9"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">medium</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-10"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">light</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> logo.png</span></span>
<span id="cb1-11"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dark</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> logo-white.png         </span></span></code></pre></div></div>
</div>
<p>This works in <code>_brand.yml</code> files as well as <code>brand</code> specified directly in document metadata. You can also present in dark mode by specifying <code>brand-mode: dark</code> in your <code>format: revealjs</code> presentations.</p>
<p>Read more in the updated <a href="../../../../docs/authoring/brand.html">Guide &gt; Brand</a>:</p>
<ul>
<li><a href="../../../../docs/authoring/brand.html#light-and-dark-colors">Light and dark colors</a></li>
<li><a href="../../../../docs/authoring/brand.html#light-and-dark-logos">Light and dark logos</a></li>
<li><a href="../../../../docs/authoring/brand.html#brand-mode">Brand mode</a></li>
</ul>
</section>
<section id="brand-extensions" class="level2">
<h2 class="anchored" data-anchor-id="brand-extensions">Brand extensions</h2>
<p>Share brand definitions and assets across Quarto projects with a brand extension.</p>
<p>Get started with:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode default code-with-copy"><code class="sourceCode default"><span id="cb2-1">quarto create extension brand</span></code></pre></div></div>
</div>
<p>Read more in <a href="../../../../docs/extensions/brand.html">Extensions &gt; Brand</a>, and keep an eye out for other ways to reuse and share your brand in future releases.</p>
</section>
<section id="accessibility-checks-for-html" class="level2">
<h2 class="anchored" data-anchor-id="accessibility-checks-for-html">Accessibility checks for HTML</h2>
<p>You can add accessibility checks using the <a href="https://github.com/dequelabs/axe-core">Axe-core engine</a> to HTML documents (<code>format</code>: <code>html</code>, <code>revealjs</code> and <code>dashboard</code>) with the new <code>axe</code> option.</p>
<p>For example, you can get a summary of violations right in your document preview:</p>
<div class="light-content">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/output-formats/images/axe-violation.png" class="border img-fluid figure-img" alt="A webpage with a box in the bottom left that warns 'Serious: Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds'."></p>
<figcaption>A rendered webpage with an accessibility violation warning</figcaption>
</figure>
</div>
</div>
<div class="dark-content">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/output-formats/images/axe-violation.png" class="border autodark img-fluid figure-img" alt="A webpage with a box in the bottom left that warns 'Serious: Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds'."></p>
<figcaption>A rendered webpage with an accessibility violation warning</figcaption>
</figure>
</div>
</div>
<p>Read about your options in <a href="../../../../docs/output-formats/html-accessibility.html">HTML Accessibility Checks</a></p>
<p>We know accessability is a big concern for many of our users, and more improvements will be coming in future releases.</p>
</section>
<section id="accessing-execution-information" class="level2">
<h2 class="anchored" data-anchor-id="accessing-execution-information">Accessing execution information</h2>
<p>Quarto sets the <code>QUARTO_EXECUTE_INFO</code> environment variable, which allows you to access information about execution context from code cells.</p>
<p>Read the JSON file located at <code>QUARTO_EXECUTE_INFO</code> and access properties such as <code>document-path</code>, <code>format</code>, <code>metadata</code> and more:</p>
<div class="tabset-margin-container"></div><div class="panel-tabset">
<ul class="nav nav-tabs"><li class="nav-item"><a class="nav-link active" id="tabset-1-1-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-1" aria-controls="tabset-1-1" aria-selected="true" href="">R</a></li><li class="nav-item"><a class="nav-link" id="tabset-1-2-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-2" aria-controls="tabset-1-2" aria-selected="false" href="">Python</a></li><li class="nav-item"><a class="nav-link" id="tabset-1-3-tab" data-bs-toggle="tab" data-bs-target="#tabset-1-3" aria-controls="tabset-1-3" aria-selected="false" href="">Julia</a></li></ul>
<div class="tab-content">
<div id="tabset-1-1" class="tab-pane active" aria-labelledby="tabset-1-1-tab">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">library</span>(jsonlite)</span>
<span id="cb3-2">execute_info <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">read_json</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">Sys.getenv</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"QUARTO_EXECUTE_INFO"</span>))</span>
<span id="cb3-3">execute_info<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">document-path</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">`</span></span></code></pre></div></div>
</div>
<div id="tabset-1-2" class="tab-pane" aria-labelledby="tabset-1-2-tab">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb4-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> json</span>
<span id="cb4-2"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> os</span>
<span id="cb4-3"></span>
<span id="cb4-4"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">with</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">open</span>(os.getenv(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"QUARTO_EXECUTE_INFO"</span>)) <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> f:</span>
<span id="cb4-5">    execute_info <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> json.load(f)</span>
<span id="cb4-6">execute_info[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"document-path"</span>]</span></code></pre></div></div>
</div>
<div id="tabset-1-3" class="tab-pane" aria-labelledby="tabset-1-3-tab">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">using</span> <span class="bu" style="color: null;
background-color: null;
font-style: inherit;">JSON</span></span>
<span id="cb5-2"></span>
<span id="cb5-3">execute_info <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> JSON.<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">parsefile</span>(<span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">ENV</span>[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"QUARTO_EXECUTE_INFO"</span>])</span>
<span id="cb5-4">execute_info[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"document-path"</span>]</span></code></pre></div></div>
</div>
</div>
</div>
<p>Read more in <a href="../../../../docs/advanced/quarto-execute-info.html">Access execution settings from code cells</a>.</p>
</section>
<section id="other-highlights" class="level2">
<h2 class="anchored" data-anchor-id="other-highlights">Other Highlights</h2>
<ul>
<li><p>Access <a href="../../../../docs/extensions/lua-api.html#metadata-access">metadata</a> and <a href="../../../../docs/extensions/lua-api.html#variables-access">variables</a> in filters and shortcodes: Use the new <code>quarto.variables.get()</code> and <code>quarto.metadata.get()</code> APIs.</p></li>
<li><p>The default LaTeX engine is now <code>lualatex</code>.</p></li>
</ul>
<p>Dependency updates:</p>
<ul>
<li><code>mermaidjs</code> updated to 11.6.0.</li>
<li>Bootstrap icons updated to v1.13.1</li>
<li><code>QuartoNotebookRunner</code> in <code>julia</code> engine updated to 0.17.3</li>
</ul>
</section>
<section id="acknowledgements" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgements">Acknowledgements</h2>
<p>We’d like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:</p>
<p><a href="https://github.com/Aariq">Aariq</a>, <a href="https://github.com/AndreasThinks">AndreasThinks</a>, <a href="https://github.com/ArthurData">ArthurData</a>, <a href="https://github.com/Blake-Madden">Blake-Madden</a>, <a href="https://github.com/ColinFay">ColinFay</a>, <a href="https://github.com/DCEW">DCEW</a>, <a href="https://github.com/DanStuder">DanStuder</a>, <a href="https://github.com/Data-Wise">Data-Wise</a>, <a href="https://github.com/EllaKaye">EllaKaye</a>, <a href="https://github.com/EmilHvitfeldt">EmilHvitfeldt</a>, <a href="https://github.com/FrankwaP">FrankwaP</a>, <a href="https://github.com/GabrielCoffee9">GabrielCoffee9</a>, <a href="https://github.com/GeorgRamer">GeorgRamer</a>, <a href="https://github.com/Gewerd-Strauss">Gewerd-Strauss</a>, <a href="https://github.com/GuillaumeDehaene">GuillaumeDehaene</a>, <a href="https://github.com/HarunCelikOtto">HarunCelikOtto</a>, <a href="https://github.com/HayesJohnD">HayesJohnD</a>, <a href="https://github.com/Joao-O-Santos">Joao-O-Santos</a>, <a href="https://github.com/MateusMolina">MateusMolina</a>, <a href="https://github.com/MichaelHatherly">MichaelHatherly</a>, <a href="https://github.com/PeteArm">PeteArm</a>, <a href="https://github.com/Selbosh">Selbosh</a>, <a href="https://github.com/SergeCroise">SergeCroise</a>, <a href="https://github.com/SrShelo">SrShelo</a>, <a href="https://github.com/VisruthSK">VisruthSK</a>, <a href="https://github.com/Vistales">Vistales</a>, <a href="https://github.com/abhiaagarwal">abhiaagarwal</a>, <a href="https://github.com/aborruso">aborruso</a>, <a href="https://github.com/adamblake">adamblake</a>, <a href="https://github.com/adamiturabi">adamiturabi</a>, <a href="https://github.com/alastairrushworth">alastairrushworth</a>, <a href="https://github.com/albertomercurio">albertomercurio</a>, <a href="https://github.com/alecloudenback">alecloudenback</a>, <a href="https://github.com/alex-r-bigelow">alex-r-bigelow</a>, <a href="https://github.com/allefeld">allefeld</a>, <a href="https://github.com/alyst">alyst</a>, <a href="https://github.com/andrewheiss">andrewheiss</a>, <a href="https://github.com/andrewpbray">andrewpbray</a>, <a href="https://github.com/austin-hoover">austin-hoover</a>, <a href="https://github.com/batpigandme">batpigandme</a>, <a href="https://github.com/bauerj">bauerj</a>, <a href="https://github.com/benkeks">benkeks</a>, <a href="https://github.com/benz0li">benz0li</a>, <a href="https://github.com/bkowshik">bkowshik</a>, <a href="https://github.com/blackerby">blackerby</a>, <a href="https://github.com/boshek">boshek</a>, <a href="https://github.com/brandonmontez">brandonmontez</a>, <a href="https://github.com/bryce-carson">bryce-carson</a>, <a href="https://github.com/carschandler">carschandler</a>, <a href="https://github.com/christopherkenny">christopherkenny</a>, <a href="https://github.com/cl-roberts">cl-roberts</a>, <a href="https://github.com/cmadland">cmadland</a>, <a href="https://github.com/co1emi11er2">co1emi11er2</a>, <a href="https://github.com/coatless">coatless</a>, <a href="https://github.com/cpcloud">cpcloud</a>, <a href="https://github.com/daxkellie">daxkellie</a>, <a href="https://github.com/dixslyf">dixslyf</a>, <a href="https://github.com/dkapitan">dkapitan</a>, <a href="https://github.com/econmaett">econmaett</a>, <a href="https://github.com/edavidaja">edavidaja</a>, <a href="https://github.com/edvinsyk">edvinsyk</a>, <a href="https://github.com/ethanwhite">ethanwhite</a>, <a href="https://github.com/fermarsan">fermarsan</a>, <a href="https://github.com/fredguth">fredguth</a>, <a href="https://github.com/fuhrmanator">fuhrmanator</a>, <a href="https://github.com/gadenbuie">gadenbuie</a>, <a href="https://github.com/georgestagg">georgestagg</a>, <a href="https://github.com/ghisvail">ghisvail</a>, <a href="https://github.com/ghost">ghost</a>, <a href="https://github.com/apps/github-actions">github-actions[bot]</a>, <a href="https://github.com/glin">glin</a>, <a href="https://github.com/gregswinehart">gregswinehart</a>, <a href="https://github.com/gwbrck">gwbrck</a>, <a href="https://github.com/halleysfifthinc">halleysfifthinc</a>, <a href="https://github.com/hansfn">hansfn</a>, <a href="https://github.com/hchulkim">hchulkim</a>, <a href="https://github.com/holtzy">holtzy</a>, <a href="https://github.com/htbunn">htbunn</a>, <a href="https://github.com/hturner">hturner</a>, <a href="https://github.com/hugetim">hugetim</a>, <a href="https://github.com/hutch3232">hutch3232</a>, <a href="https://github.com/iagopinal">iagopinal</a>, <a href="https://github.com/ihrke">ihrke</a>, <a href="https://github.com/jameslairdsmith">jameslairdsmith</a>, <a href="https://github.com/jdfoote">jdfoote</a>, <a href="https://github.com/jeremy9959">jeremy9959</a>, <a href="https://github.com/jfy133">jfy133</a>, <a href="https://github.com/jkrumbiegel">jkrumbiegel</a>, <a href="https://github.com/jmgirard">jmgirard</a>, <a href="https://github.com/jonpeake">jonpeake</a>, <a href="https://github.com/jvcarli">jvcarli</a>, <a href="https://github.com/jxpeng98">jxpeng98</a>, <a href="https://github.com/kandolfp">kandolfp</a>, <a href="https://github.com/kapsner">kapsner</a>, <a href="https://github.com/kathsherratt">kathsherratt</a>, <a href="https://github.com/kazuyanagimoto">kazuyanagimoto</a>, <a href="https://github.com/kevinah95">kevinah95</a>, <a href="https://github.com/kippandrew">kippandrew</a>, <a href="https://github.com/koldle">koldle</a>, <a href="https://github.com/lachlansimpson">lachlansimpson</a>, <a href="https://github.com/lbm364dl">lbm364dl</a>, <a href="https://github.com/leovuong">leovuong</a>, <a href="https://github.com/lostmygithubaccount">lostmygithubaccount</a>, <a href="https://github.com/lu-kas">lu-kas</a>, <a href="https://github.com/lukmanaj">lukmanaj</a>, <a href="https://github.com/lwjohnst86">lwjohnst86</a>, <a href="https://github.com/maelle">maelle</a>, <a href="https://github.com/mahmudstat">mahmudstat</a>, <a href="https://github.com/masud90">masud90</a>, <a href="https://github.com/melaniewalsh">melaniewalsh</a>, <a href="https://github.com/mfisher87">mfisher87</a>, <a href="https://github.com/mipmip">mipmip</a>, <a href="https://github.com/mpr1255">mpr1255</a>, <a href="https://github.com/multimeric">multimeric</a>, <a href="https://github.com/musvaage">musvaage</a>, <a href="https://github.com/mvuorre">mvuorre</a>, <a href="https://github.com/nathanj3">nathanj3</a>, <a href="https://github.com/nessan">nessan</a>, <a href="https://github.com/nichtich">nichtich</a>, <a href="https://github.com/odysseu">odysseu</a>, <a href="https://github.com/ofkoru">ofkoru</a>, <a href="https://github.com/olivroy">olivroy</a>, <a href="https://github.com/oyvindbso">oyvindbso</a>, <a href="https://github.com/pagiraud">pagiraud</a>, <a href="https://github.com/parmsam">parmsam</a>, <a href="https://github.com/peter-gy">peter-gy</a>, <a href="https://github.com/pm-gusmano">pm-gusmano</a>, <a href="https://github.com/produnis">produnis</a>, <a href="https://github.com/rabyj">rabyj</a>, <a href="https://github.com/raffaem">raffaem</a>, <a href="https://github.com/randyzwitch">randyzwitch</a>, <a href="https://github.com/rben01">rben01</a>, <a href="https://github.com/rossbowen">rossbowen</a>, <a href="https://github.com/rundel">rundel</a>, <a href="https://github.com/ryanzomorrodi">ryanzomorrodi</a>, <a href="https://github.com/ryjohnson09">ryjohnson09</a>, <a href="https://github.com/s2t2">s2t2</a>, <a href="https://github.com/salim-b">salim-b</a>, <a href="https://github.com/samcarter">samcarter</a>, <a href="https://github.com/serialc">serialc</a>, <a href="https://github.com/sgelzenleuchter">sgelzenleuchter</a>, <a href="https://github.com/skriptum">skriptum</a>, <a href="https://github.com/spaette">spaette</a>, <a href="https://github.com/stragu">stragu</a>, <a href="https://github.com/sun123zxy">sun123zxy</a>, <a href="https://github.com/sverrirarnors">sverrirarnors</a>, <a href="https://github.com/tecosaur">tecosaur</a>, <a href="https://github.com/temospena">temospena</a>, <a href="https://github.com/thatchermo">thatchermo</a>, <a href="https://github.com/topepo">topepo</a>, <a href="https://github.com/tylere">tylere</a>, <a href="https://github.com/winniehell">winniehell</a>, <a href="https://github.com/wklimowicz">wklimowicz</a>, <a href="https://github.com/yogabonito">yogabonito</a>, <a href="https://github.com/youcc">youcc</a>, <a href="https://github.com/yves-amevoin">yves-amevoin</a>, <a href="https://github.com/yyzeng">yyzeng</a>.</p>
<p>The lightbulb emoji in the <a href="thumbnail.png">listing and social card image</a> for this post comes from <a href="https://openmoji.org/" class="external">OpenMoji</a>– the open-source emoji and icon project. License: <a href="https://creativecommons.org/licenses/by-sa/4.0/#" class="external">CC BY-SA 4.0</a></p>


</section>

 ]]></description>
  <category>Quarto 1.8</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-10-13-1.8-release/</guid>
  <pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-10-13-1.8-release/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>quarto R package v1.5.0: Streamlined Workflows for R Users</title>
  <dc:creator>Christophe Dervieux</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-07-28-R-package-release-1.5/</link>
  <description><![CDATA[ 






<p>The quarto R package version 1.5.0 is here! This release focuses on making Quarto more flexible and powerful for R users with significant workflow improvements.</p>
<section id="whats-new" class="level2">
<h2 class="anchored" data-anchor-id="whats-new">What’s New</h2>
<p>Install the latest version from CRAN:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">install.packages</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"quarto"</span>)</span></code></pre></div></div>
<p>Major features in this release include:</p>
<ul>
<li><strong>Pass R values to Quarto metadata</strong> - Set metadata programmatically based on computed values from knitr engine</li>
<li><strong>Insert Markdown in HTML tables for Quarto processing</strong> - Include Markdown content (equations, links, formatting) in HTML tables</li>
<li><strong>Apply Light and Dark Themes to Plots and Tables</strong> - Change the background and foreground colors of plots and tables based on light &amp; dark themes</li>
<li><strong>Work with R scripts and Quarto</strong> - Extract R code from Quarto documents or prepare R scripts for Quarto rendering</li>
<li><strong>Build paths from Quarto Project</strong> - Build paths relative to Quarto project root within R cells</li>
<li><strong>Automate Quarto CLI from R</strong> - New and improved wrappers around Quarto CLI features for easier automation</li>
</ul>
</section>
<section id="pass-r-values-to-quarto-metadata" class="level2">
<h2 class="anchored" data-anchor-id="pass-r-values-to-quarto-metadata">Pass R Values to Quarto Metadata</h2>
<p>Set metadata dynamically based on R computations with <code>write_yaml_metadata_block()</code>. For example, you could check a parameter value, and conditionally include content based on it:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| output: asis</span></span>
<span id="cb2-2"></span>
<span id="cb2-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">write_yaml_metadata_block</span>(</span>
<span id="cb2-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">is_france =</span> params<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">$</span>country <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"france"</span></span>
<span id="cb2-5">)</span></code></pre></div></div>
<p>This will write the following (e.g., when <code>quarto render report.qmd -P country:france</code>):</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb3-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb3-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">is_france</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">true</span></span>
<span id="cb3-3"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span></code></pre></div></div>
<p>Then use Quarto’s conditional features:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb4-1">::: {.content-visible when-meta="is_france"}</span>
<span id="cb4-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">## Fun fact about France</span></span>
<span id="cb4-3"></span>
<span id="cb4-4">In 2025, France is the most visited country in the world, attracting over 89 million tourists annually!</span>
<span id="cb4-5"></span>
<span id="cb4-6">:::</span></code></pre></div></div>
<section id="improved-yaml-1.2-compatibility" class="level3">
<h3 class="anchored" data-anchor-id="improved-yaml-1.2-compatibility">Improved YAML 1.2 Compatibility</h3>
<p>The function now correctly handles special edge cases in YAML quoting. Specifically, it automatically quotes octal-like strings that are not supported in YAML 1.1 (like <code>"0888"</code> or <code>"0999"</code>):</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb5-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># These octal-like values are automatically quoted to prevent errors</span></span>
<span id="cb5-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">write_yaml_metadata_block</span>(</span>
<span id="cb5-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">code1 =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0888"</span>,    <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Without quoting: YAML 1.2 interprets as 888 (invalid octal ignored)</span></span>
<span id="cb5-4">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">code2 =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0999"</span>     <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Without quoting: YAML 1.2 interprets as 999 (invalid octal ignored)</span></span>
<span id="cb5-5">)</span></code></pre></div></div>
<p>Without the automatic quoting, these values would be interpreted as decimal numbers (888 and 999) in YAML 1.2, losing the leading zeros. This could break code that expects string values like file permissions or ID codes that must preserve leading zeros.</p>
<p>This change applies to internal functions that write YAML from R object lists, and so this improvement is particularly important when using <code>execute_params</code> with <code>quarto_render()</code>, where parameter values might include such edge cases:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb6-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Parameters with octal-like codes are now handled correctly</span></span>
<span id="cb6-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_render</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"report.qmd"</span>, </span>
<span id="cb6-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">execute_params =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(</span>
<span id="cb6-4">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">site_code =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0888"</span>,</span>
<span id="cb6-5">    <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">permission =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"0755"</span></span>
<span id="cb6-6">  ))</span></code></pre></div></div>
<p>For explicit control over quoting, use <code>yaml_quote_string()</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb7-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Force specific values to be quoted in YAML output</span></span>
<span id="cb7-2">metadata <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(</span>
<span id="cb7-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">code1 =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">yaml_quote_string</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"1.0"</span>)</span>
<span id="cb7-4">)</span>
<span id="cb7-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">write_yaml_metadata_block</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">.list =</span> metadata)</span></code></pre></div></div>
<p>This will mark the string to be double quoted in YAML, preserving the character representation exactly as provided.</p>
<p>See more examples in the <a href="https://quarto-dev.github.io/quarto-r/articles/dynamic-metadata.html">dynamic metadata vignette</a>, including how to make parameters available as metadata for conditional content.</p>
</section>
</section>
<section id="insert-markdown-in-html-tables" class="level2">
<h2 class="anchored" data-anchor-id="insert-markdown-in-html-tables">Insert Markdown in HTML Tables for Quarto Processing</h2>
<p>Quarto can <a href="https://quarto.org/docs/authoring/tables.html#html-tables">parse Markdown content in HTML tables</a>, enabling rich formatting like math equations, links, and text styling. The new <code>tbl_qmd_*()</code> functions make this powerful Quarto feature easier to use from R:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb8-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">data.frame</span>(</span>
<span id="cb8-2">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Feature =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Formatting"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Math"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Links"</span>),</span>
<span id="cb8-3">  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">Example =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(</span>
<span id="cb8-4">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tbl_qmd_span</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"**Bold**, *italic*"</span>),</span>
<span id="cb8-5">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tbl_qmd_span</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"$E = mc^2$"</span>),</span>
<span id="cb8-6">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">tbl_qmd_span</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"[Quarto docs](https://quarto.org)"</span>)</span>
<span id="cb8-7">  )</span>
<span id="cb8-8">) <span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">|&gt;</span></span>
<span id="cb8-9">  knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">kable</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">format =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"html"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">escape =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span></code></pre></div></div>
<p>These helper functions wrap content in HTML spans with <code>data-qmd-base64</code> attributes that Quarto recognizes for Markdown processing. They work with any table package that supports raw HTML (knitr, kableExtra, DT). For content that only works in Quarto, use the <code>display</code> argument for graceful fallback. See more examples in the <a href="https://quarto-dev.github.io/quarto-r/articles/markdown-html-tables.html">Markdown in HTML tables vignette</a>, including comparisons of Markdown support in HTML tables across different packages.</p>
</section>
<section id="themes-helpers" class="level2">
<h2 class="anchored" data-anchor-id="themes-helpers">Apply Light and Dark Themes to Plots and Tables</h2>
<p>The <code>theme_colors_flextable()</code>, <code>theme_colors_ggplot2()</code>, <code>theme_colors_gt()</code>, <code>theme_colors_plotly()</code>, <code>theme_colors_thematic()</code> helper functions change the background and foreground colors of six popular plot and table packages. These can be used to produce light and dark <a href="https://quarto.org/docs/computations/execution-options.html#cell-renderings"><code>renderings</code></a> to match the plot or table with themes in light and dark mode.</p>
<p>The usage of the the results of these functions depends on the package. See the <a href="https://quarto-dev.github.io/quarto-r/articles/theme-helpers.html">Theme Helpers</a> article for usage examples of <code>theme_colors_*</code>.</p>
<p>The <code>theme_brand_flextable()</code>, <code>theme_brand_ggplot2()</code>, <code>theme_brand_gt()</code>, <code>theme_brand_plotly()</code>, <code>theme_brand_thematic()</code> helper functions change the background and foreground colors of these packages using corresponding <a href="https://posit-dev.github.io/brand-yml/">brand.yml</a> colors. See the <a href="https://examples.quarto.pub/lightdark-renderings-examples/ggplot2.html">Light &amp; Dark Renderings Examples</a> for usage examples of <code>theme_brand_*</code>.</p>
</section>
<section id="work-with-r-scripts" class="level2">
<h2 class="anchored" data-anchor-id="work-with-r-scripts">Work with R Scripts and Quarto</h2>
<section id="extract-r-code-from-quarto-documents" class="level3">
<h3 class="anchored" data-anchor-id="extract-r-code-from-quarto-documents">Extract R Code from Quarto Documents</h3>
<p>The new <code>qmd_to_r_script()</code> <a href="https://lifecycle.r-lib.org/articles/stages.html#experimental"><img src="https://img.shields.io/badge/lifecycle-experimental-orange.svg" alt="Experimental lifecycle"></a> function provides an alternative to <code>knitr::purl()</code> that leverages <code>quarto inspect</code> for code extraction:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb9" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb9-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Extract R code from a Quarto document</span></span>
<span id="cb9-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qmd_to_r_script</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.qmd"</span>)  <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Creates "analysis.R"</span></span>
<span id="cb9-3"></span>
<span id="cb9-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Specify custom output</span></span>
<span id="cb9-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">qmd_to_r_script</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.qmd"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">script =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"extracted-code.R"</span>)</span></code></pre></div></div>
<p>This function uses Quarto’s static document analysis rather than R evaluation, making it faster and safer for simple code extraction. It preserves cells options, commenting cells with <code>eval: false</code>, and ignoring content having <code>purl: false</code>. For documents using advanced knitr features like <code>child=</code> chunks or <code>knitr::read_chunk()</code>, <code>knitr::purl()</code> remains the recommended approach as it handles these through actual document processing.</p>
</section>
<section id="prepare-r-scripts-for-quarto-rendering" class="level3">
<h3 class="anchored" data-anchor-id="prepare-r-scripts-for-quarto-rendering">Prepare R Scripts for Quarto Rendering</h3>
<p>Quarto can <a href="https://quarto.org/docs/computations/render-scripts.html#knitr">render R scripts directly</a>, treating specially formatted comments as Markdown. The <code>add_spin_preamble()</code> function helps prepare R scripts for this feature by adding the required YAML metadata:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb10" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add metadata for rendering</span></span>
<span id="cb10-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">add_spin_preamble</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.R"</span>, </span>
<span id="cb10-3">                  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">title =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Analysis Report"</span>,</span>
<span id="cb10-4">                  <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">preamble =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">author =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Data Team"</span>))</span>
<span id="cb10-5"></span>
<span id="cb10-6"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Now render the script with Quarto</span></span>
<span id="cb10-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_render</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.R"</span>)</span></code></pre></div></div>
<p>This function adds a minimal spin-style preamble (using <code>#'</code> comments) that Quarto recognizes:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb11" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb11-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' ---</span></span>
<span id="cb11-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' title: Analysis Report</span></span>
<span id="cb11-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' author: Data Team</span></span>
<span id="cb11-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#' ---</span></span>
<span id="cb11-5"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#'</span></span>
<span id="cb11-6"></span>
<span id="cb11-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Your original R code follows...</span></span></code></pre></div></div>
<p>The preamble enables Quarto’s <a href="https://quarto.org/docs/computations/execution-options.html#engine-binding">engine binding</a> to properly process the script, allowing you to use R scripts as source documents alongside <code>.qmd</code> files. Learn more about working with R scripts in the <a href="https://quarto-dev.github.io/quarto-r/articles/r-scripts.html">R scripts vignette</a>.</p>
</section>
</section>
<section id="build-paths-from-project" class="level2">
<h2 class="anchored" data-anchor-id="build-paths-from-project">Build Paths from Quarto Project</h2>
<p>Quarto <a href="https://quarto.org/docs/advanced/environment-vars.html#variables-quarto-sets">sets environment variables</a> during rendering that identify the project root, but knitr doesn’t have direct access to this information by default. The new project navigation functions bridge this gap:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb12" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb12-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Build paths relative to the Quarto project root</span></span>
<span id="cb12-2">data_file <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">project_path</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.csv"</span>)</span>
<span id="cb12-3"></span>
<span id="cb12-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Explicitly find the project root (searches for _quarto.yml)</span></span>
<span id="cb12-5">root <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">find_project_root</span>()</span></code></pre></div></div>
<p><code>project_path()</code> <a href="https://lifecycle.r-lib.org/articles/stages.html#experimental"><img src="https://img.shields.io/badge/lifecycle-experimental-orange.svg" alt="Experimental lifecycle"></a> intelligently handles different execution contexts:</p>
<ul>
<li>During <code>quarto render</code>, it uses <code>QUARTO_PROJECT_ROOT</code> or <code>QUARTO_PROJECT_DIR</code> environment variables</li>
<li>In interactive sessions, it automatically detects the project root by searching for <code>_quarto.yml</code>.</li>
<li>Falls back to the current working directory with a warning if no project is found.</li>
</ul>
<p>This ensures your paths work consistently without hardcoding or manual adjustments. For example, you can read a CSV file relative to your project root:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb13" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb13-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># In posts/2025/analysis/report.qmd, this resolves to ../../../data/results.csv</span></span>
<span id="cb13-2">results <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">read.csv</span>(<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">project_path</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"data"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"results.csv"</span>))</span></code></pre></div></div>
<p>For more explicit control, consider using <code>here::i_am()</code> and <code>here::here()</code> as an alternative approach. Follow <a href="https://github.com/r-lib/here/issues/128">r-lib/usethis Issue #128</a> for improved support in next versions of <code>here</code>.</p>
</section>
<section id="automate-quarto-cli" class="level2">
<h2 class="anchored" data-anchor-id="automate-quarto-cli">Automate Quarto CLI from R</h2>
<p>The quarto R package has always been designed as a comprehensive wrapper for the Quarto CLI, enabling seamless integration of Quarto into R workflows and pipelines. This release strengthens that foundation with improved wrappers and new helpers.</p>
<section id="extension-management" class="level3">
<h3 class="anchored" data-anchor-id="extension-management">Extension Management</h3>
<p>Programmatically manage Quarto extensions:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb14-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Add an extension</span></span>
<span id="cb14-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_add_extension</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"quarto-journals/jss"</span>)</span>
<span id="cb14-3"></span>
<span id="cb14-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># List installed extensions</span></span>
<span id="cb14-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_list_extensions</span>()</span>
<span id="cb14-6"></span>
<span id="cb14-7"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Remove an extension</span></span>
<span id="cb14-8"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_remove_extension</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"jss"</span>)</span></code></pre></div></div>
</section>
<section id="project-and-version-management" class="level3">
<h3 class="anchored" data-anchor-id="project-and-version-management">Project and Version Management</h3>
<p>New helpers for common CLI tasks:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb15-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create projects from templates</span></span>
<span id="cb15-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_create</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"article"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">name =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-analysis"</span>)</span>
<span id="cb15-3"></span>
<span id="cb15-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Check if a newer version of Quarto is available</span></span>
<span id="cb15-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">check_newer_version</span>()</span></code></pre></div></div>
</section>
<section id="document-inspection" class="level3">
<h3 class="anchored" data-anchor-id="document-inspection">Document Inspection</h3>
<p>Leverage <code>quarto inspect</code> results to answer questions about documents:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb16" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb16-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Check if a document has parameters (uses quarto inspect internally)</span></span>
<span id="cb16-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">if</span> (<span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">has_parameters</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"report.qmd"</span>)) {</span>
<span id="cb16-3">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_render</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"report.qmd"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">execute_params =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">year =</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2025</span>))</span>
<span id="cb16-4">}</span></code></pre></div></div>
<p>These CLI wrappers enable automation scenarios like CI/CD pipelines, batch processing, and dynamic project management—all from within R. The consistent interface means you can script complex Quarto workflows without leaving your R environment.</p>
</section>
</section>
<section id="additional-improvements" class="level2">
<h2 class="anchored" data-anchor-id="additional-improvements">Additional Improvements</h2>
<section id="familiar-workflows-for-blogdown-users" class="level3">
<h3 class="anchored" data-anchor-id="familiar-workflows-for-blogdown-users">Familiar Workflows for Blogdown Users</h3>
<p>The <code>new_blog_post()</code> function provides a familiar workflow for users transitioning from blogdown:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb17" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb17-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create a new blog post with automatic date prefix and YAML frontmatter</span></span>
<span id="cb17-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">new_blog_post</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-first-quarto-post"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">dir =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"posts"</span>)</span></code></pre></div></div>
<p>Similar to blogdown’s <code>new_post()</code>, this function automatically creates a new blog post file with proper YAML frontmatter in the appropriate directory structure for Quarto blogs, making the transition from blogdown to Quarto smoother.</p>
</section>
<section id="migration-helper-for-bookdown-projects" class="level3">
<h3 class="anchored" data-anchor-id="migration-helper-for-bookdown-projects">Migration Helper for Bookdown Projects</h3>
<p>The <code>detect_bookdown_crossrefs()</code> function helps identify bookdown cross-reference syntax that needs conversion:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb18" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb18-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Scan your bookdown project for cross-references</span></span>
<span id="cb18-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">detect_bookdown_crossrefs</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-bookdown-project/"</span>)</span></code></pre></div></div>
<p>The function prints detailed guidance to the console, showing:</p>
<ul>
<li>Which cross-reference patterns need manual conversion</li>
<li>Which patterns can be automatically converted</li>
<li>Specific examples from your files</li>
</ul>
<p>Example output from the <a href="https://bookdown.org/yihui/bookdown/">bookdown book</a> sources:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb19" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb19-1"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">&gt;</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">detect_bookdown_crossrefs</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"~/Documents/DEV_R/bookdown/inst/examples"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">verbose =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">FALSE</span>)</span>
<span id="cb19-2">ℹ Scanning <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> bookdown cross<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>references <span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">12</span> .Rmd files...</span>
<span id="cb19-3"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">!</span> Found <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">110</span> bookdown cross<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>references that should be converted<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb19-4"></span>
<span id="cb19-5">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">01</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>introduction.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> references</span>
<span id="cb19-6"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> Sec</span>
<span id="cb19-7"></span>
<span id="cb19-8">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">02</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>components.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">52</span> references</span>
<span id="cb19-9"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Eq</span>
<span id="cb19-10"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span> Fig</span>
<span id="cb19-11"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> Lem</span>
<span id="cb19-12"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> Lemma Div</span>
<span id="cb19-13"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span> Numbered Equation</span>
<span id="cb19-14"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span> Sec</span>
<span id="cb19-15"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Tab</span>
<span id="cb19-16"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Theorem Div</span>
<span id="cb19-17"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> Thm</span>
<span id="cb19-18"></span>
<span id="cb19-19">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">03</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>formats.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">20</span> references</span>
<span id="cb19-20"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> Fig</span>
<span id="cb19-21"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">16</span> Sec</span>
<span id="cb19-22"></span>
<span id="cb19-23">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">04</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>customization.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> references</span>
<span id="cb19-24"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Sec</span>
<span id="cb19-25"></span>
<span id="cb19-26">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">05</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>editing.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span> references</span>
<span id="cb19-27"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> Fig</span>
<span id="cb19-28"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Sec</span>
<span id="cb19-29"></span>
<span id="cb19-30">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">06</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>publishing.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">8</span> references</span>
<span id="cb19-31"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> Fig</span>
<span id="cb19-32"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Sec</span>
<span id="cb19-33"></span>
<span id="cb19-34">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">08</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span>usage.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> references</span>
<span id="cb19-35"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span> Sec</span>
<span id="cb19-36"></span>
<span id="cb19-37">• index.Rmd<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">11</span> references</span>
<span id="cb19-38"><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">-</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">11</span> Sec</span>
<span id="cb19-39"></span>
<span id="cb19-40">ℹ Summary of conversion requirements<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb19-41">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Eq reference</span>
<span id="cb19-42">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span> Fig reference</span>
<span id="cb19-43">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> Lem reference</span>
<span id="cb19-44">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span> Lemma Div reference</span>
<span id="cb19-45">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span> Numbered Equation reference</span>
<span id="cb19-46">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">65</span> Sec reference</span>
<span id="cb19-47">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Tab reference</span>
<span id="cb19-48">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> Theorem Div reference</span>
<span id="cb19-49">• <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">4</span> Thm reference</span>
<span id="cb19-50"></span>
<span id="cb19-51">ℹ Manual conversion requirements<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span></span>
<span id="cb19-52">• Section headers<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">65</span> references need manual attention</span>
<span id="cb19-53">• Figure labels<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">17</span> references need manual attention</span>
<span id="cb19-54">• Table labels<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">5</span> references need manual attention</span>
<span id="cb19-55">• Equation structure<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">7</span> references need manual attention</span>
<span id="cb19-56">• Theorem blocks<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> <span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">6</span> references need manual attention</span>
<span id="cb19-57"></span>
<span id="cb19-58">ℹ For detailed conversion guidance, run<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span> quarto<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">detect_bookdown_crossrefs</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"~/Documents/DEV_R/bookdown/inst/examples"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">verbose =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span></code></pre></div></div>
<p>For converting chunk headers from curly brace syntax to Quarto’s YAML style, remember that <a href="https://yihui.org/knitr/reference/convert_chunk_header/"><code>knitr::convert_chunk_header()</code></a> is available:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb20" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb20-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Convert {r label, option=value} to YAML-style chunk options for a single file</span></span>
<span id="cb20-2">knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">convert_chunk_header</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"analysis.Rmd"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">output =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span>
<span id="cb20-3"></span>
<span id="cb20-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># To process multiple files in a directory, you need to iterate:</span></span>
<span id="cb20-5">rmd_files <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">&lt;-</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">list.files</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-bookdown-project/"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">pattern =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">\\</span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">.Rmd$"</span>, </span>
<span id="cb20-6">                        <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">full.names =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">recursive =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">TRUE</span>)</span>
<span id="cb20-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">lapply</span>(rmd_files, knitr<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">::</span>convert_chunk_header, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">output =</span> <span class="cn" style="color: #8f5902;
background-color: null;
font-style: inherit;">NULL</span>)</span></code></pre></div></div>
<p>Together, these tools address the main syntax differences when migrating from bookdown to Quarto.</p>
</section>
<section id="enhanced-workflow" class="level3">
<h3 class="anchored" data-anchor-id="enhanced-workflow">Enhanced Workflow</h3>
<ul>
<li><code>quarto_preview()</code> now returns the preview URL for automation</li>
<li>Better debugging with <code>QUARTO_R_DEBUG=TRUE</code> environment variable</li>
<li>Consistent R version usage in embedded processes</li>
</ul>
</section>
</section>
<section id="breaking-changes" class="level2">
<h2 class="anchored" data-anchor-id="breaking-changes">Breaking Changes</h2>
<section id="output-file-handling" class="level3">
<h3 class="anchored" data-anchor-id="output-file-handling">Output File Handling</h3>
<p>The <code>output_file</code> parameter in <code>quarto_render()</code> now sets the <code>output-file</code> metadata field instead of passing the <code>--output</code> CLI flag to Quarto. This change better aligns with Quarto’s metadata processing and enables support for multiple output formats:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb21" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb21-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Sets output-file metadata (like having 'output-file: report.html' in YAML)</span></span>
<span id="cb21-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_render</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"doc.qmd"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">output_file =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"report.html"</span>)</span></code></pre></div></div>
<p>If you specifically need the old CLI flag behavior, use <code>quarto_args</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb22" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb22-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Use CLI flag directly</span></span>
<span id="cb22-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_render</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"doc.qmd"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">quarto_args =</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">c</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--output"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"report.html"</span>))</span></code></pre></div></div>
</section>
<section id="template-usage" class="level3">
<h3 class="anchored" data-anchor-id="template-usage">Template Usage</h3>
<p><code>quarto_use_template()</code> now requires an empty directory and fails with a clear error message when used in non-empty directories:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb23" style="background: #f1f3f5;"><pre class="sourceCode r code-with-copy"><code class="sourceCode r"><span id="cb23-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Create an empty directory first</span></span>
<span id="cb23-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dir.create</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-article"</span>)</span>
<span id="cb23-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">quarto_use_template</span>(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"quarto-journals/jss"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">dir =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"my-article"</span>)</span></code></pre></div></div>
<p>This change follows a Quarto CLI update that removed interactive prompting for programmatic use. If you need to use templates in existing directories, use <code>quarto use template</code> directly in the terminal for interactive installation.</p>
</section>
</section>
<section id="learn-more" class="level2">
<h2 class="anchored" data-anchor-id="learn-more">Learn More</h2>
<p>Explore the new features and improvements:</p>
<ul>
<li>Documentation for R package: <a href="https://quarto-dev.github.io/quarto-r/" class="uri">https://quarto-dev.github.io/quarto-r/</a></li>
<li>Full changelog: <a href="https://quarto-dev.github.io/quarto-r/news/index.html" class="uri">https://quarto-dev.github.io/quarto-r/news/index.html</a></li>
<li>Report issues: <a href="https://github.com/quarto-dev/quarto-r/issues" class="uri">https://github.com/quarto-dev/quarto-r/issues</a></li>
</ul>
<p>For detailed examples and workflows, check out the new vignettes:</p>
<ul>
<li><a href="https://quarto-dev.github.io/quarto-r/articles/dynamic-metadata.html">Dynamic metadata</a></li>
<li><a href="https://quarto-dev.github.io/quarto-r/articles/markdown-html-tables.html">Markdown in HTML tables</a></li>
<li><a href="https://quarto-dev.github.io/quarto-r/articles/r-scripts.html">Working with R scripts</a></li>
<li><a href="https://quarto-dev.github.io/quarto-r/articles/index.html">All vignettes</a></li>
</ul>
</section>
<section id="acknowledgments" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgments">Acknowledgments</h2>
<p>Special thanks to all contributors that helped make this release:</p>
<p><a href="https://github.com/asadow">@asadow</a>, <a href="https://github.com/caiolivf">@caiolivf</a>, <a href="https://github.com/caocloud">@caocloud</a>, <a href="https://github.com/cderv">@cderv</a>, <a href="https://github.com/coatless">@coatless</a>, <a href="https://github.com/ColinFay">@ColinFay</a>, <a href="https://github.com/cwickham">@cwickham</a>, <a href="https://github.com/davidrsch">@davidrsch</a>, <a href="https://github.com/DillonHammill">@DillonHammill</a>, <a href="https://github.com/eitsupi">@eitsupi</a>, <a href="https://github.com/GeorgeBatten">@GeorgeBatten</a>, <a href="https://github.com/gordonwoodhull">@gordonwoodhull</a>, <a href="https://github.com/jennybc">@jennybc</a>, <a href="https://github.com/jeroen">@jeroen</a>, <a href="https://github.com/joanbadia">@joanbadia</a>, <a href="https://github.com/JosephBARBIERDARNAL">@JosephBARBIERDARNAL</a>, <a href="https://github.com/LiNk-NY">@LiNk-NY</a>, <a href="https://github.com/llrs-roche">@llrs-roche</a>, <a href="https://github.com/milanmlft">@milanmlft</a>, <a href="https://github.com/papayoun">@papayoun</a>, <a href="https://github.com/petermacp">@petermacp</a>, <a href="https://github.com/remlapmot">@remlapmot</a>, <a href="https://github.com/salim-b">@salim-b</a>, <a href="https://github.com/saudiwin">@saudiwin</a>, <a href="https://github.com/smzimbo-bayer">@smzimbo-bayer</a>, <a href="https://github.com/srvanderplas">@srvanderplas</a>, and <a href="https://github.com/wjschne">@wjschne</a>.</p>
<hr>
<p><em>Happy Quarto-ing with R!</em></p>


</section>

 ]]></description>
  <category>R package</category>
  <category>knitr</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-07-28-R-package-release-1.5/</guid>
  <pubDate>Mon, 28 Jul 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-07-28-R-package-release-1.5/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>From One Notebook to Many Reports: Parameterized reports with the jupyter engine</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/</link>
  <description><![CDATA[ 






<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Based on a talk at SciPy 2025
</div>
</div>
<div class="callout-body-container callout-body">
<p>This post is based on the talk “From One Notebook to Many Reports: Automating with Quarto” delivered at <a href="https://www.scipy2025.scipy.org">SciPy 2025</a> by Charlotte Wickham. You can find the slides at <a href="https://cwickham.github.io/one-notebook-many-reports/">cwickham.github.io/one-notebook-many-reports</a> and example code at <a href="https://github.com/cwickham/one-notebook-many-reports">github.com/cwickham/one-notebook-many-reports</a>.</p>
</div>
</div>
<section id="the-problem-repetitive-reporting" class="level2">
<h2 class="anchored" data-anchor-id="the-problem-repetitive-reporting">The Problem: Repetitive Reporting</h2>
<p>Would you rather read a generic “Climate summary” or a “Climate summary for <em>exactly where you live</em>”? Reports that are personalized to a specific situation increase engagement and connection. But producing many customized reports manually is tedious and error-prone.</p>
<p>Quarto solves this with parameterized reports—you create a single document template, then render it multiple times with different parameter values to generate customized outputs automatically.</p>
<p>A great example is the customized soil health reports from Washington Soil Health Initiative’s <a href="https://washingtonsoilhealthinitiative.com/state-of-the-soils/">State of the Soils Assessment</a>, presented at posit::conf(2023) by <a href="https://jadeyryan.com">Jadey Ryan</a> (watch on <a href="https://youtu.be/lbE5uOqfT70?si=C-d5U5Q2VXo1wlDs">YouTube</a>). Jadey demonstrated this approach using R and plain text Quarto files (<code>.qmd</code>).</p>
<p>This post shows you how to apply the same principles using Python: we’ll walk through converting a Jupyter notebook (<code>.ipynb</code>) into a parameterized report, then automating the generation of multiple customized outputs. Then I’ll give you some tips for making your reports look polished.</p>
</section>
<section id="the-solution-parameterized-reports" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="the-solution-parameterized-reports">The Solution: Parameterized Reports</h2>
<section id="start-with-a-notebook" class="level3 page-columns page-full">
<h3 class="anchored" data-anchor-id="start-with-a-notebook">Start with a notebook</h3>
<p>As an example, let’s start with a Jupyter notebook analyzing climate data for Corvallis, Oregon.</p>

<div class="no-row-height column-margin column-container"><div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="corvallis-ipynb.png" class="lightbox" data-gallery="quarto-lightbox-gallery-1" title="corvallis.ipynb"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-ipynb.png" class="img-fluid figure-img" alt="Screenshot of a Jupyter notebook with code cells and output, including a plot and text summary."></a></p>
<figcaption><a href="https://github.com/cwickham/one-notebook-many-reports/blob/main/01-one-notebook/corvallis.ipynb"><code>corvallis.ipynb</code></a></figcaption>
</figure>
</div></div><p>You can see the full notebook, <a href="https://github.com/cwickham/one-notebook-many-reports/blob/main/01-one-notebook/corvallis.ipynb"><code>corvallis.ipynb</code>, on GitHub</a>, but here are the key pieces:</p>
<ul>
<li><p>The code cells import some data for all of Oregon, and filter it to just rows relevant for Corvallis, then produce a summary sentence and a plot.</p></li>
<li><p>The document options specify <code>echo: false</code> so no code appears in the final output, and <code>format: typst</code> so the output is a PDF produced via <a href="https://typst.app">Typst</a>, a modern alternative to LaTeX.</p></li>
</ul>
<p>This single notebook can be rendered with Quarto:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb1-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> render corvallis.ipynb </span></code></pre></div></div>
</div>
<p>The result is a PDF file, <code>corvallis.pdf</code>, a simple report with the title “Corvallis” and a single sentence summary of the climate data, along with a plot highlighting the mean temperature for this year against the last 30 years.</p>

<div class="no-row-height column-margin column-container"><div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="corvallis-pdf.png" class="lightbox" data-gallery="quarto-lightbox-gallery-2" title="corvallis.pdf"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pdf.png" class="img-fluid figure-img" alt="Screenshot of a PDF file with the title 'Corvallis' that contains a single sentence summary and a plot."></a></p>
<figcaption><code>corvallis.pdf</code></figcaption>
</figure>
</div></div><p>Now, imagine we want to create this report for the 50 largest cities in Oregon. Here’s the steps we’ll take:</p>
<ol type="1">
<li>Turn hardcoded values into variables</li>
<li>Declare those variables parameters</li>
<li>Render the notebook with different parameter values</li>
<li>Automate rendering with many parameter values</li>
</ol>
</section>
<section id="turn-hardcoded-values-into-variables" class="level3">
<h3 class="anchored" data-anchor-id="turn-hardcoded-values-into-variables">1. Turn hardcoded values into variables</h3>
<p>We want a report for each city. We’ll start by creating a variable, <code>city</code>, which we’ll designate a parameter in our next step. In a new code cell at the top of our notebook, we define the variable:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb2-1">city <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Corvallis"</span></span></code></pre></div></div>
</div>
<p>Then anywhere we previously hardcoded <code>"Corvallis"</code> in the notebook, we replace it with this variable.</p>
<p>The first occurrence is in the title of the document. Originally, we had a markdown cell defining a level 1 heading:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>markdown</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" data-filename="markdown" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;"># Corvallis</span></span></code></pre></div></div>
</div>
<p>We replace it with a code cell that uses an f-string to produce markdown for a level 1 heading based on the <code>city</code> variable:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb4-1">Markdown(f"# {city}")</span></code></pre></div></div>
</div>
<p>In the filtering step the replacement is straightforward, we just change the string to the variable:</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<p>Before:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb5-1">tmean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> tmean_oregon.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(</span>
<span id="cb5-2">    pl.col(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Corvallis"</span>,</span>
<span id="cb5-3">)</span></code></pre></div></div>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<p>After:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb6-1">tmean <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> tmean_oregon.<span class="bu" style="color: null;
background-color: null;
font-style: inherit;">filter</span>(</span>
<span id="cb6-2">    pl.col(<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>) <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">==</span> city,</span>
<span id="cb6-3">)</span></code></pre></div></div>
</div>
</div>
</div>
</div>
<p>Finally, the plot code (using <a href="https://plotnine.org">plotnine</a>), sets the title of the plot to include the city name:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb7-1">...</span>
<span id="cb7-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> labs(title <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Corvallis, OR"</span>, ...)</span>
<span id="cb7-3">...</span></code></pre></div></div>
</div>
<p>We can also use an f-string here to include the <code>city</code> variable:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>code</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb8" data-filename="code" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb8-1">...</span>
<span id="cb8-2"><span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">+</span> labs(title <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">f"</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">{</span>city<span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">}</span><span class="ss" style="color: #20794D;
background-color: null;
font-style: inherit;">, OR"</span>, ...)</span>
<span id="cb8-3">...</span></code></pre></div></div>
</div>
<p>Now, we should be able to test our changes by explicitly setting the <code>city</code> variable to something other than “Corvallis” and re-running the cells. Since our report is no longer specific to Corvallis, we can rename it <code>climate.ipynb</code>.</p>
</section>
<section id="declare-those-variables-parameters" class="level3">
<h3 class="anchored" data-anchor-id="declare-those-variables-parameters">2. Declare those variables parameters</h3>
<p>Now we have a variable that represents the parameter, we need to let Quarto know it’s a parameter. Quarto’s parameterized reports are implemented using <a href="https://papermill.readthedocs.io/en/latest/">Papermill</a>, and inherit Papermill’s approach: tag the cell defining the parameter with <code>parameters</code>.</p>
<p>In Jupyter, you can add this tag through the cell toolbar:</p>
<p><a href="corvallis-add-tag.png" class="lightbox" data-gallery="quarto-lightbox-gallery-3"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-add-tag.png" class="img-fluid" alt="Screenshot of a Jupyter notebook cell with a tag 'parameters' added to it."></a></p>
<p>You can see the updated notebook, now a parameterized notebook, on GitHub: <a href="hhttps://github.com/cwickham/one-notebook-many-reports/blob/main/02-one-parameterized-report/climate.ipynb"><code>climate.ipynb</code></a>.</p>
</section>
<section id="render-with-different-parameter-values" class="level3">
<h3 class="anchored" data-anchor-id="render-with-different-parameter-values">3. Render with different parameter values</h3>
<p>If we render <code>climate.ipynb</code>, it will still produce the same report for Corvallis, because we haven’t changed the parameter value:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb9" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb9-1"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> render climate.ipynb</span></code></pre></div></div>
</div>
<p>But we can now pass parameter values to Quarto with the <code>-P</code> flag:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>Terminal</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb10" data-filename="Terminal" style="background: #f1f3f5;"><pre class="sourceCode bash code-with-copy"><code class="sourceCode bash"><span id="cb10-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Generate report for Portland</span></span>
<span id="cb10-2"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> render climate.ipynb <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-P</span> city:Portland <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--output-file</span> portland.pdf</span>
<span id="cb10-3"></span>
<span id="cb10-4"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Generate report for Eugene  </span></span>
<span id="cb10-5"><span class="ex" style="color: null;
background-color: null;
font-style: inherit;">quarto</span> render climate.ipynb <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">-P</span> city:Eugene <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">--output-file</span> eugene.pdf</span></code></pre></div></div>
</div>
<p>We’ve also added <code>--output-file</code> to ensure each report gets its own filename.</p>
</section>
<section id="automate-rendering-with-many-parameter-values" class="level3">
<h3 class="anchored" data-anchor-id="automate-rendering-with-many-parameter-values">4. Automate rendering with many parameter values</h3>
<p>To generate all 50 reports, we need to run <code>quarto render</code> 50 times, each time with a different city as the parameter value. You could automate this in many ways, but let’s use a Python script. For example, you might have a dataset of cities and their corresponding output filenames:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>gen-reports.py</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb11" data-filename="gen-reports.py" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb11-1">cities <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> pl.DataFrame({</span>
<span id="cb11-2">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Portland"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Cottage Grove"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"St. Helens"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Eugene"</span>],</span>
<span id="cb11-3">    <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"output_file"</span>: [<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"portland.pdf"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"cottage_grove.pdf"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"st_helens.pdf"</span>, <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"eugene.pdf"</span>]</span>
<span id="cb11-4">})</span></code></pre></div></div>
</div>
<p>I’ve generated a small example above, but in reality you would likely read <code>cities</code> in from a file. Then you could iterate over the rows of this dataset, rendering the notebook for each city:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>gen-reports.py</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb12" data-filename="gen-reports.py" style="background: #f1f3f5;"><pre class="sourceCode python code-with-copy"><code class="sourceCode python"><span id="cb12-1"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">from</span> quarto <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> render</span>
<span id="cb12-2"><span class="cf" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">for</span> row <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">in</span> cities.iter_rows(named<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span><span class="va" style="color: #111111;
background-color: null;
font-style: inherit;">True</span>):</span>
<span id="cb12-3">    render(</span>
<span id="cb12-4">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"climate.ipynb"</span>,</span>
<span id="cb12-5">        execute_params<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>{<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>: row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"city"</span>]},</span>
<span id="cb12-6">        output_file<span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span>row[<span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"output_file"</span>],</span>
<span id="cb12-7">    )</span></code></pre></div></div>
</div>
<p>Run this script once, and you’ll get all 50 custom reports!</p>
<p>You can find the complete working example on GitHub: <a href="https://github.com/cwickham/one-notebook-many-reports/tree/main/03-many-reports">cwickham/one-notebook-many-reports/03-many-reports</a>.</p>
</section>
</section>
<section id="pretty-reports-brand-and-typst" class="level2">
<h2 class="anchored" data-anchor-id="pretty-reports-brand-and-typst">Pretty Reports: Brand and Typst</h2>
<p>The steps above to produce parameterized reports apply to any output format supported by Quarto. However, if you are targeting <code>typst</code> you can take advantage of additional features to create beautiful PDF reports.</p>
<section id="brand.yml" class="level3">
<h3 class="anchored" data-anchor-id="brand.yml">Brand.yml</h3>
<p>Quarto supports <a href="https://posit-dev.github.io/brand-yml/">brand.yml</a> a way to specify colors, fonts, and logos:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_brand.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb13" data-filename="_brand.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb13-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">color</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">palette</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">forest-green</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#2d5a3d"</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">     </span></span>
<span id="cb13-4"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">charcoal-grey</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#555555"</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span></span>
<span id="cb13-5"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">foreground</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> charcoal-grey    </span></span>
<span id="cb13-6"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">primary</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> forest-green       </span></span>
<span id="cb13-7"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">typography</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-8"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fonts</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-9"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">-</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">family</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Open Sans</span></span>
<span id="cb13-10"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">      </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">source</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> google</span></span>
<span id="cb13-11"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">base</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-12"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">family</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Open Sans</span></span>
<span id="cb13-13"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">logo</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb13-14"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">medium</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> logo.png</span></span></code></pre></div></div>
</div>
<p>Quarto will detect the <code>_brand.yml</code> file and apply the colors, fonts and logo to your report. Colors and fonts in your figures will need to be customized in your code, but that is made much easier with the <a href="https://posit-dev.github.io/brand-yml/pkg/py/">brand-yml</a> Python package which imports your values from <code>_brand.yml</code>.</p>
<p>You can see a full example of using <code>_brand.yml</code> with <code>climate.ipynb</code> at <a href="https://github.com/cwickham/scipy-talk/tree/main/04-branded-reports">cwickham/one-notebook-many-reports/04-branded-reports</a>, and learn more about Quarto’s support for brand in the <a href="../../../../docs/authoring/brand.html">Brand guide</a>.</p>
</section>
<section id="typst" class="level3">
<h3 class="anchored" data-anchor-id="typst">Typst</h3>
<p>Learning a little bit of Typst syntax can take your reports from basic to beautiful. You can include <a href="../../../../docs/output-formats/typst.html#raw-typst">raw Typst syntax</a> in your notebooks, or wrap elements in Typst functions using the <a href="https://github.com/christopherkenny/typst-function">typst-function Quarto extension</a>. As an example, you could add a header with the city name and a map of the location:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="corvallis-pretty-pdf.png" class="lightbox" data-gallery="quarto-lightbox-gallery-4" title="corvallis.pdf"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/corvallis-pretty-pdf.png" class="img-fluid figure-img" alt="The `corvallis.ipynb` notebook rendered by Quarto to `pdf`. The document has dark green header with the city in white text and a map next to it with the location as an orange dot."></a></p>
<figcaption><code>corvallis.pdf</code></figcaption>
</figure>
</div>
<p>You can see the source for this example at <a href="https://github.com/cwickham/one-notebook-many-reports/tree/main/05-pretty-reports">cwickham/one-notebook-many-reports/05-pretty-reports</a>.</p>
</section>
</section>
<section id="jupyter-vs-knitr" class="level2">
<h2 class="anchored" data-anchor-id="jupyter-vs-knitr"><code>jupyter</code> vs <code>knitr</code></h2>
<p>The steps for creating a parameterized report above are specific to documents that use the <code>jupyter</code> engine. With a Jupyter notebook (<code>.ipynb</code>), or a plain text Quarto document (<code>.qmd</code>) with only Python code cells, Quarto will default to the <code>jupyter</code> engine. As described above, the <code>jupyter</code> engine uses cell tags to identify parameters.</p>
<p>If you are working in a <code>.ipynb</code> file, your IDE will likely provide a way to add these tags through the cell toolbar. If you are working in a <code>.qmd</code> file, you can add tags as a code cell option:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb14" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb14-1"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```{python}</span></span>
<span id="cb14-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| tags: [parameters]</span></span>
<span id="cb14-3">city <span class="op" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">=</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Corvallis"</span></span>
<span id="cb14-4"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span></code></pre></div></div>
<p>With the <code>jupyter</code> engine, parameters can then be accessed directly as variables, e.g.&nbsp;<code>city</code>, in later code cells.</p>
<p>If you are working in a Quarto document (<code>.qmd</code>) with R code cells, Quarto will default to the <code>knitr</code> engine. With the <code>knitr</code> engine, you set parameters in the document header under <code>params</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb15" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb15-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb15-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">params</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb15-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">city</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Corvallis"</span></span>
<span id="cb15-4"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span></code></pre></div></div>
<p>In <code>knitr</code>, parameters are accessed as elements of <code>params</code>, e.g.&nbsp;<code>params$city</code>.</p>
<p>You can read more about setting and using parameters in <a href="../../../../docs/computations/parameters.html">Guide &gt; Computations &gt; Parameters</a>.</p>
</section>
<section id="wrapping-up" class="level2">
<h2 class="anchored" data-anchor-id="wrapping-up">Wrapping Up</h2>
<p>Parameterized reports turn one notebook into many customized outputs. You’ve seen the process of going from a notebook with a hardcoded value to a parameterized report that can be rendered with different values. You can then automate the rendering in any way you choose to generate dozens of reports at once.</p>


</section>

 ]]></description>
  <category>Authoring</category>
  <category>Teaching</category>
  <category>Jupyter</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/</guid>
  <pubDate>Thu, 24 Jul 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-07-24-parameterized-reports-python/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>How to use GitHub Codespaces to simplify your Quarto workshops</title>
  <dc:creator>Mickaël CANOUIL, _Ph.D._</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/</link>
  <description><![CDATA[ 






<section id="what-is-github-codespaces" class="level2">
<h2 class="anchored" data-anchor-id="what-is-github-codespaces">What Is GitHub Codespaces?</h2>
<p><a href="https://github.com/features/codespaces">GitHub Codespaces</a> is a cloud-powered, on-demand development environment that runs either in your browser or in Visual Studio Code via the <a href="https://marketplace.visualstudio.com/items?itemName=GitHub.codespaces">GitHub Codespaces extension</a>. It eliminates the need for lengthy local setup by providing a fully configured development container, complete with all necessary dependencies and tools. This means that whether you’re an instructor or a developer, you can start coding immediately with a consistent environment tailored to your specific project, right on your web browser.</p>
<p>More importantly, the participants of your workshops can use GitHub Codespaces just as easily as you can. With Codespaces, you and your participants all work on identical environments, minimising the “it doesn’t work on my machine” problems we are all too aware of.</p>
<p>In this post, I am assuming the case of a workshop instructor and a room full of participants with different laptops and operating systems. Codespaces are also useful for development, though, as you will notice reading on.</p>
</section>
<section id="the-power-of-combining-quarto-cli-with-codespaces" class="level2">
<h2 class="anchored" data-anchor-id="the-power-of-combining-quarto-cli-with-codespaces">The Power of Combining Quarto CLI with Codespaces</h2>
<p>Imagine a world where your participants are instantly equipped with the same environment with all the tools, libraries, and sample projects ready to go in the cloud. That’s the magic of using Codespaces:</p>
<ol type="1">
<li><p><strong>Immediate Onboarding:</strong> Workshop participants or students can bypass the hassle of local setup. They simply launch a Codespace (running on their web browser of choice, independently of operating system), and the pre-configured environment is available immediately.</p></li>
<li><p><strong>A Consistent Environment:</strong> Ensuring that everyone has the same tools and dependencies can be challenging. Codespaces lets you pre-define your environment with container configurations, reducing the risk of discrepancies in software versions or settings.</p></li>
<li><p><strong>Reproducible Workflows:</strong> Whether you’re teaching a data science workshop or collaborating on a research paper, reproducibility is crucial. Because GitHub Codespaces uses the <a href="https://containers.dev/">Dev Container specification</a>, you can ensure that your code can be run in the same environment. When participants are ready to run their projects locally, they can use Codespace to build an equivalent Docker container.</p></li>
</ol>
<p>GitHub provides <a href="https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/setting-up-your-repository/facilitating-quick-creation-and-resumption-of-codespaces">“deep link”</a> to Codespaces, allowing you to create a link you can share with your students or workshop participants.</p>
<p>For example, the <a href="https://github.com/mcanouil/quarto-codespaces"><code>quarto-codespaces</code> repository</a> provides several Dev Container / Codespaces configurations. The following link will create a new Codespace using the <code>.devcontainer/universal/devcontainer.json</code> configuration file instead of the default <code>.devcontainer/devcontainer.json</code> file.</p>
<div style="text-align: center;">
<p><a href="https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&amp;devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json"><img src="https://github.com/codespaces/badge.svg" class="img-fluid"></a></p>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb1-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">](https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&amp;devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json)</span></span></code></pre></div></div>
<p>The link can include a specific branch, a particular file, or even a specific line in a file, allowing you to guide participants directly to the relevant content and setup. By doing nothing more than clicking that one link, participants create or resume an existing execution environment.</p>
<div class="dark-content">
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><a href="quarto-codespaces-new-001-dark.png" class="lightbox" data-gallery="codespaces-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-dark.png" class="img-fluid" alt="GitHub Codespaces interface showing the 'Create codespace' page. The page includes a section with the repository 'mcanouil/quarto-codespaces' and a message stating 'No codespace to resume'. There are two buttons: 'Change options' and 'Create new codespace'."></a></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><a href="quarto-codespaces-new-002-dark.png" class="lightbox" data-gallery="codespaces-dark"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-dark.png" class="img-fluid" alt="image_url"></a></p>
</div>
</div>
</div>
</div>
<div class="light-content">
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><a href="quarto-codespaces-new-001-light.png" class="lightbox" data-gallery="codespaces-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-light.png" class="img-fluid" alt="GitHub Codespaces interface showing the 'Create codespace' page. The page includes a section with the repository 'mcanouil/quarto-codespaces' and a message stating 'No codespace to resume'. There are two buttons: 'Change options' and 'Create new codespace'."></a></p>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: center;">
<p><a href="quarto-codespaces-new-002-light.png" class="lightbox" data-gallery="codespaces-light"><img src="https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-light.png" class="img-fluid" alt="image_url"></a></p>
</div>
</div>
</div>
</div>
</section>
<section id="setting-up-your-own-quarto-codespaces-environment" class="level2">
<h2 class="anchored" data-anchor-id="setting-up-your-own-quarto-codespaces-environment">Setting Up Your Own Quarto-Codespaces Environment</h2>
<p>If you’re considering using Codespaces with Quarto CLI for your next workshop or teaching module, here’s how to get started:</p>
<p>Leverage the example provided by the <a href="https://github.com/mcanouil/quarto-codespaces"><code>quarto-codespaces</code> repository</a> or <a href="https://github.com/codespaces/new/">create your own Codespaces using the default</a>.</p>
<section id="use-existing-docker-image" class="level3">
<h3 class="anchored" data-anchor-id="use-existing-docker-image">Use an Existing Docker Image</h3>
<p>The easiest way to get started is to use an existing Docker image that has Quarto CLI and all the dependencies you need. There are several pre-built images available with or without the Quarto CLI:</p>
<ul>
<li>Official Docker images:
<ul>
<li><a href="https://github.com/quarto-dev/quarto-cli/pkgs/container/quarto"><code>ghcr.io/quarto-dev/quarto</code></a></li>
<li><a href="https://github.com/quarto-dev/quarto-cli/pkgs/container/quarto-full"><code>ghcr.io/quarto-dev/quarto-full</code></a></li>
</ul></li>
<li>Community Docker images:
<ul>
<li><a href="https://github.com/mcanouil/quarto-codespaces/pkgs/container/quarto-codespaces"><code>ghcr.io/mcanouil/quarto-codespaces</code></a></li>
</ul></li>
<li>Default Codespaces image:
<ul>
<li><a href="https://github.com/devcontainers/images/tree/main/src/universal"><code>mcr.microsoft.com/devcontainers/universal</code></a></li>
</ul></li>
</ul>
<p>You can use any of these images as a base for your Codespace. Inside the <code>.devcontainer/devcontainer.json</code> file, you can specify the image you want to use. The <code>.devcontainer/devcontainer.json</code> file serves as the blueprint for your Codespace.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="annotated-cell-2" data-llms-code-original="{
  &quot;name&quot;: &quot;My Workshop Setup&quot;,
  &quot;image&quot;: &quot;ghcr.io/mcanouil/quarto-codespaces:latest&quot;, // <1>
  &quot;remoteUser&quot;: &quot;vscode&quot;,
  &quot;customizations&quot;: {
    &quot;vscode&quot;: {
      &quot;extensions&quot;: [
        &quot;quarto.quarto&quot;, // <2>
        &quot;mcanouil.quarto-wizard&quot; // <3>
      ]
    },
    &quot;codespaces&quot;: {
      &quot;openFiles&quot;: [ // <4>
        &quot;exercises/intro-to-quarto.qmd&quot;,
        &quot;exercises/computation.qmd&quot;
      ]
    }
  }
}" style="background: #f1f3f5;"><pre class="sourceCode json code-annotation-code code-with-copy code-annotated"><code class="sourceCode json"><span id="annotated-cell-2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-2-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"name"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"My Workshop Setup"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-2" data-target-annotation="1" onclick="event.preventDefault();">1</a><span id="annotated-cell-2-3" class="code-annotation-target">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"image"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ghcr.io/mcanouil/quarto-codespaces:latest"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-2-4">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"remoteUser"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-2-5">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"customizations"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-2-6">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-2-7">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"extensions"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-2" data-target-annotation="2" onclick="event.preventDefault();">2</a><span id="annotated-cell-2-8" class="code-annotation-target">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"quarto.quarto"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-2" data-target-annotation="3" onclick="event.preventDefault();">3</a><span id="annotated-cell-2-9" class="code-annotation-target">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mcanouil.quarto-wizard"</span></span>
<span id="annotated-cell-2-10">      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span></span>
<span id="annotated-cell-2-11">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="annotated-cell-2-12">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"codespaces"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-2" data-target-annotation="4" onclick="event.preventDefault();">4</a><span id="annotated-cell-2-13" class="code-annotation-target">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"openFiles"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="annotated-cell-2-14">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"exercises/intro-to-quarto.qmd"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-2-15">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"exercises/computation.qmd"</span></span>
<span id="annotated-cell-2-16">      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span></span>
<span id="annotated-cell-2-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-2-18">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-2-19"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span><div class="code-annotation-gutter-bg"></div><div class="code-annotation-gutter"></div></code></pre></div></div>
<dl class="code-annotation-container-grid">
<dt data-target-cell="annotated-cell-2" data-target-annotation="1">1</dt>
<dd>
<span data-code-cell="annotated-cell-2" data-code-lines="3" data-code-annotation="1">The Docker image is specified in the <code>image</code> field. It’s built using a Dev Container specification that you can find in <a href="https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer"><code>.github/.devcontainer</code></a>.</span>
</dd>
<dt data-target-cell="annotated-cell-2" data-target-annotation="2">2</dt>
<dd>
<span data-code-cell="annotated-cell-2" data-code-lines="8" data-code-annotation="2">The <a href="https://github.com/quarto-dev/quarto"><code>quarto</code> extension</a> for Visual Studio Code / Positron to provide support for Quarto documents.</span>
</dd>
<dt data-target-cell="annotated-cell-2" data-target-annotation="3">3</dt>
<dd>
<span data-code-cell="annotated-cell-2" data-code-lines="9" data-code-annotation="3">The <a href="https://github.com/mcanouil/quarto-wizard"><code>quarto-wizard</code> extension</a> for Visual Studio Code / Positron to provide assistance in managing Quarto extensions</span>
</dd>
<dt data-target-cell="annotated-cell-2" data-target-annotation="4">4</dt>
<dd>
<span data-code-cell="annotated-cell-2" data-code-lines="13" data-code-annotation="4">The <code>openFiles</code> field specifies the files to open when the Codespace is created. This is useful for guiding participants to the right files or folders. See the <a href="https://docs.github.com/en/codespaces/setting-up-your-project-for-codespaces/configuring-dev-containers/automatically-opening-files-in-the-codespaces-for-a-repository">Codespaces documentation</a> for more information.</span>
</dd>
</dl>
</section>
<section id="configure-the-development-container" class="level3">
<h3 class="anchored" data-anchor-id="configure-the-development-container">Configure the Development Container</h3>
<p>You can fork the <a href="https://github.com/mcanouil/quarto-codespaces"><code>quarto-codespaces</code> repository</a> as a starting point for your own Codespaces. This repository includes the Dev Container configuration file (<em>i.e.</em>, <code>.devcontainer/devcontainer.json</code>) that instruct Codespaces on how to set up an environment complete with Quarto CLI and other essential tools.</p>
<p>The <code>.devcontainer/devcontainer.json</code> configuration file ensures that every instance of your Codespace is identical, capturing everything from the Quarto CLI version to additional libraries or extensions you might need.</p>
<p>The <a href="https://github.com/mcanouil/quarto-codespaces"><code>quarto-codespaces</code> repository</a> is a great starting point as it provides a prebuilt Docker image with the latest Quarto CLI, Python, R, and Julia installed (<em>i.e.</em>, <a href="https://github.com/mcanouil/quarto-codespaces/pkgs/container/quarto-codespaces"><code>ghcr.io/mcanouil/quarto-codespaces</code></a> using <a href="https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer"><code>.github/.devcontainer/devcontainer.json</code></a>).</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="annotated-cell-3" data-llms-code-original="{
  &quot;name&quot;: &quot;Quarto&quot;,
  // &quot;image&quot;: &quot;buildpack-deps:jammy-curl&quot;, // <1>
  &quot;build&quot;: {
    &quot;dockerfile&quot;: &quot;./Dockerfile&quot;,
    &quot;context&quot;: &quot;.&quot;,
    &quot;args&quot;: {
      &quot;VARIANT&quot;: &quot;jammy&quot;
    }
  },
  &quot;remoteUser&quot;: &quot;vscode&quot;,
  &quot;features&quot;: { // <2>
    &quot;./quarto-computing-dependencies&quot;: { // <3>
      &quot;rDeps&quot;: &quot;rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr&quot;,
      &quot;pythonDeps&quot;: &quot;jupyter,papermill&quot;,
      &quot;juliaDeps&quot;: &quot;IJulia&quot;
    },
    &quot;./uv&quot;: { // <4>
      &quot;version&quot;: &quot;latest&quot;
    },
    &quot;ghcr.io/rocker-org/devcontainer-features/quarto-cli:1&quot;: { // <5>
      &quot;version&quot;: &quot;release&quot;,
      &quot;installTinyTex&quot;: &quot;true&quot;,
      &quot;installChromium&quot;: &quot;false&quot;
    }
  },
  &quot;customizations&quot;: { // <6>
    &quot;vscode&quot;: {
      &quot;extensions&quot;: [
        &quot;quarto.quarto&quot;,
        &quot;mcanouil.quarto-wizard&quot;,
        &quot;REditorSupport.r&quot;,
        &quot;Posit.air-vscode&quot;
      ],
      &quot;settings&quot;: {
        &quot;r.rterm.option&quot;: [
          &quot;--no-save&quot;,
          &quot;--no-restore-data&quot;,
          &quot;--quiet&quot;
        ],
        &quot;[r]&quot;: {
          &quot;editor.defaultFormatter&quot;: &quot;Posit.air-vscode&quot;,
          &quot;editor.formatOnSave&quot;: true
        }
      }
    }
  }
}" style="background: #f1f3f5;"><pre class="sourceCode json code-annotation-code code-with-copy code-annotated"><code class="sourceCode json"><span id="annotated-cell-3-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"name"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Quarto"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="1" onclick="event.preventDefault();">1</a><span id="annotated-cell-3-3" class="code-annotation-target">  <span class="er" style="color: #AD0000;
background-color: null;
font-style: inherit;">//</span> <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"image"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"buildpack-deps:jammy-curl"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-4">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"build"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-5">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"dockerfile"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"./Dockerfile"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-6">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"context"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"."</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-7">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"args"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-8">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"VARIANT"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"jammy"</span></span>
<span id="annotated-cell-3-9">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-10">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<span id="annotated-cell-3-11">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"remoteUser"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="2" onclick="event.preventDefault();">2</a><span id="annotated-cell-3-12" class="code-annotation-target">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"features"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="3" onclick="event.preventDefault();">3</a><span id="annotated-cell-3-13" class="code-annotation-target">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"./quarto-computing-dependencies"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-14">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"rDeps"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-15">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"pythonDeps"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"jupyter,papermill"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-16">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"juliaDeps"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"IJulia"</span></span>
<span id="annotated-cell-3-17">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="4" onclick="event.preventDefault();">4</a><span id="annotated-cell-3-18" class="code-annotation-target">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"./uv"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-19">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"version"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"latest"</span></span>
<span id="annotated-cell-3-20">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="5" onclick="event.preventDefault();">5</a><span id="annotated-cell-3-21" class="code-annotation-target">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"ghcr.io/rocker-org/devcontainer-features/quarto-cli:1"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-22">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"version"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"release"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-23">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"installTinyTex"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"true"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-24">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"installChromium"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"false"</span></span>
<span id="annotated-cell-3-25">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-26">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">},</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-3" data-target-annotation="6" onclick="event.preventDefault();">6</a><span id="annotated-cell-3-27" class="code-annotation-target">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"customizations"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-28">    <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-29">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"extensions"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="annotated-cell-3-30">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"quarto.quarto"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-31">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"mcanouil.quarto-wizard"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-32">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"REditorSupport.r"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-33">        <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posit.air-vscode"</span></span>
<span id="annotated-cell-3-34">      <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-35">      <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"settings"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-36">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"r.rterm.option"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">[</span></span>
<span id="annotated-cell-3-37">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--no-save"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-38">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--no-restore-data"</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-39">          <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"--quiet"</span></span>
<span id="annotated-cell-3-40">        <span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">]</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-41">        <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"[r]"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-3-42">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"editor.defaultFormatter"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"Posit.air-vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-3-43">          <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"editor.formatOnSave"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">true</span></span>
<span id="annotated-cell-3-44">        <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-45">      <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-46">    <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-47">  <span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span>
<span id="annotated-cell-3-48"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span><div class="code-annotation-gutter-bg"></div><div class="code-annotation-gutter"></div></code></pre></div></div>
<dl class="code-annotation-container-grid">
<dt data-target-cell="annotated-cell-3" data-target-annotation="1">1</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="3" data-code-annotation="1">The <code>image</code> field specifies the base image for the container. You can customise this to suit your needs.</span>
</dd>
<dt data-target-cell="annotated-cell-3" data-target-annotation="2">2</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="12" data-code-annotation="2">The <code>features</code> section allows you to add additional tools or libraries. See the <a href="https://containers.dev/features/">Dev Container Features available</a> for a comprehensive list of available features.</span>
</dd>
<dt data-target-cell="annotated-cell-3" data-target-annotation="3">3</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="13" data-code-annotation="3">The <code>quarto-computing-dependencies</code> feature is a “local” custom feature that installs the computing dependencies: R, Python, and Julia. This is a great way to ensure that your Codespace has everything it needs to run Quarto documents.</span>
</dd>
<dt data-target-cell="annotated-cell-3" data-target-annotation="4">4</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="18" data-code-annotation="4">The <code>uv</code> feature installs the <a href="https://docs.astral.sh/uv/"><code>uv</code> tool</a> to manage Python packages and project dependencies.</span>
</dd>
<dt data-target-cell="annotated-cell-3" data-target-annotation="5">5</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="21" data-code-annotation="5">The <code>quarto-cli</code> feature installs the Quarto CLI. You can specify the version you want to install, and it will be automatically downloaded and installed in your Codespace. You can see the code for this feature in the source repository: <a href="https://github.com/rocker-org/devcontainer-features/tree/main/src/quarto-cli" class="uri">https://github.com/rocker-org/devcontainer-features/tree/main/src/quarto-cli</a>.</span>
</dd>
<dt data-target-cell="annotated-cell-3" data-target-annotation="6">6</dt>
<dd>
<span data-code-cell="annotated-cell-3" data-code-lines="27" data-code-annotation="6">The <code>customizations</code> section allows you to specify settings and extensions for Visual Studio Code.</span>
</dd>
</dl>
<p>You can also add additional features to the <code>devcontainer.json</code> to suit your needs or start directly using the image as is as shown in Use an Existing Docker Image.</p>
<p>For example, you might want to add additional R packages or Python libraries. You can do this by using the <code>quarto-computing-dependencies</code> custom feature and changing the <code>rDeps</code>, <code>pythonDeps</code>, and <code>juliaDeps</code> fields to include the packages you want to install globally, or by using the <code>postStartCommand</code> field to run a script that installs the packages you need.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode json code-with-copy"><code class="sourceCode json"><span id="cb2-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="cb2-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"name"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"My Workshop Setup"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb2-3">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"image"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ghcr.io/mcanouil/quarto-codespaces:latest"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb2-4">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"remoteUser"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="cb2-5">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"postStartCommand"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"uv venv &amp;&amp; source .venv/bin/activate &amp;&amp; uv pip install -r requirements.txt"</span></span>
<span id="cb2-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span></code></pre></div></div>
<p>You can also use the <code>postStartCommand</code> field to run a script that installs the packages you need.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="annotated-cell-5" data-llms-code-original="{
  &quot;name&quot;: &quot;My Workshop Setup&quot;,
  &quot;image&quot;: &quot;ghcr.io/mcanouil/quarto-codespaces:latest&quot;,
  &quot;remoteUser&quot;: &quot;vscode&quot;,
  &quot;postStartCommand&quot;: &quot;bash ./init-env.sh --what all --force&quot; // <1>
}" style="background: #f1f3f5;"><pre class="sourceCode json code-annotation-code code-with-copy code-annotated"><code class="sourceCode json"><span id="annotated-cell-5-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">{</span></span>
<span id="annotated-cell-5-2">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"name"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"My Workshop Setup"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-5-3">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"image"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"ghcr.io/mcanouil/quarto-codespaces:latest"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<span id="annotated-cell-5-4">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"remoteUser"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"vscode"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">,</span></span>
<a class="code-annotation-anchor" data-target-cell="annotated-cell-5" data-target-annotation="1" onclick="event.preventDefault();">1</a><span id="annotated-cell-5-5" class="code-annotation-target">  <span class="dt" style="color: #AD0000;
background-color: null;
font-style: inherit;">"postStartCommand"</span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">:</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"bash ./init-env.sh --what all --force"</span></span>
<span id="annotated-cell-5-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">}</span></span><div class="code-annotation-gutter-bg"></div><div class="code-annotation-gutter"></div></code></pre></div></div>
<dl class="code-annotation-container-grid">
<dt data-target-cell="annotated-cell-5" data-target-annotation="1">1</dt>
<dd>
<span data-code-cell="annotated-cell-5" data-code-lines="5" data-code-annotation="1">The <code>postStartCommand</code> field specifies a command to run after the Codespace is started. In this case, it runs the <a href="https://github.com/mcanouil/quarto-codespaces/blob/main/init-env.sh"><code>init-env.sh</code> script</a> from <a href="https://github.com/mcanouil/quarto-codespaces"><code>quarto-codespaces</code> repository</a> with the <code>--what all</code> and <code>--force</code> options.</span>
</dd>
</dl>
</section>
</section>
<section id="benefits-for-workshops-and-teaching" class="level2">
<h2 class="anchored" data-anchor-id="benefits-for-workshops-and-teaching">Benefits for Workshops and Teaching</h2>
<p>When it comes to educational sessions, consistency and ease-of-use are paramount. Pairing Codespaces with Quarto CLI brings many direct benefits to a teaching environment:</p>
<ul>
<li><strong>Streamlined Onboarding:</strong> Students and workshop attendees can get right to work without spending time installing and configuring local environments.</li>
<li><strong>Live, Interactive Sessions:</strong> Instructors can demonstrate live edits to Quarto documents. Changes can be rendered instantly and reflect in each participant’s environment: perfect for a hands-on, interactive learning experience.</li>
<li><strong>Collaboration and Version Control:</strong> All changes can be recorded in Git, making it easy to track progress, handle peer reviews, and manage collaborative projects, all within a single hosted environment.</li>
<li><strong>Elimination of “Dependency Hell”:</strong> With containerised development, all attendees work from the same baseline, ensuring that version conflicts or missing libraries don’t derail a session.</li>
</ul>
</section>
<section id="final-thoughts-and-future-directions" class="level2">
<h2 class="anchored" data-anchor-id="final-thoughts-and-future-directions">Final Thoughts and Future Directions</h2>
<p>Whether you’re running a workshop, teaching a class, or collaborating on research, using Codespaces can reduce setup hassles, foster reproducibility, and encourage interactive learning.</p>
<p>In addition to the benefits mentioned above, other features further enhance your experience with Codespaces and Quarto CLI:</p>
<ul>
<li><strong>Automated Pipelines:</strong> Integrating CI/CD tools to automatically validate Quarto document renders and catch errors using the exact same environment. See <a href="https://docs.github.com/en/actions/writing-workflows/choosing-where-your-workflow-runs/running-jobs-in-a-container">GitHub Actions: Running jobs in a container</a></li>
<li><strong>Real-Time Co-Editing Features:</strong> Enhancing collaborative sessions with simultaneous multi-user editing directly in Codespaces. See <a href="https://docs.github.com/en/codespaces/developing-in-a-codespace/working-collaboratively-in-a-codespace">GitHub Codespaces: Real-time collaboration</a></li>
</ul>
<p>This post covered the basics of using Codespaces and Quarto together, but there’s much more to Codespaces. Learn more by <a href="https://docs.github.com/en/codespaces">consulting their documentation</a>.</p>
<p>Happy teaching!</p>
</section>



<div id="quarto-appendix" class="default"><section id="disclaimer" class="level2 appendix unnumbered"><h2 class="anchored quarto-appendix-heading">Disclaimer</h2><div class="quarto-appendix-contents">

<p>GitHub Codespaces is a product of GitHub, Inc.&nbsp;and comes with a quota of free usage, including CPU hours and storage. Be sure to check the <a href="https://docs.github.com/en/billing/managing-billing-for-your-products/managing-billing-for-github-codespaces/about-billing-for-github-codespaces">GitHub Codespaces billing documentation</a> and your current GitHub plan to avoid unexpected charges. If you are a student or an educator, you can explore the <a href="https://education.github.com/pack">GitHub Education program</a> and <a href="https://docs.github.com/en/education/manage-coursework-with-github-classroom/integrate-github-classroom-with-an-ide/using-github-codespaces-with-github-classroom">GitHub Classroom</a>.</p>
</div></section><section id="acknowledgements" class="level2 appendix unnumbered"><h2 class="anchored quarto-appendix-heading">Acknowledgements</h2><div class="quarto-appendix-contents">

<p>Thanks to <a href="https://github.com/cscheid">Carlos Scheidegger</a>, <a href="https://github.com/juliasilge">Julia Silge</a>, and <a href="https://github.com/coatless">James J. Balamuta</a> for their feedback and suggestions on this post.</p>


</div></section></div> ]]></description>
  <category>GitHub Codespaces</category>
  <category>Teaching</category>
  <category>Dev Container</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/</guid>
  <pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-05-19-quarto-codespaces/featured.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Quarto 1.7</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/</link>
  <description><![CDATA[ 






<p>Quarto 1.7 is out! You can get the current release from the <a href="../../../../docs/download/index.html">download page</a>.</p>
<p>We are especially enthusiastic about the improvements 1.7 brings to dark mode: you can now specify light and dark themes via brand, map computational outputs to themes, and have your website theme follow your viewer’s preference. To celebrate these changes, this site, <a href="../../../..">quarto.org</a>, now has a light and dark mode. Toggle the switch in the navigation bar (<i class="bi bi-toggle-off"></i>) to see the difference.</p>
<p>You can read about these improvements and some other highlights below. You can find all the changes in this version in the <a href="../../../../docs/download/changelog/1.7/">Release Notes</a>.</p>
<section id="dark-mode-improvements" class="level2">
<h2 class="anchored" data-anchor-id="dark-mode-improvements">Dark Mode Improvements</h2>
<section id="specify-light-and-dark-themes-via-brand.yml" class="level3">
<h3 class="anchored" data-anchor-id="specify-light-and-dark-themes-via-brand.yml">Specify light and dark themes via <strong>brand.yml</strong></h3>
<p>You can now specify a light and dark brand. For example, at a project-level you can provide two brand files:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_quarto.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="_quarto.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brand</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">light</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> light-brand.yml</span></span>
<span id="cb1-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dark</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> dark-brand.yml</span></span></code></pre></div></div>
</div>
<p>Standalone HTML pages, websites, and dashboards will gain a light switch toggle allowing viewers to switch between the light and dark themes.</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/light.png" class="img-fluid figure-img" alt="Screenshot of a webpage with a light blue body and charcoal text. A switch toggle in the navbar is 'off'."></p>
<figcaption><code>light</code> brand</figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/dark.png" class="img-fluid figure-img" alt="Screenshot of a webpage with a dark charcoal body and light blue text. A switch toggle in the navbar is 'on'."></p>
<figcaption><code>dark</code> brand</figcaption>
</figure>
</div>
</div>
</div>
</div>
<p>By default Typst documents will use the light brand, but you can set the <code>brand-mode</code> option to use the dark brand instead:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>document.qmd</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" data-filename="document.qmd" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb2-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb2-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">typst</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb2-4"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">brand-mode</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> dark</span></span>
<span id="cb2-5"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span></code></pre></div></div>
</div>
<p>Read about other ways to set a light and dark brand in <a href="../../../../docs/authoring/brand.html#dark-brand">Guide &gt; Brand</a>.</p>
</section>
<section id="map-computational-outputs-to-themes" class="level3">
<h3 class="anchored" data-anchor-id="map-computational-outputs-to-themes">Map computational outputs to themes</h3>
<p>A new code cell option, <code>renderings</code>, allows you to indicate which computational outputs should be displayed in light and dark mode. Create light and dark versions of your outputs in a single code cell, and add the option <code>renderings</code> to specify the order of the outputs. For example, this cell creates a <code>light</code> version of a plot, then a <code>dark</code> version:</p>
<div class="cell" data-renderings="[&quot;light&quot;,&quot;dark&quot;]">
<div class="code-copy-outer-scaffold"><div class="sourceCode cell-code" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb3-1"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```{r}</span></span>
<span id="cb3-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| renderings: [light, dark]</span></span>
<span id="cb3-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Shown in `light` mode</span></span>
<span id="cb3-4"></span>
<span id="cb3-5"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">par</span>(<span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">bg =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#000000"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">fg =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#FFFFFF"</span>, <span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">col.axis =</span> <span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#FFFFFF"</span>)</span>
<span id="cb3-6"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">plot</span>(<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span><span class="sc" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">:</span><span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">10</span>) <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"># Shown in `dark` mode</span></span>
<span id="cb3-7"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span></code></pre></div></div>
<div class="cell-output-display light-content">
<div>
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/index_files/figure-html/unnamed-chunk-1-1.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
<div class="cell-output-display dark-content">
<div>
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/index_files/figure-html/unnamed-chunk-1-2.png" class="img-fluid figure-img" width="672"></p>
</figure>
</div>
</div>
</div>
<p>Both outputs are produced, but you’ll only see the one corresponding to the current state of the light switch. Toggle the switch in the navigation bar to see the image change to reflect the theme.</p>
</section>
<section id="respect-user-color-scheme" class="level3">
<h3 class="anchored" data-anchor-id="respect-user-color-scheme">Respect user color scheme</h3>
<p>Set the new <code>html</code> format option <code>respect-user-color-scheme</code> to <code>true</code> if you would like your site to honor the viewer’s operating system or browser preference for light or dark mode:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_quarto.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" data-filename="_quarto.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb4-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">format</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb4-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">html</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb4-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">respect-user-color-scheme</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="ch" style="color: #20794D;
background-color: null;
font-style: inherit;">true</span></span></code></pre></div></div>
</div>
</section>
</section>
<section id="other-highlights" class="level2">
<h2 class="anchored" data-anchor-id="other-highlights">Other Highlights</h2>
<ul>
<li><p>Typst updated to 0.13.0</p></li>
<li><p>Pandoc updated to 3.6.3</p></li>
<li><p>New <a href="../../../../docs/authoring/version.html"><code>version</code> shortcode</a> to insert the version of Quarto used to build your document:</p>
<div class="quarto-layout-panel" data-layout-ncol="2">
<div class="quarto-layout-row quarto-layout-valign-center">
<div class="quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" data-shortcodes="false" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb5-1">Rendered with Quarto {{&lt; version &gt;}}</span></code></pre></div></div>
</div>
<div class="border p-1 quarto-layout-cell" style="flex-basis: 50.0%;justify-content: flex-start;">
<p>Rendered with Quarto 1.10.1</p>
</div>
</div>
</div></li>
<li><p>Updated LaTeX and Beamer template partials:</p>
<ul>
<li><a href="../../../../docs/journals/templates.html#latex-partials">LaTeX partials</a></li>
<li><a href="../../../../docs/journals/templates.html#beamer-partials">Beamer partials</a></li>
</ul>
<p>These changes reflect the updates made in Pandoc 3.5 to separate the LaTeX and Beamer document templates and introduce some additional partials for both. If you have custom formats that provide custom templates or partials, you may need to update them to work with the new partials.</p></li>
<li><p>Improvements to the <code>julia</code> engine:</p>
<ul>
<li><p><a href="../../../../docs/computations/julia.html#juliaup-integration"><code>juliaup</code> integration</a>: Use specific versions of Julia in your notebooks.</p></li>
<li><p><a href="../../../../docs/computations/julia.html#r-and-python-support">R and Python support</a>: Include <code>{r}</code> and <code>{python}</code> executable code cells via the RCall and PythonCall packages.</p></li>
<li><p><a href="../../../../docs/computations/julia.html#caching-julia">Caching</a>: Save time rendering long-running notebooks by caching results.</p></li>
<li><p><a href="../../../../docs/computations/julia.html#revise.jl-integration">Revise.jl integration</a>: Automatically update function definitions in Julia sessions.</p></li>
</ul></li>
</ul>
</section>
<section id="acknowledgements" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgements">Acknowledgements</h2>
<p>We’d like to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:</p>
<p><a href="https://github.com/AndreasThinks">AndreasThinks</a>, <a href="https://github.com/ArthurData">ArthurData</a>, <a href="https://github.com/BrendonChau">BrendonChau</a>, <a href="https://github.com/DanStuder">DanStuder</a>, <a href="https://github.com/DavidFirth">DavidFirth</a>, <a href="https://github.com/Eli-78-fas">Eli-78-fas</a>, <a href="https://github.com/EllaKaye">EllaKaye</a>, <a href="https://github.com/EmilHvitfeldt">EmilHvitfeldt</a>, <a href="https://github.com/EvoArt">EvoArt</a>, <a href="https://github.com/FMKerckhof">FMKerckhof</a>, <a href="https://github.com/FrankwaP">FrankwaP</a>, <a href="https://github.com/JanPalasek">JanPalasek</a>, <a href="https://github.com/Jocarnail">Jocarnail</a>, <a href="https://github.com/MHellmund">MHellmund</a>, <a href="https://github.com/MichaelHatherly">MichaelHatherly</a>, <a href="https://github.com/Noghpu">Noghpu</a>, <a href="https://github.com/PeneLoopy">PeneLoopy</a>, <a href="https://github.com/Rafnuss">Rafnuss</a>, <a href="https://github.com/SergeCroise">SergeCroise</a>, <a href="https://github.com/TonyFly3000">TonyFly3000</a>, <a href="https://github.com/actuaristai">actuaristai</a>, <a href="https://github.com/alex-r-bigelow">alex-r-bigelow</a>, <a href="https://github.com/andrewheiss">andrewheiss</a>, <a href="https://github.com/ant-durrant">ant-durrant</a>, <a href="https://github.com/antoine4ucsd">antoine4ucsd</a>, <a href="https://github.com/arnaudgallou">arnaudgallou</a>, <a href="https://github.com/aronatkins">aronatkins</a>, <a href="https://github.com/arthurgailes">arthurgailes</a>, <a href="https://github.com/bkowshik">bkowshik</a>, <a href="https://github.com/boshek">boshek</a>, <a href="https://github.com/cbrnr">cbrnr</a>, <a href="https://github.com/cl-roberts">cl-roberts</a>, <a href="https://github.com/cmadland">cmadland</a>, <a href="https://github.com/coatless">coatless</a>, <a href="https://github.com/deepayan">deepayan</a>, <a href="https://github.com/devmcp">devmcp</a>, <a href="https://github.com/dhimmel">dhimmel</a>, <a href="https://github.com/dkapitan">dkapitan</a>, <a href="https://github.com/dmenne">dmenne</a>, <a href="https://github.com/eamcvey">eamcvey</a>, <a href="https://github.com/edavidaja">edavidaja</a>, <a href="https://github.com/fredguth">fredguth</a>, <a href="https://github.com/fuhrmanator">fuhrmanator</a>, <a href="https://github.com/gadenbuie">gadenbuie</a>, <a href="https://github.com/apps/github-actions">github-actions[bot]</a>, <a href="https://github.com/glin">glin</a>, <a href="https://github.com/gwbrck">gwbrck</a>, <a href="https://github.com/hchulkim">hchulkim</a>, <a href="https://github.com/hguturu">hguturu</a>, <a href="https://github.com/hturner">hturner</a>, <a href="https://github.com/ihrke">ihrke</a>, <a href="https://github.com/jdutant">jdutant</a>, <a href="https://github.com/jenslaufer">jenslaufer</a>, <a href="https://github.com/jkrumbiegel">jkrumbiegel</a>, <a href="https://github.com/jmgirard">jmgirard</a>, <a href="https://github.com/joelostblom">joelostblom</a>, <a href="https://github.com/kandolfp">kandolfp</a>, <a href="https://github.com/kapsner">kapsner</a>, <a href="https://github.com/kazuyanagimoto">kazuyanagimoto</a>, <a href="https://github.com/kdheepak">kdheepak</a>, <a href="https://github.com/kingo55">kingo55</a>, <a href="https://github.com/knuesel">knuesel</a>, <a href="https://github.com/kubu4">kubu4</a>, <a href="https://github.com/kv9898">kv9898</a>, <a href="https://github.com/kylie-foster">kylie-foster</a>, <a href="https://github.com/loneguardian">loneguardian</a>, <a href="https://github.com/lwjohnst86">lwjohnst86</a>, <a href="https://github.com/ma2048">ma2048</a>, <a href="https://github.com/markjholmes">markjholmes</a>, <a href="https://github.com/maurosilber">maurosilber</a>, <a href="https://github.com/mipmip">mipmip</a>, <a href="https://github.com/mroavi">mroavi</a>, <a href="https://github.com/mroberts1">mroberts1</a>, <a href="https://github.com/msh855">msh855</a>, <a href="https://github.com/mvuorre">mvuorre</a>, <a href="https://github.com/nathanj3">nathanj3</a>, <a href="https://github.com/odysseu">odysseu</a>, <a href="https://github.com/parmsam">parmsam</a>, <a href="https://github.com/peter-gy">peter-gy</a>, <a href="https://github.com/pvelayudhan">pvelayudhan</a>, <a href="https://github.com/raffaem">raffaem</a>, <a href="https://github.com/robmcd">robmcd</a>, <a href="https://github.com/ryanzomorrodi">ryanzomorrodi</a>, <a href="https://github.com/stragu">stragu</a>, <a href="https://github.com/sun123zxy">sun123zxy</a>, <a href="https://github.com/t-kalinowski">t-kalinowski</a>, <a href="https://github.com/temospena">temospena</a>, <a href="https://github.com/tjni">tjni</a>, <a href="https://github.com/torven-schalk">torven-schalk</a>, <a href="https://github.com/turcotte">turcotte</a>, <a href="https://github.com/wenyaoliu">wenyaoliu</a>, <a href="https://github.com/yhkee0404">yhkee0404</a>.</p>


</section>

 ]]></description>
  <category>Quarto 1.7</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/</guid>
  <pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-04-28-1.7-release/thumbnail-1.7.jpeg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>Tip - use Positron to choose colors for your project brand</title>
  <dc:creator>Carlos Scheidegger</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2025-01-15-quarto-tip-brand-positron/</link>
  <description><![CDATA[ 






<p>In today’s Quarto Tip, we show you how <a href="https://positron.posit.co">Positron</a> enables a very easy workflow for creating and changing colors in your <code>_brand.yml</code> file. Quarto 1.6 includes <a href="https://posit-dev.github.io/brand-yml/">support for <code>_brand.yml</code></a>, a standard for creating a single style configuration file that is usable across formats and systems.</p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/Mly_DK-2BnI" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
<p>Additional links:</p>
<ul>
<li><a href="../../../../docs/blog/posts/2024-11-25-1.6-release/index.html">Quarto 1.6 release post</a></li>
<li><a href="https://positron.posit.co/download.html">Download Positron</a></li>
<li><a href="../../../../docs/authoring/brand.html">Quarto’s <code>_brand.yml</code> documentation</a></li>
</ul>



 ]]></description>
  <category>Learn</category>
  <category>Tip</category>
  <category>brand</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2025-01-15-quarto-tip-brand-positron/</guid>
  <pubDate>Wed, 15 Jan 2025 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2025-01-15-quarto-tip-brand-positron/brand.png" medium="image" type="image/png" height="86" width="144"/>
</item>
<item>
  <title>Use meta + include to customize reusable content</title>
  <dc:creator>Ashley Henry</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/</link>
  <description><![CDATA[ 






<div class="callout callout-style-default callout-tip callout-titled">
<div class="callout-header d-flex align-content-center">
<div class="callout-icon-container">
<i class="callout-icon"></i>
</div>
<div class="callout-title-container flex-fill">
<span class="screen-reader-only">Tip</span>Re-posted from posit.co
</div>
</div>
<div class="callout-body-container callout-body">
<p>This post was originally published on the <a href="https://posit.co/blog/quarto-meta-shortcode-variables/">Posit Blog</a>.</p>
<p>The worked example below is also available at: <a href="https://github.com/quarto-dev/quarto-examples/tree/main/websites/quarto-meta-includes">Source</a> | <a href="https://examples.quarto.pub/quarto-meta-includes/">Live Website</a></p>
</div>
</div>
<p>There may be times when you would like to single-source content across multiple pages/files to reduce the risk of errors, produce consistent content that is easy to maintain, and ultimately save valuable time. <a href="../../../../index.html">Quarto</a> (an open-source technical publishing system), provides an <a href="../../../../docs/authoring/includes.html">Includes</a> feature (the equivalent of an R Markdown “child” document) that allows you to reuse content across multiple documents/files/pages.</p>
<p>To achieve this, simply create chunks of content (text, tables, code, callouts, images, etc.) and then insert it using the Include shortcode: <code>{{&lt; include _content.qmd &gt;}}</code>.</p>
<p>Typically, you must keep your content general enough so it can be reused in several places. In other words, if you needed to add a name or an image that is specific to that file, you would assume that you wouldn’t be able to use an include, or you would have to use several smaller includes sewn into uniquely written content.</p>
<p>But what if you need your single-sourced content to be more specific? You can use Includes with <code>meta</code> shortcode (variables) to add precise values defined at the file level.</p>
<section id="walkthrough-example" class="level2">
<h2 class="anchored" data-anchor-id="walkthrough-example">Walkthrough example</h2>
<p>Let us walk you through an example of how to achieve this.</p>
<p>Before you begin:</p>
<ul>
<li>Quarto version 1.5+ was used for this walkthrough example.</li>
<li>This has been tested with both new and existing Website projects.</li>
<li>A <code>var</code> shortcode enables you to insert content from the project or file level.</li>
<li>The <code>meta</code> shortcode allows you to insert content from Pandoc metadata (e.g., YAML at the top of the document and/or in <code>_quarto.yml</code>).</li>
<li>As you preview your site, pages will be rendered and updated. However, if you make changes to global options (e.g.&nbsp;<code>_quarto.yml</code> or included files) you need to fully re-render your site to have all of the changes reflected. Consequently, you should always fully <code>quarto render</code> your site before deploying it, even if you have already previewed changes to some pages with the preview server.</li>
</ul>
<section id="create-the-content" class="level3">
<h3 class="anchored" data-anchor-id="create-the-content">Create the content:</h3>
<p>Here is an example of a file with content we want to reuse across several pages.</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb1-1">In this document, we cover facts that are unique to the state, like the state's population, its flower, and animal.</span></code></pre></div></div>
<p>This content is general enough to use as each state’s introduction but lacks the facts that are unique to each state. So, we could insert the Include into each state’s file and then add specific content that is unique to the state:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb2-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb2-2"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">title:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> New York</span></span>
<span id="cb2-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb2-4"></span>
<span id="cb2-5">{{&lt; include _snippets/state-intro.qmd &gt;}}</span>
<span id="cb2-6"></span>
<span id="cb2-7">New York has a geographical size of 54,555, making it the 27th largest state with an estimated population size of 19.8 million.</span>
<span id="cb2-8"></span>
<span id="cb2-9">The state's flower is the Rose, as shown below:</span>
<span id="cb2-10"></span>
<span id="cb2-11"><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![](images/ny/flower.png)</span></span></code></pre></div></div>
</section>
<section id="why-are-we-doing-this" class="level3">
<h3 class="anchored" data-anchor-id="why-are-we-doing-this">Why are we doing this?</h3>
<p>Instead of copying and pasting this content into each file, and then updating it with each state’s fact (which introduces a higher risk of making an error), we can use meta variables to insert specific values.</p>
</section>
<section id="lets-execute" class="level3">
<h3 class="anchored" data-anchor-id="lets-execute">Let’s execute</h3>
<p>First, I create a file within my <code>_snippets</code> directory named <code>facts.qmd</code>. Throughout the file, I am going to insert a unique <code>meta</code> variable for each occurrence that I want the content to be specific to the state:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb3-1">{{&lt; meta state &gt;}} covers approximately {{&lt; meta square-miles &gt;}} making it the {{&lt; meta size-rank &gt;}} largest state in the United States. As of 2023, {{&lt; meta state &gt;}} has an approximate population of about {{&lt; meta population &gt;}}.</span></code></pre></div></div>
<p>I can define each of the <code>meta</code> variables within the individual file that I plan on reusing this content. So, in my <code>ny.qmd</code> file, I define each variable in the YAML metadata. Then, insert the <code>facts.qmd</code> file with the undefined meta shortcodes using an include:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb4-1"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb4-2"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">title:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> New York</span></span>
<span id="cb4-3"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">state-abbr:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> ny</span></span>
<span id="cb4-4"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">state:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> New York</span></span>
<span id="cb4-5"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">size-rank:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> 27th</span></span>
<span id="cb4-6"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">square-miles:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> 54,555</span></span>
<span id="cb4-7"><span class="an" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">population:</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;"> 19.8 million</span></span>
<span id="cb4-8"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb4-9"></span>
<span id="cb4-10"></span>
<span id="cb4-11">{{&lt; include _snippets/facts.qmd &gt;}}</span></code></pre></div></div>
<p>As you can see, the rendered file has the meta shortcodes populated with the definitions that you assigned to each value in the file’s YAML.</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/images/img1.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;"></p>
</figure>
</div>
<p>But, I would also like to add the state’s flower and animal with images of each. You can achieve this by editing the document to add this information and images:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb5-1">{{&lt; include _snippets/facts.qmd &gt;}}</span>
<span id="cb5-2"></span>
<span id="cb5-3">New York's official flower is the Rose:</span>
<span id="cb5-4"></span>
<span id="cb5-5"><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![](../images/ny/flower.png)</span></span>
<span id="cb5-6"></span>
<span id="cb5-7">And the official animal is the Beaver:</span>
<span id="cb5-8"></span>
<span id="cb5-9"><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![](../images/ny/animal.png)</span></span></code></pre></div></div>
<p>Or, you can get creative and use <code>meta</code> shortcodes in your image paths so you can continue to manage all of the content in a single file:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb6" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb6-1">{{&lt; meta state &gt;}}'s official flower is the {{&lt; meta flower &gt;}}, pictured below:</span>
<span id="cb6-2"></span>
<span id="cb6-3"><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![The official {{&lt; meta state &gt;}} state flower, the {{&lt; meta flower &gt;}}](../images/{{&lt; meta state-abbr &gt;}}/flower.png)</span></span>
<span id="cb6-4"></span>
<span id="cb6-5">Lastly, {{&lt; meta state &gt;}}'s official animal is the {{&lt; meta animal &gt;}}, pictured below:</span>
<span id="cb6-6"></span>
<span id="cb6-7"><span class="al" style="color: #AD0000;
background-color: null;
font-style: inherit;">![The official {{&lt; meta state &gt;}} state animal, the {{&lt; meta animal &gt;}}](../images/{{&lt; meta state-abbr &gt;}}/animal.png)</span></span></code></pre></div></div>
<p>As you can see, my image paths have <code>{{&lt; meta state-abbr &gt;}}</code> which is defined in the new-york file as “ny”.</p>
<p>When we render the project, the image path updates to /images/ny/flower.png pointing to the existing flower image in the <code>ny</code> directory:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/images/img2.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;"></p>
</figure>
</div>
<p>In theory, you could do this for each state as long as each directory follows the same naming conventions, i.e., <code>pa/flower.png</code> and <code>vt/flower.png</code>.</p>
<p>This does require an organized and scalable approach since the images will have to follow the same directory and file-naming conventions, but in doing so, you can create individualized pages and images using a single include.</p>
</section>
<section id="the-rendered-example" class="level3">
<h3 class="anchored" data-anchor-id="the-rendered-example">The rendered example</h3>
<p>Here is New York’s page:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/images/img3.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;"></p>
</figure>
</div>
<p>Here is Pennsylvania’s page:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/images/img4.png" class="img-fluid quarto-figure quarto-figure-center figure-img" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;"></p>
</figure>
</div>
<p>Each page was built using a single (shared) file:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb7" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb7-1">{{&lt; include _snippets/facts.qmd &gt;}}</span></code></pre></div></div>
</section>
</section>
<section id="learn-more-about-quarto-includes" class="level2">
<h2 class="anchored" data-anchor-id="learn-more-about-quarto-includes">Learn more about Quarto Includes</h2>
<p>Quarto’s Includes feature allows you to improve your content creation process by reducing redundancy and maintaining consistency across multiple documents. Whether you’re managing technical documentation, educational materials, or any other content, this approach can help you save time, reduce errors, and deliver polished results.</p>
<p>Learn more with these resources:</p>
<ul>
<li><a href="../../../../docs/get-started/">Get Started - Quarto</a></li>
<li><a href="../../../../docs/authoring/includes.html">Quarto - Includes</a></li>
<li><a href="../../../../docs/authoring/variables.html#meta">Quarto - meta Variables</a></li>
<li>An overview of <a href="https://technicalwriterhq.com/writing/technical-writing/single-source-authoring/" class="external">Single Source Authoring</a></li>
</ul>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Authoring</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/</guid>
  <pubDate>Thu, 12 Dec 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-12-12-includes-meta/thumbnail.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>Quarto website video series</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <dc:creator>Mine Çetinkaya-Rundel</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-12-04-websites-workshop/</link>
  <description><![CDATA[ 






<p>Do you need a professional website to showcase your work? If you’ve used Quarto to produce a document, you’ve already got the technical skills to create a Quarto website. In this video series, taught by <a href="https://www.cwick.co.nz/">Charlotte Wickham</a> and <a href="https://emilhvitfeldt.com/">Emil Hvitfeldt</a>, you’ll learn everything else you need to build a website and customize its appearance.</p>
<p><a href="https://www.youtube.com/playlist?list=PLitrm9Undxcu7eExaTg9Y-JYLv9O6uxGu">YouTube Playlist</a></p>
<section id="quarto-websites-1-build-your-homepage" class="level2">
<h2 class="anchored" data-anchor-id="quarto-websites-1-build-your-homepage">Quarto Websites 1: Build your homepage</h2>
<p>In this video, you’ll get a running start by using a template we’ve designed to be functional and attractive, and that will serve as a foundation for the rest of the video series. You’ll customize the content of your homepage, and how it looks, and along the way learn about the two key files in a Quarto website index.qmd and _quarto.yml. Finally, you’ll learn one way to publish your website so other people can see it.</p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/l7r24gTEkEY" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
<p>Links: <a href="../../../../docs/websites/website-about.html">About pages</a> | <a href="../../../../docs/output-formats/html-themes.html#basic-options">YAML appearance options</a></p>
<p>Code: <a href="https://github.com/EmilHvitfeldt/website-template">Starter</a> | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.1">Final</a></p>
</section>
<section id="quarto-websites-2-add-pages-and-navigation" class="level2">
<h2 class="anchored" data-anchor-id="quarto-websites-2-add-pages-and-navigation">Quarto Websites 2: Add pages and navigation</h2>
<p>Now you’ve got a homepage, you’ll likely want to add some other pages. In this video, learn how to add pages to your website, and help people find them, by adding them to your website navigation.</p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/k65E-8PXZmA" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
<p>Links: <a href="https://icons.getbootstrap.com/">Bootstrap icons</a> | <a href="../../../../docs/websites/website-navigation.html#top-navigation">Navigation bar options</a> | <a href="../../../../docs/websites/website-navigation.html">Quarto website navigation</a></p>
<p>Code: <a href="Starter source code: https://github.com/cwickham/quarto-website-video/tree/v0.1">Starter</a> | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.2">Final</a></p>
</section>
<section id="quarto-websites-3-customize-appearance-with-cssscss" class="level2">
<h2 class="anchored" data-anchor-id="quarto-websites-3-customize-appearance-with-cssscss">Quarto Websites 3: Customize appearance with CSS/SCSS</h2>
<p>You now have a set of content you are happy with on your website, but how do you customize the look and feel of your site beyond options set in YAML? In this video, you’ll start by learning the basics of CSS and SCSS and how to make good design choices. Then, you’ll see how to apply these choices to your Quarto website.</p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/pAN2Hiq0XGs" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
<p>Links: <a href="https://colourcontrast.cc/">Color contrast checker</a> | <a href="https://fonts.google.com/">Google fonts</a></p>
<p>Code: <a href="https://github.com/cwickham/quarto-website-video/tree/v0.2">Starter</a> | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.3">Final</a></p>
</section>
<section id="quarto-websites-4-add-lists-of-content-with-listings" class="level2">
<h2 class="anchored" data-anchor-id="quarto-websites-4-add-lists-of-content-with-listings">Quarto Websites 4: Add lists of content with listings</h2>
<p>Adding a listing page to your website is a great way to showcase your projects, talks, publications or blog posts. In this video you’ll learn how to create a listing page in Quarto and see two ways to populate it with content: Quarto documents, or a yaml file.</p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/bv_Cw-3HI1Y" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
<p>Links: <a href="../../../../docs/websites/website-listings.html">Listings</a> | <a href="https://www.andrewheiss.com/teaching/">Andrew Heiss’ teaching listing</a></p>
<p>Code: <a href="https://github.com/cwickham/quarto-website-video/tree/v0.3">Starter</a> | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.4">Final</a></p>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Workshop</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-12-04-websites-workshop/</guid>
  <pubDate>Wed, 04 Dec 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-12-04-websites-workshop/quarto-websites.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>Quarto 1.6</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-11-25-1.6-release/</link>
  <description><![CDATA[ 






<p>Quarto 1.6 has been officially released! You can get the current release from the <a href="../../../../docs/download/index.html">download page</a>.</p>
<p>We are particularly excited about:</p>
<ul>
<li><p>Support for <strong>brand.yml</strong>—a single file that defines your organization’s branding and style preferences across formats.</p></li>
<li><p>RevealJS updates, including the new navigation features: scroll mode and jump to slide.</p></li>
<li><p>The <code>contents</code> shortcode for reordering your content.</p></li>
<li><p><code>landscape</code> blocks for placing content on a landscape page.</p></li>
<li><p>Improvements in how you can specify subpanels of cross-references from code blocks.</p></li>
</ul>
<p>You can read about these new features and a couple of breaking changes in the sections below. You can find all the changes in this version in the <a href="../../../../docs/download/changelog/1.6/">Release Notes</a>.</p>
<section id="cross-format-theming-with-brand.yml" class="level2 page-columns page-full">
<h2 class="anchored" data-anchor-id="cross-format-theming-with-brand.yml">Cross-format theming with <strong>brand.yml</strong></h2>
<p><a href="https://posit-dev.github.io/brand-yml/"><strong>brand.yml</strong></a> is a Posit project outside Quarto that defines brand information using a simple YAML file. Quarto is a flagship adopter of <strong>brand.yml</strong> and supports brand-themed output for <code>html</code>, <code>dashboard</code>, <code>typst</code> and <code>revealjs</code> formats.</p>
<p>As an example, consider the following <code>_brand.yml</code> file:</p>
<div class="code-with-filename">
<div class="code-with-filename-file">
<pre><strong>_brand.yml</strong></pre>
</div>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" data-filename="_brand.yml" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb1-1"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">color</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-2"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">palette</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-3"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">dark-grey</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#222222"</span></span>
<span id="cb1-4"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">blue</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="st" style="color: #20794D;
background-color: null;
font-style: inherit;">"#ddeaf1"</span></span>
<span id="cb1-5"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">background</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> blue</span></span>
<span id="cb1-6"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">foreground</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> dark-grey</span></span>
<span id="cb1-7"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">primary</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> black</span></span>
<span id="cb1-8"></span>
<span id="cb1-9"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">logo</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span></span>
<span id="cb1-10"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">medium</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> logo.png</span></span>
<span id="cb1-11"></span>
<span id="cb1-12"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">typography</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-13"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">fonts</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span></span>
<span id="cb1-14"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">    </span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">-</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">family</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Jura</span></span>
<span id="cb1-15"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">      </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">source</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> google</span></span>
<span id="cb1-16"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">base</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Jura</span></span>
<span id="cb1-17"><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;">  </span><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">headings</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Jura</span></span></code></pre></div></div>
</div>
<p>When this <code>_brand.yml</code> is placed in a project, webpages, presentations, PDF reports, and dashboards will share a common appearance:</p>
<div class="column-body-outset-right quarto-layout-panel" data-layout-ncol="4">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 25.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="../../../../docs/authoring/images/brand-html.png" class="lightbox" data-gallery="brand-formats" title="Webpage: html"><img src="https://prerelease.quarto.org/docs/authoring/images/brand-html.png" class="img-fluid figure-img" alt="Screenshot of a webpage. The text is dark grey on a light blue background, using a rounded sans-serif typeface, a logo appears in the navbar."></a></p>
<figcaption>Webpage: <code>html</code></figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 25.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="../../../../docs/authoring/images/brand-dashboard.png" class="lightbox" data-gallery="brand-formats" title="Dashboard dashboard"><img src="https://prerelease.quarto.org/docs/authoring/images/brand-dashboard.png" class="img-fluid figure-img" alt="Screenshot of a dashboard. The text is dark grey on a light blue background, using a rounded sans-serif typeface, a logo appears in the navbar."></a></p>
<figcaption>Dashboard <code>dashboard</code></figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 25.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="../../../../docs/authoring/images/brand-revealjs.png" class="lightbox" data-gallery="brand-formats" title="Presentation: revealjs"><img src="https://prerelease.quarto.org/docs/authoring/images/brand-revealjs.png" class="img-fluid figure-img" alt="Screenshot of a presentation. The text is dark grey on a light blue background, using a rounded sans-serif typeface, a logo appears in bottom left of the slide."></a></p>
<figcaption>Presentation: <code>revealjs</code></figcaption>
</figure>
</div>
</div>
<div class="quarto-layout-cell" style="flex-basis: 25.0%;justify-content: flex-start;">
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><a href="../../../../docs/authoring/images/brand-typst.png" class="lightbox" data-gallery="brand-formats" title="PDF: typst"><img src="https://prerelease.quarto.org/docs/authoring/images/brand-typst.png" class="img-fluid figure-img" alt="Screenshot of a PDF document. The text is dark grey on a light blue background, using a rounded sans-serif typeface, a logo appears in top right of the page."></a></p>
<figcaption>PDF: <code>typst</code></figcaption>
</figure>
</div>
</div>
</div>
</div>
<p>View the example: <a href="https://github.com/quarto-dev/quarto-examples/tree/main/brand/brand-simple#brand-simple">Source</a> | <a href="https://examples.quarto.pub/brand-simple">Live website</a></p>
<p>Get started by reading the Quarto <a href="../../../../docs/authoring/brand.html">Guide to Brand</a>.</p>
</section>
<section id="revealjs-update" class="level2">
<h2 class="anchored" data-anchor-id="revealjs-update">RevealJS update</h2>
<p>Quarto v1.6 updates RevealJS to v5.1.0. With the update comes two notable features:</p>
<p><a href="../../../../docs/presentations/revealjs/presenting.html#jump-to-slide"><strong>Jump to Slide</strong></a>: Quickly navigate to a slide. Press <span class="visually-hidden">G</span> to activate, type a slide number or ID, and hit Enter/Return.</p>
<p><a href="../../../../docs/presentations/revealjs/presenting.html#scroll-view"><strong>Scroll Mode</strong></a>: Scroll rather than click to advance slides. Press <span class="visually-hidden">R</span>, add <code>?view=scroll</code> to your URL, or use the Navigation menu to activate. Automatically activated on small screens.</p>
</section>
<section id="contents-shortcode" class="level2">
<h2 class="anchored" data-anchor-id="contents-shortcode">Contents shortcode</h2>
<p>The <code>contents</code> shortcode lets you compose content in one location in your document and then display it in another. For example, you might use a code cell to generate a plot:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb2-1"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```{python}</span></span>
<span id="cb2-2"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| echo: false</span></span>
<span id="cb2-3"><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| label: a-cell</span></span>
<span id="cb2-4"><span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">import</span> matplotlib.pyplot <span class="im" style="color: #00769E;
background-color: null;
font-style: inherit;">as</span> plt</span>
<span id="cb2-5">plt.plot([<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">1</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">2</span>,<span class="dv" style="color: #AD0000;
background-color: null;
font-style: inherit;">3</span>])</span>
<span id="cb2-6"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span></code></pre></div></div>
<p>Then use the <code>contents</code> shortcode to display that plot in a callout by referencing its label, <code>a-cell</code>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" data-shortcodes="false" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb3-1">::: callout-note</span>
<span id="cb3-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">## Note the following plot</span></span>
<span id="cb3-3"></span>
<span id="cb3-4">{{&lt; contents a-cell &gt;}}</span>
<span id="cb3-5"></span>
<span id="cb3-6">:::</span></code></pre></div></div>
<p>Find all the details on our guide page on the <a href="../../../../docs/authoring/contents.html">contents shortcode</a>.</p>
</section>
<section id="landscape-mode" class="level2">
<h2 class="anchored" data-anchor-id="landscape-mode">Landscape mode</h2>
<p>In <code>pdf</code>, <code>docx,</code> and <code>typst</code> formats, you can now put content on a landscape page by placing it inside a <a href="../../../../docs/authoring/article-layout.html#landscape-mode"><code>landscape</code> block</a>:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb4" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb4-1">::: {.landscape}</span>
<span id="cb4-2"></span>
<span id="cb4-3">This will appear in landscape.</span>
<span id="cb4-4"></span>
<span id="cb4-5">:::</span></code></pre></div></div>
</section>
<section id="cross-reference-improvements" class="level2">
<h2 class="anchored" data-anchor-id="cross-reference-improvements">Cross-reference improvements</h2>
<p>It should now be easier to get Quarto to recognize subfloats (subtables, subfigures, etc) when they’re emitted by code cells. If the <code>subcap</code> attribute of a code cell has as many entries as the number of outputs from your code cell, Quarto knows to accept those as subfloats. See <a href="https://github.com/quarto-dev/quarto-cli/issues/10328" class="external">#10328</a> for details.</p>
<p>Minimal example:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb5" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb5-1"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```{{r}}</span></span>
<span id="cb5-2"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| label: tbl-example</span></span>
<span id="cb5-3"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| tbl-cap: I want these images to be interpreted as Tables.</span></span>
<span id="cb5-4"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#| tbl-subcap:</span></span>
<span id="cb5-5"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#|   - This is the subcaption for the first subtable</span></span>
<span id="cb5-6"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">#|   - This is the subcaption for the second subtable</span></span>
<span id="cb5-7"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">plot(1:10)</span></span>
<span id="cb5-8"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">plot(11:20)</span></span>
<span id="cb5-9"><span class="in" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">```</span></span></code></pre></div></div>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-11-25-1.6-release/subcells-and-subfloats.png" class="border img-fluid figure-img" alt="Screenshot of a document showing two plots with an overall caption labelled 'Table 1', and each plot with a caption starting '(a)' and '(b)' respectively."></p>
<figcaption>The result of executing the above code cell in HTML format</figcaption>
</figure>
</div>
</section>
<section id="breaking-changes" class="level2">
<h2 class="anchored" data-anchor-id="breaking-changes">Breaking Changes</h2>
<p>We try very hard to keep Quarto backward compatible. However, in this release, there are a couple of breaking changes due to upstream dependencies. You may be affected if:</p>
<ul>
<li><p><strong>You have TypeScript files (<code>*.ts</code>) that you use either with pre- or post-render scripts, or with <code>quarto run</code>, that import Deno standard libraries.</strong></p>
<p>The import syntax has changed. Please see <a href="../../../../docs/projects/scripts.html#deno-scripts">Deno Scripts</a> for the necessary changes.</p></li>
<li><p><strong>You override the LaTeX <code>graphics.tex</code> partial, or you have a completely custom LaTeX template that doesn’t use the <code>graphics.tex</code> partial.</strong></p>
<p>A Pandoc change means some images are now wrapped in <code>\pandocbounded</code>. Consequently, your <code>graphics.tex</code> partial, or your template, needs to define <code>\pandocbounded</code>. You can look at our <a href="https://github.com/quarto-dev/quarto-cli/blob/main/src/resources/formats/pdf/pandoc/graphics.tex" class="external">source code for <code>graphics.tex</code></a> to see the necessary changes and read more about the upstream change in <a href="https://github.com/jgm/pandoc/commit/26b25a4428815b04c255e33e95ee86ca7b6ee30e" class="external">Pandoc commit 26b25a4</a>.</p></li>
</ul>
</section>
<section id="acknowledgments" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgments">Acknowledgments</h2>
<p>We want to say a huge thank you to everyone who contributed to this release by opening issues and pull requests:</p>
<p><a href="https://github.com/ArthurData">ArthurData</a>, <a href="https://github.com/Blake-Madden">Blake-Madden</a>, <a href="https://github.com/Coding4Sec">Coding4Sec</a>, <a href="https://github.com/EricMarcon">EricMarcon</a>, <a href="https://github.com/Fgazzelloni">Fgazzelloni</a>, <a href="https://github.com/GeorgRamer">GeorgRamer</a>, <a href="https://github.com/Gewerd-Strauss">Gewerd-Strauss</a>, <a href="https://github.com/GuillaumeDehaene">GuillaumeDehaene</a>, <a href="https://github.com/HarunCelikOtto">HarunCelikOtto</a>, <a href="https://github.com/IULibScholComm">IULibScholComm</a>, <a href="https://github.com/IndrajeetPatil">IndrajeetPatil</a>, <a href="https://github.com/LeoLuongVuong">LeoLuongVuong</a>, <a href="https://github.com/MarcellGranat">MarcellGranat</a>, <a href="https://github.com/Mavoort">Mavoort</a>, <a href="https://github.com/Nenuial">Nenuial</a>, <a href="https://github.com/PeteArm">PeteArm</a>, <a href="https://github.com/ShixiangWang">ShixiangWang</a>, <a href="https://github.com/Steinthal">Steinthal</a>, <a href="https://github.com/Walser52">Walser52</a>, <a href="https://github.com/Xinenomine">Xinenomine</a>, <a href="https://github.com/abbyruthe">abbyruthe</a>, <a href="https://github.com/aborruso">aborruso</a>, <a href="https://github.com/adamblake">adamblake</a>, <a href="https://github.com/albert-ying">albert-ying</a>, <a href="https://github.com/alecloudenback">alecloudenback</a>, <a href="https://github.com/allefeld">allefeld</a>, <a href="https://github.com/aronatkins">aronatkins</a>, <a href="https://github.com/arthur-shaw">arthur-shaw</a>, <a href="https://github.com/astrowonk">astrowonk</a>, <a href="https://github.com/avras">avras</a>, <a href="https://github.com/baker-jr-john">baker-jr-john</a>, <a href="https://github.com/bcm0">bcm0</a>, <a href="https://github.com/blackerby">blackerby</a>, <a href="https://github.com/boshek">boshek</a>, <a href="https://github.com/brandonmontez">brandonmontez</a>, <a href="https://github.com/brianmsm">brianmsm</a>, <a href="https://github.com/bryanhanson">bryanhanson</a>, <a href="https://github.com/carschandler">carschandler</a>, <a href="https://github.com/castedo">castedo</a>, <a href="https://github.com/chaz-clark">chaz-clark</a>, <a href="https://github.com/christopherkenny">christopherkenny</a>, <a href="https://github.com/coatless">coatless</a>, <a href="https://github.com/d-morrison">d-morrison</a>, <a href="https://github.com/danieltomasz">danieltomasz</a>, <a href="https://github.com/daxkellie">daxkellie</a>, <a href="https://github.com/ddlawton">ddlawton</a>, <a href="https://github.com/debruine">debruine</a>, <a href="https://github.com/dsbitor">dsbitor</a>, <a href="https://github.com/e-miz">e-miz</a>, <a href="https://github.com/eculler">eculler</a>, <a href="https://github.com/edavidaja">edavidaja</a>, <a href="https://github.com/edvinsyk">edvinsyk</a>, <a href="https://github.com/eitsupi">eitsupi</a>, <a href="https://github.com/ethanwhite">ethanwhite</a>, <a href="https://github.com/fermarsan">fermarsan</a>, <a href="https://github.com/floesche">floesche</a>, <a href="https://github.com/fradav">fradav</a>, <a href="https://github.com/fredguth">fredguth</a>, <a href="https://github.com/gadenbuie">gadenbuie</a>, <a href="https://github.com/georgestagg">georgestagg</a>, <a href="https://github.com/apps/github-actions">github-actions[bot]</a>, <a href="https://github.com/halleysfifthinc">halleysfifthinc</a>, <a href="https://github.com/hamelsmu">hamelsmu</a>, <a href="https://github.com/hansfn">hansfn</a>, <a href="https://github.com/harrylojames">harrylojames</a>, <a href="https://github.com/hodgesmr">hodgesmr</a>, <a href="https://github.com/holtzy">holtzy</a>, <a href="https://github.com/hugetim">hugetim</a>, <a href="https://github.com/hurak">hurak</a>, <a href="https://github.com/iagopinal">iagopinal</a>, <a href="https://github.com/isabelizimm">isabelizimm</a>, <a href="https://github.com/itsmevictor">itsmevictor</a>, <a href="https://github.com/jameslairdsmith">jameslairdsmith</a>, <a href="https://github.com/javajon">javajon</a>, <a href="https://github.com/jchiquet">jchiquet</a>, <a href="https://github.com/jdfoote">jdfoote</a>, <a href="https://github.com/jido">jido</a>, <a href="https://github.com/jimjam-slam">jimjam-slam</a>, <a href="https://github.com/jkrumbiegel">jkrumbiegel</a>, <a href="https://github.com/jmgirard">jmgirard</a>, <a href="https://github.com/jmhammond">jmhammond</a>, <a href="https://github.com/joelostblom">joelostblom</a>, <a href="https://github.com/johannes-menzel">johannes-menzel</a>, <a href="https://github.com/juliantao">juliantao</a>, <a href="https://github.com/jvcarli">jvcarli</a>, <a href="https://github.com/kazuyanagimoto">kazuyanagimoto</a>, <a href="https://github.com/kbvernon">kbvernon</a>, <a href="https://github.com/kdheepak">kdheepak</a>, <a href="https://github.com/kjohnsen">kjohnsen</a>, <a href="https://github.com/lballabio">lballabio</a>, <a href="https://github.com/leovan">leovan</a>, <a href="https://github.com/loneguardian">loneguardian</a>, <a href="https://github.com/longapalooza">longapalooza</a>, <a href="https://github.com/lucacasonato">lucacasonato</a>, <a href="https://github.com/lukmanaj">lukmanaj</a>, <a href="https://github.com/lwjohnst86">lwjohnst86</a>, <a href="https://github.com/machow">machow</a>, <a href="https://github.com/maelle">maelle</a>, <a href="https://github.com/masud90">masud90</a>, <a href="https://github.com/melaniewalsh">melaniewalsh</a>, <a href="https://github.com/mfisher87">mfisher87</a>, <a href="https://github.com/mipmip">mipmip</a>, <a href="https://github.com/mitzimorris">mitzimorris</a>, <a href="https://github.com/mpr1255">mpr1255</a>, <a href="https://github.com/nessan">nessan</a>, <a href="https://github.com/neuwirthe">neuwirthe</a>, <a href="https://github.com/nichtich">nichtich</a>, <a href="https://github.com/njericha">njericha</a>, <a href="https://github.com/nsarang">nsarang</a>, <a href="https://github.com/olivroy">olivroy</a>, <a href="https://github.com/ozanozbeker">ozanozbeker</a>, <a href="https://github.com/paciorek">paciorek</a>, <a href="https://github.com/pagiraud">pagiraud</a>, <a href="https://github.com/parmsam">parmsam</a>, <a href="https://github.com/pedrohbraga">pedrohbraga</a>, <a href="https://github.com/peteole">peteole</a>, <a href="https://github.com/produnis">produnis</a>, <a href="https://github.com/raffaem">raffaem</a>, <a href="https://github.com/ryarazi">ryarazi</a>, <a href="https://github.com/ryjohnson09">ryjohnson09</a>, <a href="https://github.com/s2t2">s2t2</a>, <a href="https://github.com/salim-b">salim-b</a>, <a href="https://github.com/samlalwani">samlalwani</a>, <a href="https://github.com/sgelzenleuchter">sgelzenleuchter</a>, <a href="https://github.com/skriptum">skriptum</a>, <a href="https://github.com/snhansen">snhansen</a>, <a href="https://github.com/stragu">stragu</a>, <a href="https://github.com/sun123zxy">sun123zxy</a>, <a href="https://github.com/sverrirarnors">sverrirarnors</a>, <a href="https://github.com/topepo">topepo</a>, <a href="https://github.com/truecluster">truecluster</a>, <a href="https://github.com/tylere">tylere</a>, <a href="https://github.com/winniehell">winniehell</a>, <a href="https://github.com/xtimbeau">xtimbeau</a>, <a href="https://github.com/yogabonito">yogabonito</a>, <a href="https://github.com/yurivict">yurivict</a>, <a href="https://github.com/yves-amevoin">yves-amevoin</a>.</p>
<p>The palette emoji in the <a href="images/thumbnail.png">listing and social card image</a> for this post comes from <a href="https://openmoji.org/" class="external">OpenMoji</a>– the open-source emoji and icon project. License: <a href="https://creativecommons.org/licenses/by-sa/4.0/#" class="external">CC BY-SA 4.0</a></p>


</section>

 ]]></description>
  <category>Quarto 1.6</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-11-25-1.6-release/</guid>
  <pubDate>Mon, 25 Nov 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-11-25-1.6-release/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Quarto dashboards video series</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <dc:creator>Mine Çetinkaya-Rundel</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-11-22-dashboards-workshop/</link>
  <description><![CDATA[ 






<p>If you’ve been looking to get your head around Quarto dashboards, check out the Quarto dashboards video series by <a href="https://mine-cr.com/">Mine Çetinkaya-Rundel</a>.</p>
<p>Materials: <a href="https://youtube.com/playlist?list=PLitrm9UndxcsapDsLimKGn3dEjQZy5vYs&amp;si=oLK2D1PuyF9MKVon">YouTube playlist</a> | <a href="https://mine.quarto.pub/quarto-dashboards/">Slides</a> | <a href="https://github.com/mine-cetinkaya-rundel/olympicdash">Starter code</a></p>
<section id="hello-quarto-dashboards" class="level2">
<h2 class="anchored" data-anchor-id="hello-quarto-dashboards">1. Hello, Quarto Dashboards</h2>
<p>Start by getting to know Quarto dashboards and make your very first dashboard using either R or Python and share it online. <a href="https://mine.quarto.pub/quarto-dashboards/1-hello-dashboards/#/title-slide">Slides</a></p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/HW7QbqI4fH0" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
</section>
<section id="quarto-dashboards-components" class="level2">
<h2 class="anchored" data-anchor-id="quarto-dashboards-components">2. Quarto Dashboards Components</h2>
<p>Then, build up your arsenal of dashboard components to add navigation, sidebars, tabsets, value boxes, and fine-tune layout. <a href="https://mine.quarto.pub/quarto-dashboards/2-dashboard-components/#/title-slide">Slides</a></p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/KdsQgwaY950" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>
</section>
<section id="quarto-dashboards-theming-and-styling" class="level2">
<h2 class="anchored" data-anchor-id="quarto-dashboards-theming-and-styling">3. Quarto Dashboards Theming and Styling</h2>
<p>Finally, make your dashboard pop by adding a theme and making styling tweaks. <a href="https://mine.quarto.pub/quarto-dashboards/3-theming-styling/#/title-slide">Slides</a></p>
<div class="quarto-video ratio ratio-16x9"><iframe data-external="1" src="https://www.youtube.com/embed/NigWSB-jG4Y" title="" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe></div>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Workshop</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-11-22-dashboards-workshop/</guid>
  <pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-11-22-dashboards-workshop/quarto-dashboards.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>posit::conf(2024) Quarto talks</title>
  <dc:creator>Mine Çetinkaya-Rundel and Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-11-06-conf-talks/</link>
  <description><![CDATA[ 






<p>Videos of posit::conf(2024) talks are now posted <a href="https://www.youtube.com/watch?v=s_Vh9HIeLVg&amp;list=PL9HYL-VRX0oSFkdF4fJeY63eGDvgofcbn">on YouTube</a>. We have also made playlist of talks that are about using, building with, and building on Quarto.</p>
<iframe width="560" height="315" src="https://www.youtube.com/embed/videoseries?si=Xwt6NHL_f4k9agzh&amp;list=PLNUVZZ6hfXX1Y4Is-SbbMF_HutRDJBwiO" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="">
</iframe>
<p>Talks included in this playlist are as follows:</p>
<ul>
<li><a href="https://youtu.be/s_Vh9HIeLVg?si=jsIWeETKQG154dFi">Updates from Posit, with Hadley Wickham, Charlotte Wickham, George Stagg, and James Blair</a></li>
<li><a href="https://youtu.be/KqLxy66B3lQ?si=fe1zVCBozVmWKufO">Andrew Bray - Closeread: bringing Scrollytelling to Quarto</a></li>
<li><a href="https://youtu.be/VJEBg1Ke0lE?si=LUMa5-IF3gWORr3I">Meghan Hall - Designing and Deploying Internal Quarto Templates</a></li>
<li><a href="https://youtu.be/bp1SMhLoz_M?si=tyvyO-FP0AEBV6W2">David Keyes - Report Design in R: Small Tweaks that Make a Big Difference</a></li>
<li><a href="https://youtu.be/fsfoqpQYN2k?si=sDUOZTEBXvXLNVHq">Mine Çetinkaya-Rundel - Reproducible, dynamic, and elegant books with Quarto</a></li>
<li><a href="https://youtu.be/4zy9R26B8kk?si=rO_5BIjTC3ENVC2c">Cynthia Huang - Quarto for Knowledge Management</a></li>
<li><a href="https://youtu.be/UOMcGBMvVdo?si=yo3dFtWScKn06iXy">Regina Lionheart - Making Waves with R, Python, and Quarto</a></li>
<li><a href="https://youtu.be/PITfti4JRiU?si=TMi-CJOi04zViU_p">Joshua Cook - Quarto: A Multifaceted Publishing Powerhouse for Medical Researchers</a></li>
<li><a href="https://youtu.be/U8_Dc_ru8fg?si=-fEK5Ou57f-QhSba">Tyler Morgan-Wall - Quarto, AI, and the Art of Getting Your Life Back</a></li>
<li><a href="https://youtu.be/fzykFa6c3LI?si=wV83nh1WvctfRAiu">Sean Nguyen - Beyond Dashboards: Dynamic Data Storytelling with Python, R, and Quarto Emails</a></li>
<li><a href="https://youtu.be/CySpBKJD5vY?si=zQ2TowaD_Wk0Du8X">Richie Moluno - JSquarto: Bridging JavaScript Documentation with Quarto’s Power</a></li>
<li><a href="https://youtu.be/1gUl-vWqScc?si=nLEJ8JsLzBv8UqqT">Mika Braginsky - DataPages for interactive data sharing using Quarto</a></li>
<li><a href="https://youtu.be/ceW3nQssV88?si=caHnzvBHorxWFn00">Brennan Antone - Democratizing Organizational Surveys with Quarto and Shiny</a></li>
</ul>



 ]]></description>
  <category>Learn</category>
  <category>Conference</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-11-06-conf-talks/</guid>
  <pubDate>Wed, 06 Nov 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-11-06-conf-talks/images/thumbnail.jpg" medium="image" type="image/jpeg"/>
</item>
<item>
  <title>posit::conf(2024) Quarto workshop materials</title>
  <dc:creator>Mine Çetinkaya-Rundel and Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/</link>
  <description><![CDATA[ 






<p>This year at posit::conf(2024) we had three day-long Quarto workshops. The materials from those workshops are available for all to learn from. Additionally, you’re welcomed to use them in full or part when talking or teaching about Quarto; they are all released with a <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a> license.</p>
<div class="quarto-layout-panel" data-layout="[70,30]">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 70.0%;justify-content: flex-start;">
<p><a href="https://posit-conf-2024.github.io/quarto-intro/" data-heading="Introduction to Quarto"><strong>Introduction to Quarto</strong></a></p>
<p><a href="https://posit-conf-2024.github.io/quarto-intro" class="uri">https://posit-conf-2024.github.io/quarto-intro</a></p>
<p><br>
</p>
<ul>
<li><p>Led by <a href="https://bids.berkeley.edu/people/andrew-bray">Andrew Bray</a>, UC Berkeley</p></li>
<li><p>Ideal for beginners looking to create rich documents</p></li>
</ul>
</div>
<div class="quarto-layout-cell" style="flex-basis: 30.0%;justify-content: center;">
<p><a href="https://posit-conf-2024.github.io/quarto-intro/"><img src="https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/images/intro.png" class="img-fluid" alt="Illustration of a seaplane."></a></p>
</div>
</div>
</div>
<div class="quarto-layout-panel" data-layout="[70,30]">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 70.0%;justify-content: flex-start;">
<p><a href="https://posit-conf-2024.github.io/quarto-dashboards/"><strong>Build-a-Dashboard Workshop (with Quarto, R, and/or Python)</strong></a></p>
<p><a href="https://posit-conf-2024.github.io/quarto-dashboards/">https://posit-conf-2024.github.io/quarto-dashboards</a></p>
<p><br>
</p>
<ul>
<li><p>Led by <a href="https://mine-cr.com/">Mine Çetinkaya-Rundel</a>, Posit, PBC, Duke University</p></li>
<li><p>Perfect for those familiar with computational notebooks in R and/or Python who want to create eye-catching dashboards</p></li>
</ul>
</div>
<div class="quarto-layout-cell" style="flex-basis: 30.0%;justify-content: center;">
<p><a href="https://posit-conf-2024.github.io/quarto-dashboards/"><img src="https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/images/dashboards.png" class="img-fluid" alt="An illustration of a dashboard made with Quarto"></a></p>
</div>
</div>
</div>
<div class="quarto-layout-panel" data-layout="[70,30]">
<div class="quarto-layout-row">
<div class="quarto-layout-cell" style="flex-basis: 70.0%;justify-content: flex-start;">
<p><a href="https://posit-conf-2024.github.io/quarto-websites/" data-heading="Quarto Websites"><strong>Quarto Websites</strong></a></p>
<p><a href="https://posit-conf-2024.github.io/quarto-websites/">https://posit-conf-2024.github.io/quarto-websites</a></p>
<p><br>
</p>
<ul>
<li><p>Led by <a href="https://www.cwick.co.nz/">Charlotte Wickham</a> and <a href="https://emilhvitfeldt.com/">Emil Hvitfeldt</a>, Posit, PBC</p></li>
<li><p>Great choice for those wanting to build a website from scratch with Quarto</p></li>
</ul>
</div>
<div class="quarto-layout-cell" style="flex-basis: 30.0%;justify-content: center;">
<p><a href="https://posit-conf-2024.github.io/quarto-websites/"><img src="https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/images/websites.png" class="img-fluid" alt="A diagram showing switching between navbar and sidebar navigation for a Quarto website."></a></p>
</div>
</div>
</div>



 ]]></description>
  <category>Learn</category>
  <category>Workshop</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/</guid>
  <pubDate>Tue, 15 Oct 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-10-15-conf-workshops-materials/images/thumbnail.png" medium="image" type="image/png" height="81" width="144"/>
</item>
<item>
  <title>Quarto 1.5</title>
  <dc:creator>Charlotte Wickham</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/</link>
  <description><![CDATA[ 






<p>Quarto 1.5 is out! You can find the current release on the <a href="../../../../docs/download/index.html">download page</a>.</p>
<p>Below, we’ll highlight the improved Typst support, website enhancements like draft handling and announcement bars, the native Julia engine, and a couple of shortcodes for generating placeholder content. You can see all the changes in the <a href="../../../../docs/download/changelog/1.5/">Release Notes</a>.</p>
<section id="typst-css" class="level2">
<h2 class="anchored" data-anchor-id="typst-css">Typst CSS</h2>
<p>We’ve already blogged about one feature that is now available in 1.5: <a href="../../../../docs/blog/posts/2024-07-02-beautiful-tables-in-typst/">Beautiful Tables in Typst</a>. The CSS properties from HTML tables produced in your code are translated to Typst properties, so the tables you lovingly craft for HTML should look just as good in PDFs produced using <code>format: typst</code>.</p>
<p>Beyond tables, CSS properties on divs and spans are also translated to Typst properties. So, for example, you could get text with a green background like this:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb1" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb1-1">Here is a <span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">[</span><span class="ot" style="color: #003B4F;
background-color: null;
font-style: inherit;">span with a green background</span><span class="co" style="color: #5E5E5E;
background-color: null;
font-style: inherit;">]</span>{style="background-color:green"}.</span></code></pre></div></div>
<p>You can read more about using CSS in Typst at <a href="../../../../docs/output-formats/typst.html#typst-css">Typst Basics: Typst CSS</a>.</p>
</section>
<section id="improved-website-draft-support" class="level2">
<h2 class="anchored" data-anchor-id="improved-website-draft-support">Improved Website Draft Support</h2>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/images/website-drafts-banner.png" class="border img-fluid figure-img" alt="Screenshot of a post titled 'Post With Code', displaying a banner at the top of the page titled 'Draft'."></p>
<figcaption>A <code>draft</code> post with the new draft banner</figcaption>
</figure>
</div>
<p>Quarto 1.5 brings improved support for workflows involving draft posts and pages:</p>
<ul>
<li><p>Adds the <code>drafts</code> option to the <code>website</code> key offering new ways to specify drafts: directly in <code>_quarto.yml</code>, and via metadata includes and profiles.</p></li>
<li><p>Introduces the <code>draft-mode</code> option to the <code>website</code> key to control how drafts are rendered. Drafts can be <code>gone</code>, <code>unlinked</code> or <code>visible</code>.</p></li>
<li><p>Adds a draft banner to draft pages that are rendered.</p></li>
<li><p>Improves the linking behavior of draft documents. Now, in addition to being excluded from search results, listings, and the sitemap, drafts will not appear in navigation, or be linked from in-text hyperlinks when <code>draft-mode</code> is <code>gone</code> or <code>unlinked</code>.</p></li>
<li><p>Changes the behavior of <code>quarto preview</code> for drafts. Drafts will be <code>visible</code> in previews regardless of the <code>draft-mode</code> setting. In particular, this allows an easier way to preview the appearance of draft content in navigation and listings.</p></li>
</ul>
<p>Read more at <a href="../../../../docs/websites/website-drafts.html">Website Drafts</a>.</p>
</section>
<section id="website-announcements" class="level2">
<h2 class="anchored" data-anchor-id="website-announcements">Website Announcements</h2>
<p>You can now use an <code>announcement</code> option to add a customizable banner at the top of your website. You can set an icon, make it dismissable, and include markdown formatted content like bold text:</p>
<div class="quarto-figure quarto-figure-center">
<figure class="figure">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/images/website-announcement.png" class="img-fluid figure-img" alt="Screenshot of the quarto documentation showing a blue bar below the navbar, starting with the text 'Alert:...'."></p>
<figcaption>An example announcement bar</figcaption>
</figure>
</div>
<p>Read about your options at <a href="../../../../docs/websites/website-tools.html#announcement-bar">Website Tools: Announcement Bar</a>.</p>
</section>
<section id="native-julia-engine" class="level2">
<h2 class="anchored" data-anchor-id="native-julia-engine">Native Julia Engine</h2>
<p>Prior to 1.5, Julia code cells were executed through the Jupyter engine. Now you can opt-in to a native Julia engine:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb2" style="background: #f1f3f5;"><pre class="sourceCode yaml code-with-copy"><code class="sourceCode yaml"><span id="cb2-1"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span>
<span id="cb2-2"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">title</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> Julia without Jupyter</span></span>
<span id="cb2-3"><span class="fu" style="color: #4758AB;
background-color: null;
font-style: inherit;">engine</span><span class="kw" style="color: #003B4F;
background-color: null;
font-weight: bold;
font-style: inherit;">:</span><span class="at" style="color: #657422;
background-color: null;
font-style: inherit;"> julia</span></span>
<span id="cb2-4"><span class="pp" style="color: #AD0000;
background-color: null;
font-style: inherit;">---</span></span></code></pre></div></div>
<p>Read about the details in <a href="https://quarto.org/docs/computations/julia.html#using-the-julia-engine">Using the <code>julia</code> engine</a>.</p>
<p>Part of the reason we are excited about this feature is that it was an external contribution. Thank you <a href="https://github.com/jkrumbiegel">@jkrumbiegel</a>!</p>
</section>
<section id="placeholder-shortcodes" class="level2">
<h2 class="anchored" data-anchor-id="placeholder-shortcodes">Placeholder Shortcodes</h2>
<p>We’ve also added a couple of shortcodes that add placeholder content: <code>lipsum</code> for text, and <code>placeholder</code> for images:</p>
<div class="code-copy-outer-scaffold"><div class="sourceCode" id="cb3" data-shortcodes="false" style="background: #f1f3f5;"><pre class="sourceCode markdown code-with-copy"><code class="sourceCode markdown"><span id="cb3-1">{{&lt; placeholder 400 200 format=svg &gt;}}</span>
<span id="cb3-2">{{&lt; lipsum 1 &gt;}}</span></code></pre></div></div>
<p>This example produces a 400px x 200px SVG image, and one paragraph of <a href="https://en.wikipedia.org/wiki/Lorem_ipsum">Lorem Ipsum</a> text:</p>
<div class="border p-3">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/data:image/svg+xml;base64,PHN2ZyB3aWR0aCA9ICI0MDAiIGhlaWdodCA9ICIyMDAiIHhtbG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94ID0gIjAgMCA0MDAgMjAwIj48cmVjdCB3aWR0aCA9ICI0MDAiIGhlaWdodCA9ICIyMDAiIGZpbGwgPSAiI2RkZCIgLz48dGV4dCB4ID0gIjUwJSIgeSA9ICI1MCUiIGZvbnQtZmFtaWx5ID0gInNhbnMtc2VyaWYiIGZvbnQtc2l6ZSA9ICIyMCIgZmlsbCA9ICIjMDAwIiB0ZXh0LWFuY2hvciA9ICJtaWRkbGUiPjQwMCB4IDIwMDwvdGV4dD48L3N2Zz4=" class="img-fluid"></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis sagittis posuere ligula sit amet lacinia. Duis dignissim pellentesque magna, rhoncus congue sapien finibus mollis. Ut eu sem laoreet, vehicula ipsum in, convallis erat. Vestibulum magna sem, blandit pulvinar augue sit amet, auctor malesuada sapien. Nullam faucibus leo eget eros hendrerit, non laoreet ipsum lacinia. Curabitur cursus diam elit, non tempus ante volutpat a. Quisque hendrerit blandit purus non fringilla. Integer sit amet elit viverra ante dapibus semper. Vestibulum viverra rutrum enim, at luctus enim posuere eu. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
<p>Read more about their options at <a href="../../../../docs/authoring/placeholder.html">Placeholder Images</a> and <a href="../../../../docs/authoring/lipsum.html">Placeholder Text</a>.</p>
</section>
<section id="acknowledgements" class="level2">
<h2 class="anchored" data-anchor-id="acknowledgements">Acknowledgements</h2>
<p>Finally, we’d like to give a huge high five to everyone who contributed to this release by opening issues and pull requests:</p>
<p><a href="https://github.com/AaronGullickson">AaronGullickson</a>, <a href="https://github.com/abduazizR">abduazizR</a>, <a href="https://github.com/aborruso">aborruso</a>, <a href="https://github.com/AdaemmerP">AdaemmerP</a>, <a href="https://github.com/adamalfredsson">adamalfredsson</a>, <a href="https://github.com/adamulrich">adamulrich</a>, <a href="https://github.com/aghaynes">aghaynes</a>, <a href="https://github.com/ALanguillaume">ALanguillaume</a>, <a href="https://github.com/AlbertRapp">AlbertRapp</a>, <a href="https://github.com/allefeld">allefeld</a>, <a href="https://github.com/AndreiBiziuk">AndreiBiziuk</a>, <a href="https://github.com/andrie">andrie</a>, <a href="https://github.com/anhi">anhi</a>, <a href="https://github.com/aravezskinteeth">aravezskinteeth</a>, <a href="https://github.com/arnaudgallou">arnaudgallou</a>, <a href="https://github.com/aronatkins">aronatkins</a>, <a href="https://github.com/ArthurAndrews">ArthurAndrews</a>, <a href="https://github.com/arvindvenkatadri">arvindvenkatadri</a>, <a href="https://github.com/AshleyHenry15">AshleyHenry15</a>, <a href="https://github.com/averms">averms</a>, <a href="https://github.com/awhol1">awhol1</a>, <a href="https://github.com/batpigandme">batpigandme</a>, <a href="https://github.com/bcdavasconcelos">bcdavasconcelos</a>, <a href="https://github.com/bhattmaulik">bhattmaulik</a>, <a href="https://github.com/bhogan-mitre">bhogan-mitre</a>, <a href="https://github.com/billgeo">billgeo</a>, <a href="https://github.com/BradyAJohnston">BradyAJohnston</a>, <a href="https://github.com/cameronraysmith">cameronraysmith</a>, <a href="https://github.com/CeresBarros">CeresBarros</a>, <a href="https://github.com/christian-million">christian-million</a>, <a href="https://github.com/cpcloud">cpcloud</a>, <a href="https://github.com/daslu">daslu</a>, <a href="https://github.com/davidkane9">davidkane9</a>, <a href="https://github.com/debdagybra">debdagybra</a>, <a href="https://github.com/dfolio">dfolio</a>, <a href="https://github.com/dhodge180">dhodge180</a>, <a href="https://github.com/dmbates">dmbates</a>, <a href="https://github.com/drtingtp">drtingtp</a>, <a href="https://github.com/eitsupi">eitsupi</a>, <a href="https://github.com/eyayaw">eyayaw</a>, <a href="https://github.com/FabienSe">FabienSe</a>, <a href="https://github.com/fernandortdias">fernandortdias</a>, <a href="https://github.com/fkgruber">fkgruber</a>, <a href="https://github.com/ForceBru">ForceBru</a>, <a href="https://github.com/gcgbarbosa">gcgbarbosa</a>, <a href="https://github.com/gimmiereddy">gimmiereddy</a>, <a href="https://github.com/gl-eb">gl-eb</a>, <a href="https://github.com/gregswinehart">gregswinehart</a>, <a href="https://github.com/guilhermegarcia">guilhermegarcia</a>, <a href="https://github.com/GuillaumeDehaene">GuillaumeDehaene</a>, <a href="https://github.com/hadley">hadley</a>, <a href="https://github.com/has2k1">has2k1</a>, <a href="https://github.com/Hemken">Hemken</a>, <a href="https://github.com/hervyqa">hervyqa</a>, <a href="https://github.com/hewag1975">hewag1975</a>, <a href="https://github.com/hughjonesd">hughjonesd</a>, <a href="https://github.com/iandol">iandol</a>, <a href="https://github.com/IULibScholComm">IULibScholComm</a>, <a href="https://github.com/j-horak">j-horak</a>, <a href="https://github.com/jackgerrits">jackgerrits</a>, <a href="https://github.com/jasonpott">jasonpott</a>, <a href="https://github.com/jcheng5">jcheng5</a>, <a href="https://github.com/jdossgollin">jdossgollin</a>, <a href="https://github.com/jebyrnes">jebyrnes</a>, <a href="https://github.com/jimgar">jimgar</a>, <a href="https://github.com/jimjam-slam">jimjam-slam</a>, <a href="https://github.com/jkrumbiegel">jkrumbiegel</a>, <a href="https://github.com/jobrachem">jobrachem</a>, <a href="https://github.com/jolars">jolars</a>, <a href="https://github.com/jonpeake">jonpeake</a>, <a href="https://github.com/jrob95">jrob95</a>, <a href="https://github.com/jrtheobald">jrtheobald</a>, <a href="https://github.com/juliantao">juliantao</a>, <a href="https://github.com/JulienGAMartin">JulienGAMartin</a>, <a href="https://github.com/justinaskav">justinaskav</a>, <a href="https://github.com/kadykov">kadykov</a>, <a href="https://github.com/KaiWaldrant">KaiWaldrant</a>, <a href="https://github.com/kdheepak">kdheepak</a>, <a href="https://github.com/kkaja123">kkaja123</a>, <a href="https://github.com/kletts">kletts</a>, <a href="https://github.com/kompre">kompre</a>, <a href="https://github.com/krishaamer">krishaamer</a>, <a href="https://github.com/lamurian">lamurian</a>, <a href="https://github.com/Lextuga007">Lextuga007</a>, <a href="https://github.com/li-yq">li-yq</a>, <a href="https://github.com/libjohn">libjohn</a>, <a href="https://github.com/liyongg">liyongg</a>, <a href="https://github.com/loreabad6">loreabad6</a>, <a href="https://github.com/Luc-UMass">Luc-UMass</a>, <a href="https://github.com/lwjohnst86">lwjohnst86</a>, <a href="https://github.com/m-clark">m-clark</a>, <a href="https://github.com/m-delem">m-delem</a>, <a href="https://github.com/MarcoPortmann">MarcoPortmann</a>, <a href="https://github.com/marklhc">marklhc</a>, <a href="https://github.com/martinscripts">martinscripts</a>, <a href="https://github.com/memeplex">memeplex</a>, <a href="https://github.com/MHellmund">MHellmund</a>, <a href="https://github.com/mhollanders">mhollanders</a>, <a href="https://github.com/mine-cetinkaya-rundel">mine-cetinkaya-rundel</a>, <a href="https://github.com/MKDJr">MKDJr</a>, <a href="https://github.com/mroberts1">mroberts1</a>, <a href="https://github.com/mvuorre">mvuorre</a>, <a href="https://github.com/mwouts">mwouts</a>, <a href="https://github.com/ncclementi">ncclementi</a>, <a href="https://github.com/ncworstell">ncworstell</a>, <a href="https://github.com/nealrichardson">nealrichardson</a>, <a href="https://github.com/Nesper94">Nesper94</a>, <a href="https://github.com/nickvigilante">nickvigilante</a>, <a href="https://github.com/nmalkin">nmalkin</a>, <a href="https://github.com/NMarkgraf">NMarkgraf</a>, <a href="https://github.com/nrichers">nrichers</a>, <a href="https://github.com/olivroy">olivroy</a>, <a href="https://github.com/ozanozbeker">ozanozbeker</a>, <a href="https://github.com/pagiraud">pagiraud</a>, <a href="https://github.com/pastorn">pastorn</a>, <a href="https://github.com/pbousquets">pbousquets</a>, <a href="https://github.com/pem725">pem725</a>, <a href="https://github.com/petrbouchal">petrbouchal</a>, <a href="https://github.com/pgseye">pgseye</a>, <a href="https://github.com/pingumops">pingumops</a>, <a href="https://github.com/pmoris">pmoris</a>, <a href="https://github.com/pschloss">pschloss</a>, <a href="https://github.com/rafaelorozco">rafaelorozco</a>, <a href="https://github.com/rastrau">rastrau</a>, <a href="https://github.com/RegalPlatypus">RegalPlatypus</a>, <a href="https://github.com/rgaiacs">rgaiacs</a>, <a href="https://github.com/Robinlovelace">Robinlovelace</a>, <a href="https://github.com/robolyst">robolyst</a>, <a href="https://github.com/royfrancis">royfrancis</a>, <a href="https://github.com/rpchastain">rpchastain</a>, <a href="https://github.com/sapphire008">sapphire008</a>, <a href="https://github.com/schrammelj">schrammelj</a>, <a href="https://github.com/sinamoghimi73">sinamoghimi73</a>, <a href="https://github.com/statik">statik</a>, <a href="https://github.com/stevengogogo">stevengogogo</a>, <a href="https://github.com/sun123zxy">sun123zxy</a>, <a href="https://github.com/szsctt">szsctt</a>, <a href="https://github.com/teecrow">teecrow</a>, <a href="https://github.com/the-solipsist">the-solipsist</a>, <a href="https://github.com/TomBener">TomBener</a>, <a href="https://github.com/ttalVlatt">ttalVlatt</a>, <a href="https://github.com/tvroylandt">tvroylandt</a>, <a href="https://github.com/tylermorganwall">tylermorganwall</a>, <a href="https://github.com/Unco3892">Unco3892</a>, <a href="https://github.com/Vinnie-Palazeti">Vinnie-Palazeti</a>, <a href="https://github.com/WardBrian">WardBrian</a>, <a href="https://github.com/wjschne">wjschne</a>, <a href="https://github.com/wklimowicz">wklimowicz</a>, <a href="https://github.com/xiaoxl">xiaoxl</a>, <a href="https://github.com/ycrouin">ycrouin</a></p>
<p>The balloon emoji in the <a href="images/thumbnail.png">listing and social card image</a> for this post comes from <a href="https://openmoji.org/" class="external">OpenMoji</a>– the open-source emoji and icon project. License: <a href="https://creativecommons.org/licenses/by-sa/4.0/#" class="external">CC BY-SA 4.0</a></p>


</section>

 ]]></description>
  <category>Quarto 1.5</category>
  <category>Releases</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/</guid>
  <pubDate>Thu, 11 Jul 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-07-11-1.5-release/images/thumbnail.png" medium="image" type="image/png" height="76" width="144"/>
</item>
<item>
  <title>Beautiful Tables in Typst</title>
  <dc:creator>Gordon Woodhull</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/</link>
  <description><![CDATA[ 






<p>Quarto now allows HTML Tables with CSS styling to be output in Typst.</p>
<div class="page-columns page-full"><p>It does this by translating CSS properties into Typst properties. You can read about the feature <a href="../../../../docs/output-formats/typst.html#typst-css">in the Guide</a>.</p><div class="no-row-height column-margin column-container"><span class="margin-aside">technical details <a href="../../../../docs/advanced/typst/typst-css.html">in the Advanced Docs</a></span></div></div>
<p>Let’s look at 6 HTML tables using a variety of CSS properties also supported by Typst in Quarto.</p>
<p>You can click on the links below the examples to see the full documents, with source code.</p>
<section id="confusion-matrix-pandas-python" class="level2 page-columns page-full" data-number="1">
<h2 data-number="1" class="anchored" data-anchor-id="confusion-matrix-pandas-python"><span class="header-section-number">1</span> Confusion Matrix (Pandas / Python)</h2>
<p>This example uses a dashed border to draw attention to two cells.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:1.5em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/pandas-confusion-matrix.png" class="img-fluid" width="700"> <a href="examples/pandas-confusion-matrix.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/pandas-confusion-matrix.html" width="700" height="250" scrolling="no"></iframe>
<p><a href="examples/pandas-confusion-matrix.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
</section>
<section id="cars-heatmap-gt-r" class="level2 page-columns page-full" data-number="2">
<h2 data-number="2" class="anchored" data-anchor-id="cars-heatmap-gt-r"><span class="header-section-number">2</span> Cars heatmap (gt / R)</h2>
<p>This example uses cell background colors to encode ranges of values.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:2.2em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/gt-cars.png" class="img-fluid" width="430"></p>
<p><a href="examples/gt-cars.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/gt-cars.html" width="430" height="375" scrolling="no"></iframe>
<p><a href="examples/gt-cars.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
</section>
<section id="oceania-great-tables-python" class="level2 page-columns page-full" data-number="3">
<h2 data-number="3" class="anchored" data-anchor-id="oceania-great-tables-python"><span class="header-section-number">3</span> Oceania (Great Tables / Python)</h2>
<p>Borders can show the structure of grouped rows.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:2.1em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/great-tables-oceania.png" class="img-fluid" width="600"></p>
<p><a href="examples/great-tables-oceania.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/great-tables-oceania.html" width="600" height="907" scrolling="no"></iframe>
<p><a href="examples/great-tables-oceania.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
</section>
<section id="islands-gt-r" class="level2 page-columns page-full" data-number="4">
<h2 data-number="4" class="anchored" data-anchor-id="islands-gt-r"><span class="header-section-number">4</span> Islands (gt / R)</h2>
<p>Font sizes and minimal borders make this table stand out.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:2.2em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/gt-islands.png" class="img-fluid" width="500"></p>
<p><a href="examples/gt-islands.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/gt-islands.html" width="400" height="580" scrolling="no"></iframe>
<p><a href="examples/gt-islands.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
</section>
<section id="solar-zenith-great-tables-python" class="level2 page-columns page-full" data-number="5">
<h2 data-number="5" class="anchored" data-anchor-id="solar-zenith-great-tables-python"><span class="header-section-number">5</span> Solar Zenith (Great Tables / Python)</h2>
<p>Another cool heatmap.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:1.7em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/great-tables-solar-zenith.png" class="img-fluid" width="750"></p>
<p><a href="examples/great-tables-solar-zenith.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/great-tables-solar-zenith.html" width="850" height="565" scrolling="no"></iframe>
<p><a href="examples/great-tables-solar-zenith.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
</section>
<section id="acting-on-data-pandas-python" class="level2 page-columns page-full" data-number="6">
<h2 data-number="6" class="anchored" data-anchor-id="acting-on-data-pandas-python"><span class="header-section-number">6</span> Acting on Data (Pandas / Python)</h2>
<p>Applying colors and transparency based on data.</p>
<div class="column-page room">
<div class="columns">
<div class="column" style="padding-top:2.2em">
<p><img src="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/images/pandas-acting-on-data.png" class="img-fluid" width="540"></p>
<p><a href="examples/pandas-acting-on-data.pdf" target="_blank">Typst</a></p>
</div><div class="column" style="width:50%;">
<iframe class="html-demo" src="demo/pandas-acting-on-data.html" width="600" height="505" scrolling="no"></iframe>
<p><a href="examples/pandas-acting-on-data.HTML" target="_blank">HTML</a></p>
</div>
</div>
</div>
<p>We can’t wait to see what you do with this new feature!</p>


</section>

 ]]></description>
  <category>Quarto 1.5</category>
  <category>Tables</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/</guid>
  <pubDate>Tue, 02 Jul 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/beautiful-tables-typst.png" medium="image" type="image/png" height="71" width="144"/>
</item>
<item>
  <title>Quarto workshops at posit::conf(2024)</title>
  <dc:creator>Isabella Velásquez and Mine Çetinkaya-Rundel</dc:creator>
  <link>https://prerelease.quarto.org/docs/blog/posts/2024-05-28-conf-workshops/</link>
  <description><![CDATA[ 






<p>Join us for posit::conf(2024) in Seattle! On August 12, we’re hosting a day of workshops featuring three dedicated to Quarto. Check out the options below and find the workshop that’s just right for you. Already found your ideal Quarto workshop? <a href="https://posit.co/conference/">Register today</a>!</p>
<p><strong>Introduction to Quarto</strong></p>
<ul>
<li><p>Led by <a href="https://bids.berkeley.edu/people/andrew-bray">Andrew Bray</a>, Berkeley University</p></li>
<li><p>Ideal for beginners looking to create rich documents</p></li>
</ul>
<p><strong>Build-a-Dashboard Workshop (with Quarto, R, and/or Python)</strong></p>
<ul>
<li><p>Led by <a href="https://mine-cr.com/">Mine Çetinkaya-Rundel</a>, Posit, PBC, Duke University</p></li>
<li><p>Perfect for those familiar with computational notebooks in R and/or Python who want to create eye-catching dashboards</p></li>
</ul>
<p><strong>Quarto Websites</strong></p>
<ul>
<li><p>Led by <a href="https://www.cwick.co.nz/">Charlotte Wickham</a> and <a href="https://emilhvitfeldt.com/">Emil Hvitfeldt</a>, Posit, PBC</p></li>
<li><p>Great choice for those wanting to build a website from scratch with Quarto</p></li>
</ul>
<section id="introduction-to-quarto" class="level2">
<h2 class="anchored" data-anchor-id="introduction-to-quarto"><strong>Introduction to Quarto</strong></h2>
<p>This workshop will prepare you to author a rich array of documents in Quarto, the next generation of R Markdown. Quarto is an open-source scientific and technical publishing system that offers multilingual programming language support to create dynamic and static documents, books, presentations, blogs, and other online resources.</p>
<p>This workshop focuses on single documents. You will learn to create static documents, add interactivity to them with Shiny and HTML widgets, or steer them toward sophisticated scientific documents.</p>
<p>In the afternoon, you’ll use the same authoring approaches to create slide presentations in various formats, such as reveal.js, Beamer, and PPTX.</p>
<p><strong>This workshop is for you if you:</strong></p>
<ul>
<li><p>Have a basic knowledge of how to use the RStudio IDE,</p></li>
<li><p>Have some familiarity with Markdown, or</p></li>
<li><p>Are excited to author flexible single documents like technical reports and slide presentations.</p></li>
</ul>
</section>
<section id="build-a-dashboard-workshop-with-quarto-r-andor-python" class="level2">
<h2 class="anchored" data-anchor-id="build-a-dashboard-workshop-with-quarto-r-andor-python"><strong>Build-a-Dashboard Workshop (with Quarto, R, and/or Python)</strong></h2>
<p>You already analyze and summarize your data in computational notebooks with R and/or Python. What’s next?&nbsp;</p>
<p>You can share your insights or allow others to make their own conclusions in eye-catching dashboards and straight-forward to author, design, and deploy Quarto Dashboards, regardless of the language of your data processing, visualization, analysis, etc. With Quarto Dashboards, you can create elegant and production-ready dashboards using a variety of components, including static graphics (ggplot2, Matplotlib, Seaborn, etc.), interactive widgets (Plotly, Leaflet, Jupyter Widgets, htmlwidgets, etc.), tabular data, value boxes, text annotations, and more. Additionally, with intelligent resizing of components, your Quarto Dashboards look great on devices of all sizes.</p>
<p>And importantly, you can author Quarto Dashboards without leaving the comfort of your “home” – in plain text markdown with any text editor (VS Code, RStudio, Neovim, etc.) or any notebook editor (JupyterLab, etc.). This workshop will walk you through building an increasingly complex dashboard using various layout options and deploying them as static web pages (with no special server required), as well as with a Shiny Server on the backend for enhanced interactivity.</p>
<p><strong>This workshop is for you if you:</strong></p>
<ul>
<li><p>Do data analysis in computational notebooks,</p></li>
<li><p>Share your results with your audience in static or interactive dashboards and</p></li>
<li><p>Want to improve the design, user interface, and experience of your dashboards.</p></li>
</ul>
</section>
<section id="quarto-websites" class="level2">
<h2 class="anchored" data-anchor-id="quarto-websites"><strong>Quarto Websites</strong></h2>
<p>Do you need a professional website to showcase your work? Or have you got an idea for a website at work, but it needs to reflect your organization’s brand? If you’ve used Quarto to produce a document, you’ve already got the technical skills to create a Quarto website. In this workshop, you’ll learn everything else you need to build a website and customize its appearance.</p>
<p>You’ll get a running start by using a template we’ve designed to be functional and attractive but also act as a guide for your learning. Then you’ll:</p>
<ul>
<li><p>Add pages and navigation, and learn best practices for structuring your content.</p></li>
<li><p>Master the basics of SCSS and CSS and how they apply to Quarto websites to customize your site’s visual appearance.</p></li>
<li><p>Use listings, a special kind of page, to showcase related content like blog posts, projects, or talks.</p></li>
</ul>
<p>By the end of the workshop, you’ll have built and published (if you want) a personal website, but the same tools and techniques will apply to any kind of website you might like to build.</p>
<p>We’ll assume you’ve used Quarto to produce documents, but we won’t assume you have any HTML, CSS/SCSS, or Git/GitHub experience, nor will we assume any particular programming language (R, Python, etc.) or level of programming experience.</p>
<p><strong>This workshop is for you if you:</strong></p>
<ul>
<li><p>Have used Quarto to generate documents (e.g., HTML, PDF, MS Word, etc.)</p></li>
<li><p>Are comfortable editing plain text documents (e.g., `.qmd`) in your IDE (e.g., RStudio, Visual Studio Code, etc.) and</p></li>
<li><p>Want to walk away with your own personal website.</p></li>
</ul>
</section>
<section id="learn-more-about-positconf2024" class="level2">
<h2 class="anchored" data-anchor-id="learn-more-about-positconf2024"><strong>Learn more about posit::conf(2024)</strong></h2>
<p>Want to explore the complete catalog of posit::conf(2024) workshops and talks?</p>
<ul>
<li><p>Workshops on August 12: Head over to our <a href="https://reg.conf.posit.co/flow/posit/positconf24/publiccatalog/page/publiccatalog?search=&amp;search.sessiontype=1675316728702001wr6r">workshop listing</a> to discover detailed information about the courses and instructors.</p></li>
<li><p>Talks on August 13 and August 14: Peruse the <a href="https://reg.conf.posit.co/flow/posit/positconf24/publiccatalog/page/publiccatalog?search=&amp;tab.day=20240813">conference agenda</a>.</p>
<ul>
<li>Tip: For a quick view of all Quarto talks, filter for “Quarto” under topics.</li>
</ul></li>
</ul>
<p>Ready to secure your spot? Visit the <a href="https://posit.co/conference/">conference website</a> for comprehensive details on pricing and the agenda, and <a href="https://reg.conf.posit.co/flow/posit/positconf24/reg/login">register today</a>!</p>


</section>

 ]]></description>
  <category>Learn</category>
  <category>Workshop</category>
  <guid>https://prerelease.quarto.org/docs/blog/posts/2024-05-28-conf-workshops/</guid>
  <pubDate>Tue, 28 May 2024 00:00:00 GMT</pubDate>
  <media:content url="https://prerelease.quarto.org/docs/blog/posts/2024-05-28-conf-workshops/images/conf-workshops-thumbnail.png" medium="image" type="image/png" height="81" width="144"/>
</item>
</channel>
</rss>
