<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Julia on Posit Open Source</title>
    <link>https://posit-open-source.netlify.app/languages/julia/</link>
    <description>Recent content in Julia on Posit Open Source</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Thu, 05 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://posit-open-source.netlify.app/languages/julia/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>PDF Accessibility and Standards</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2026-03-05-pdf-accessibility-and-standards/</link>
      <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2026-03-05-pdf-accessibility-and-standards/</guid>
      <dc:creator>Gordon Woodhull</dc:creator><description><![CDATA[<div class="callout callout-note" role="note" aria-label="Note">
<div class="callout-header">
<span class="callout-title">Pre-release Feature</span>
</div>
<div class="callout-body">
<p>This feature is new in the upcoming Quarto 1.9 release. To use the feature now, you&rsquo;ll need to <a href="https://quarto.org/docs/download/prerelease.html" target="_blank" rel="noopener">download and install</a>
 the Quarto pre-release.</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" target="_blank" rel="noopener">EU</a>
 (June 2025) and <a href="https://accessible.org/ada-title-ii-web-accessibility/" target="_blank" rel="noopener">US</a>
 (April 2026).</p>
<p>Quarto 1.9 brings this support to you as a Quarto user.</p>
<h2 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>
<h2 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>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<p><strong>PDF (LaTeX)</strong></p>
<div class="sourceCode" id="cb1"><pre class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="fu">format</span><span class="kw">:</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="at">  </span><span class="fu">pdf</span><span class="kw">:</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="at">    </span><span class="fu">pdf-standard</span><span class="kw">:</span><span class="at"> ua-2</span></span></code></pre></div>
</div></td>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<p><strong>Typst</strong></p>
<div class="sourceCode" id="cb2"><pre class="sourceCode yaml"><code class="sourceCode yaml"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="fu">format</span><span class="kw">:</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a><span class="at">  </span><span class="fu">typst</span><span class="kw">:</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="at">    </span><span class="fu">pdf-standard</span><span class="kw">:</span><span class="at"> ua-1</span></span></code></pre></div>
</div></td>
</tr>
</tbody>
</table>
<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&rsquo;ll get a warning but still receive a PDF &ndash; it just won&rsquo;t be validated.</p>
<div class="callout callout-note" role="note" aria-label="Note">
<div class="callout-header">
<span class="callout-title">Installing veraPDF</span>
</div>
<div class="callout-body">
<p>To install veraPDF, you&rsquo;ll first need Java, then run:</p>
<p><strong>Terminal</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">quarto install verapdf
</span></span></code></pre></td></tr></table>
</div>
</div></div>
</div>
<p>When a document passes validation, you&rsquo;ll see output like:</p>
<pre><code>[verapdf]: Validating my-document.pdf against PDF/UA-2... PASSED
</code></pre>
<h2 id="creating-accessible-pdfs">Creating accessible PDFs
</h2>
<p>Quarto&rsquo;s Markdown-based workflow handles many accessibility requirements automatically:</p>
<ul>
<li>Document metadata (title, author, date, language) flows into the PDF&rsquo;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://quarto.org/docs/authoring/figures.html#alt-text" target="_blank" rel="noopener">Figures</a>
 for details.</li>
</ul>
<p>See the <a href="https://quarto.org/docs/output-formats/pdf-basics.html#accessibility-requirements" target="_blank" rel="noopener">LaTeX</a>
 and <a href="https://quarto.org/docs/output-formats/typst.html#accessibility-requirements" target="_blank" rel="noopener">Typst</a>
 documentation for more details.</p>
<h2 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&rsquo;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>
<h2 id="current-limitations">Current limitations
</h2>
<p>We ran our test suite &ndash; 188 LaTeX examples and 317 Typst examples &ndash; to find where Quarto PDFs do not yet pass UA-1 or UA-2, and where users will need to change their documents.</p>
<h3 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" target="_blank" rel="noopener">do not cooperate with PDF tagging</a>
.</p>
<p>(Margin content does work with Typst and passes UA-1 &ndash; see <a href="https://quarto.org/docs/output-formats/typst.html#article-layout" target="_blank" rel="noopener">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" target="_blank" rel="noopener">documented here</a>
.</p>
<h3 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 &ndash; almost all errors were due to missing titles or missing alt text.</p>
<p>However, we did discover that <a href="https://quarto.org/docs/books/book-output.html#typst-output" target="_blank" rel="noopener">Typst books</a>
 are not yet compliant. There is a <a href="https://github.com/flavio20002/typst-orange-template/issues/38" target="_blank" rel="noopener">structural problem with the Typst orange-book package</a>
 and we&rsquo;ll work with the maintainers to correct it.</p>
<h2 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" target="_blank" rel="noopener">Quarto discussions</a>
 and open a new one with the <code>accessibility</code> label for any issues you discover.</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2026-03-05-pdf-accessibility-and-standards/thumbnail.png" length="41719" type="image/png" />
    </item>
    <item>
      <title>posit::conf(2025) Quarto talks</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-11-24-conf-talk-videos/</link>
      <pubDate>Mon, 24 Nov 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-11-24-conf-talk-videos/</guid>
      <dc:creator>Andrew Holz</dc:creator><description><![CDATA[<p>The posit::conf(2025) session videos are now live! We&rsquo;ve created a curated playlist highlighting all the talks that showcase Quarto&mdash;how it is evolving, how people are using it, and how they&rsquo;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>
<h1 id="quarto-extensions--advanced-features">Quarto Extensions &amp; Advanced Features
</h1>
<table>
  <thead>
      <tr>
          <th>Speakers</th>
          <th>Title</th>
          <th>Thumbnail</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Carlos Scheidegger (Quarto Team)</strong></td>
          <td>What we&rsquo;re doing to make Quarto fast(er)</td>
          <td><a href="https://youtu.be/OBHppBRztO4" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/OBHppBRztO4/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>Christophe Dervieux (Quarto Team)</strong></td>
          <td>Beyond the Basics: Expanding Quarto&rsquo;s Capabilities</td>
          <td><a href="https://youtu.be/u9ev3mvC-p0" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/u9ev3mvC-p0/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>Garrick Aden-Buie</strong></td>
          <td>Theming Made Easy: Introducing brand.yml</td>
          <td><a href="https://youtu.be/DPaoNM8Ux04" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/DPaoNM8Ux04/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <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" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/WNwsgS-klMA/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>JooYoung Seo</strong></td>
          <td>maidr: Empowering Accessible, Multimodal Data Science with Quarto</td>
          <td><a href="https://youtu.be/QR7mdgM8Hf0" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/QR7mdgM8Hf0/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
  </tbody>
</table>
<h1 id="workflow-automation--reporting">Workflow Automation &amp; Reporting
</h1>
<table>
  <thead>
      <tr>
          <th>Speakers</th>
          <th>Title</th>
          <th>Thumbnail</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Becca Krouse</strong></td>
          <td>Instant Impact: Developing {docorator} to Simplify Document Production</td>
          <td><a href="https://youtu.be/SWt-lcnYlNM" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/SWt-lcnYlNM/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>John Paul Helveston</strong></td>
          <td>surveydown: A Markdown-Based Platform for Interactive Surveys</td>
          <td><a href="https://youtu.be/VwoeFKNvN5k" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/VwoeFKNvN5k/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>Keaton Wilson</strong></td>
          <td>Using Quarto to Improve Formatting and Automation</td>
          <td><a href="https://youtu.be/vHrI17AeYGs" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/vHrI17AeYGs/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
  </tbody>
</table>
<h1 id="teaching--education">Teaching &amp; Education
</h1>
<table>
  <thead>
      <tr>
          <th>Speakers</th>
          <th>Title</th>
          <th>Thumbnail</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><strong>Claus Wilke</strong></td>
          <td>Teaching data visualization with R entirely in Quarto</td>
          <td><a href="https://youtu.be/Q7y0YqCuvHc" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/Q7y0YqCuvHc/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <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" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/5gS7AUGwZPs/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>Ted Laderas</strong></td>
          <td>Empowering Learners with WebR, Pyodide, and Quarto</td>
          <td><a href="https://youtu.be/EQ9_MP2PYL8" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/EQ9_MP2PYL8/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
  </tbody>
</table>
<h1 id="business-collaboration--publishing">Business, Collaboration &amp; Publishing
</h1>
<table>
  <thead>
      <tr>
          <th>Speakers</th>
          <th>Title</th>
          <th>Thumbnail</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <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" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/UCloM4GcfVY/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <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" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/4-dQ2Q985A0/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
      <tr>
          <td><strong>Timothy Keyes</strong></td>
          <td>Trust, but Verify: Lessons from Deploying LLMs</td>
          <td><a href="https://youtu.be/HYQaZTLb2Co" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://img.youtube.com/vi/HYQaZTLb2Co/hqdefault.jpg"
      alt="thumb" 
      loading="lazy"
    >
  </figure></div>
</a>
</td>
      </tr>
  </tbody>
</table>
<div class="callout callout-tip" role="note" aria-label="Tip">
<div class="callout-header">
<span class="callout-title">Tip</span>
</div>
<div class="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: &ldquo;Branded Websites, Presentations, Dashboards, and PDFs with Quarto&rdquo; and &ldquo;Extending Quarto&rdquo;.<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="https://quarto.org/docs/blog/posts/2025-10-27-conf-workshops-materials/" target="_blank" rel="noopener">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 &mdash; and we&rsquo;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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-11-24-conf-talk-videos/thumbnail.png" length="221625" type="image/png" />
    </item>
    <item>
      <title>posit::conf(2025) Quarto workshop materials</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-10-27-conf-workshops-materials/</link>
      <pubDate>Mon, 27 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-10-27-conf-workshops-materials/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><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&rsquo;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/" target="_blank" rel="noopener">CC BY-SA 4.0</a>
 license.</p>
<h2 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="rounded">Workshop website</a>
<a href="https://github.com/posit-conf-2025/quarto-brand/" class="rounded"><i></i> Source</a>
<a href="https://github.com/posit-dev/quarto-brand-exercises/" class="rounded"><i></i> Exercises</a></p>
<p>Led by <a href="https://ivelasq.rbind.io/" target="_blank" rel="noopener">Isabella Velásquez</a>
, Posit, PBC and <a href="https://www.linkedin.com/in/sarakaltman" target="_blank" rel="noopener">Sara Altman</a>
, Posit, PBC.</p>
<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&rsquo;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&rsquo;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&rsquo;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&rsquo;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>
<h2 id="extending-quarto">Extending Quarto
</h2>
<p><a href="https://posit-conf-2025.github.io/quarto-extend/" class="rounded">Workshop website</a>
<a href="https://github.com/posit-conf-2025/quarto-extend/" class="rounded"><i></i> Source</a>
<a href="https://github.com/posit-conf-2025/quarto-extend-exercises/" class="rounded"><i></i> Exercises</a></p>
<p>Led by <a href="https://mine-cr.com/" target="_blank" rel="noopener">Mine Çetinkaya-Rundel</a>
, Posit, PBC + Duke University and <a href="https://www.cwick.co.nz/" target="_blank" rel="noopener">Charlotte Wickham</a>
 Posit, PBC.</p>
<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&rsquo;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&rsquo;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&rsquo;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&rsquo;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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-10-27-conf-workshops-materials/thumbnail.png" length="192305" type="image/png" />
    </item>
    <item>
      <title>Quarto Wizard 1.0.0: Democratising Quarto Extension Management</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/</link>
      <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/</guid>
      <dc:creator>Mickaël CANOUIL, _Ph.D._</dc:creator><description><![CDATA[<style>
.quarto-wizard {
   display: inline-block;
   aspect-ratio: 1 / 1;
   height: 1em;
   margin-bottom: -0.15em;
   mask-image: url('assets/media/quarto-wizard.svg');
   mask-size: contain;
   mask-repeat: no-repeat;
   mask-position: center;
   background-color: currentColor;
   vertical-align: baseline;
 }
 .hero-banner {
   border-radius: 1.5rem;
   box-shadow: 0 4px 24px #060c37;
   margin-bottom: 2rem;
 }
 </style>
<div class="callout callout-note" role="note" aria-label="Note">
<div class="callout-header">
<span class="callout-title">Community Contribution</span>
</div>
<div class="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" target="_blank" rel="noopener">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>
<img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/featured.png" class="hero-banner" data-fig-align="center" data-fig-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" />
<p>I&rsquo;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&rsquo;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" target="_blank" rel="noopener">VS Code marketplace</a>
 or <a href="https://open-vsx.org/extension/mcanouil/quarto-wizard" target="_blank" rel="noopener">Open VSX Registry</a>
:</p>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<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://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/extensions-marketplace-light.png" title="Extensions View: Marketplace" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Visual Studio Code Extensions Marketplace showing Quarto Wizard search
results with install button.
" width="500" /></p></li>
</ul>
</div></td>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<ul>
<li><p>Via the command line:</p>
<div class="panel-tabset">
<ul id="tabset-1" class="panel-tabset-tabby">
<li><a data-tabby-default href="#tabset-1-1">Visual Studio Code</a></li>
<li><a href="#tabset-1-2">Positron</a></li>
</ul>
<div id="tabset-1-1">
<div class="code-with-filename">
<strong>Terminal</strong>
<div class="sourceCode" id="cb1" data-filename="Terminal"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ex">code</span> <span class="at">--install-extension</span> mcanouil.quarto-wizard</span></code></pre></div>
</div>
<div class="callout callout-tip" role="note" aria-label="Tip">
<div class="callout-header">
<span class="callout-title">Tip</span>
</div>
<div class="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 (<code>Cmd-Shift-P</code> (mac), <code>Ctrl-Shift-P</code> (windows), <code>Ctrl-Shift-P</code> (linux)) if you haven’t done so already.</p>
</div>
</div>
</div>
<div id="tabset-1-2">
<div class="code-with-filename">
<strong>Terminal</strong>
<div class="sourceCode" id="cb2" data-filename="Terminal"><pre class="sourceCode bash"><code class="sourceCode bash"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="ex">positron</span> <span class="at">--install-extension</span> mcanouil.quarto-wizard</span></code></pre></div>
</div>
<div class="callout callout-tip" role="note" aria-label="Tip">
<div class="callout-header">
<span class="callout-title">Tip</span>
</div>
<div class="callout-body">
<p>Be sure to execute the command <em>Shell Command: Install ‘positron’ command in PATH</em> from Positron’s Command Palette (<code>Cmd-Shift-P</code> (mac), <code>Ctrl-Shift-P</code> (windows), <code>Ctrl-Shift-P</code> (linux)) if you haven’t done so already.</p>
</div>
</div>
</div>
</div></li>
</ul>
</div></td>
</tr>
</tbody>
</table>
<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&mdash;until now.</p>
<h2 id="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&rsquo;ve observed in the community: whilst Quarto&rsquo;s command-line interface is powerful, many users prefer visual interfaces for discovering, installing, and managing extensions.</p>
<h3 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&rsquo;re in Microsoft&rsquo;s VS Code or Posit&rsquo;s new Positron IDE.</p>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/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-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Quarto Wizard Extensions Installed panel in Visual Studio Code showing
no extensions installed message with green Install Extensions button.
" width="500" /></p>
<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>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<ol type="1">
<li>Open the Command Palette (<code>Cmd-Shift-P</code> (mac), <code>Ctrl-Shift-P</code> (windows), <code>Ctrl-Shift-P</code> (linux)).</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></td>
<td style="text-align: center;"><div width="50.0%" data-layout-align="center">
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-install-light.png" title="Quarto Wizard: Install Extensions (Light)" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Quarto Wizard extension selection dialog showing list of available
extensions with checkboxes including LIVE, HIGHLIGHT TEXT, GITHUB, and
other Quarto extensions.
" width="500" /></p>
</div></td>
</tr>
</tbody>
</table>
<h3 id="intelligent-extension-management">Intelligent extension management
</h3>
<p>The <strong>&ldquo;Recently Installed Extensions&rdquo;</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 id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></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>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/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-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Quarto Wizard Extensions Installed panel showing expanded iconify
extension details with update button and version information.
" width="500" /></p>
<h3 id="template-workflow-simplified">Template workflow simplified
</h3>
<p>Beyond extension management, I&rsquo;ve designed <strong>Quarto Wizard</strong> to ease the process of discovering and using document templates.
Once you&rsquo;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>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<ol type="1">
<li>Open the Command Palette (<code>Cmd-Shift-P</code> (mac), <code>Ctrl-Shift-P</code> (windows), <code>Ctrl-Shift-P</code> (linux)).</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></td>
<td style="text-align: center;"><div width="50.0%" data-layout-align="center">
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/vscode-template-light.png" title="Quarto Wizard: Use Template (Light)" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Visual Studio Code showing Quarto Wizard with installed extensions list
and document editor displaying invoice template with YAML frontmatter.
" width="500" /></p>
</div></td>
</tr>
</tbody>
</table>
<h2 id="powered-by-a-comprehensive-extension-directory">Powered by a comprehensive extension directory
</h2>
<h3 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/" target="_blank" rel="noopener">Quarto Extensions directory (m.canouil.dev/quarto-extensions/)</a>
, a comprehensive listing I maintain that catalogues extensions from across the entire Quarto ecosystem.</p>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-home-light.png" title="Mickaël CANOUIL&#39;s Quarto Extensions directory" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Quarto Extensions website displaying grid of extension cards including
webr, Reveal.js Clean theme, and Hikmah Academic templates.
" width="500" /></p>
<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>&rsquo;s discovery features, providing rich metadata about each extension including descriptions, licensing, version tags, and GitHub stars.
The directory is continuously updated through GitHub&rsquo;s API, ensuring you always have access to the latest extensions from the community.</p>
<h3 id="one-click-installation-from-the-web">One-click installation from the web
</h3>
<p>What&rsquo;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/" target="_blank" rel="noopener">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>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-modal-light.png" title="Mickaël CANOUIL&#39;s Quarto Extensions install modal" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-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" /></p>
<p>For example, you might want to add the <a href="https://github.com/mcanouil/quarto-iconify" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><strong>Animate</strong></a>
 extension to bring your presentations to life with CSS animations.
Perhaps the <a href="https://github.com/mcanouil/quarto-spotlight" target="_blank" rel="noopener"><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>
<h3 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&rsquo;s a template with <strong>&ldquo;Use&rdquo;</strong> buttons alongside <strong>&ldquo;Install&rdquo;</strong> options.</p>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/assets/media/quarto-extensions-template-light.png" title="Mickaël CANOUIL&#39;s Quarto Extensions list view filtered by formats" class="light-content img-thumbnail rounded-3 border-light" data-fig-align="center" data-group="quarto-wizard-light" data-fig-alt="Quarto Extensions website in list view showing Template extensions with
install and use buttons.
" width="500" /></p>
<p>Whether you&rsquo;re crafting an academic paper using journal-specific formats, creating professional invoices with my <a href="https://github.com/mcanouil/quarto-invoice" target="_blank" rel="noopener"><strong>Invoice</strong></a>
 extension template, or building stunning presentations with themed templates like my <a href="https://github.com/mcanouil/quarto-revealjs-coeos" target="_blank" rel="noopener"><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>
<h2 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/" target="_blank" rel="noopener">m.canouil.dev/quarto-extensions</a>
 to directly tackle several persistent Quarto pain points I&rsquo;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>
<h2 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" target="_blank" rel="noopener"><strong>Multibib</strong></a>
 or <a href="https://github.com/pandoc-ext/section-bibliographies" target="_blank" rel="noopener"><strong>Section Bibliographies</strong></a>
, and journal-specific formatting, whether they&rsquo;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" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><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>
<h2 id="future-ready-architecture">Future-ready architecture
</h2>
<p>I&rsquo;ve built <strong>Quarto Wizard</strong> on robust foundations that ensure long-term reliability.
The extension integrates with GitHub&rsquo;s API through the <a href="https://m.canouil.dev/quarto-extensions/" target="_blank" rel="noopener">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>
<h2 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&rsquo;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>
<li><strong>Through Quarto Wizard</strong>: Click the <strong>Quarto Wizard</strong> icon in your IDE&rsquo;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/" target="_blank" rel="noopener">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" target="_blank" rel="noopener"><strong>Iconify</strong></a>
 extension for comprehensive icon support or <a href="https://github.com/mcanouil/quarto-github" target="_blank" rel="noopener"><strong>GitHub</strong></a>
 for seamless GitHub linking.
Whether you click &ldquo;Install&rdquo; on the website, use <strong>Quarto Wizard</strong>&rsquo;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&rsquo;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&rsquo;s more accessible than ever in whichever modern development environment you prefer.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<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" target="_blank" rel="noopener">quarto-dev/quarto-cli#11468</a>
).&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-10-20-quarto-wizard-1-0-0/featured.png" length="2512689" type="image/png" />
    </item>
    <item>
      <title>Quarto 1.8</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-10-13-1.8-release/</link>
      <pubDate>Mon, 13 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-10-13-1.8-release/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><description><![CDATA[<p>Quarto 1.8 is available! You can get the current release from the <a href="https://quarto.org/docs/download/index.html" target="_blank" rel="noopener">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="https://quarto.org/docs/download/changelog/1.8/" target="_blank" rel="noopener">Release Notes</a>
.</p>
<h2 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>
<p><strong>_brand.yml</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">color</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">foreground</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">light</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#333333&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dark</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#EEEEEE&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">background</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">light</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#EEEEEE&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dark</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#333333&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">logos</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">medium</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">light</span><span class="p">:</span><span class="w"> </span><span class="l">logo.png</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dark</span><span class="p">:</span><span class="w"> </span><span class="l">logo-white.png         </span><span class="w">
</span></span></span></code></pre></td></tr></table>
</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="https://quarto.org/docs/authoring/brand.html" target="_blank" rel="noopener">Guide &gt; Brand</a>
:</p>
<ul>
<li><a href="https://quarto.org/docs/authoring/brand.html#light-and-dark-colors" target="_blank" rel="noopener">Light and dark colors</a>
</li>
<li><a href="https://quarto.org/docs/authoring/brand.html#light-and-dark-logos" target="_blank" rel="noopener">Light and dark logos</a>
</li>
<li><a href="https://quarto.org/docs/authoring/brand.html#brand-mode" target="_blank" rel="noopener">Brand mode</a>
</li>
</ul>
<h2 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>
<p><strong>Terminal</strong></p>
<pre tabindex="0"><code class="language-default" data-lang="default">quarto create extension brand
</code></pre><p>Read more in <a href="https://quarto.org/docs/extensions/brand.html" target="_blank" rel="noopener">Extensions &gt; Brand</a>
, and keep an eye out for other ways to reuse and share your brand in future releases.</p>
<h2 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" target="_blank" rel="noopener">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>
<figure>
<img src="https://quarto.org/docs/output-formats/images/axe-violation.png" class="border" data-fig-alt="A webpage with a box in the bottom left that warns &#39;Serious: Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds&#39;." alt="A rendered webpage with an accessibility violation warning" />
<figcaption aria-hidden="true">A rendered webpage with an accessibility violation warning</figcaption>
</figure>
<p>Read about your options in <a href="https://quarto.org/docs/output-formats/html-accessibility.html" target="_blank" rel="noopener">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>
<h2 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="panel-tabset">
<ul id="tabset-1" class="panel-tabset-tabby">
<li><a data-tabby-default href="#tabset-1-1">R</a></li>
<li><a href="#tabset-1-2">Python</a></li>
<li><a href="#tabset-1-3">Julia</a></li>
</ul>
<div id="tabset-1-1">
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-r" data-lang="r"><span class="line"><span class="cl"><span class="nf">library</span><span class="p">(</span><span class="n">jsonlite</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">execute_info</span> <span class="o">&lt;-</span> <span class="nf">read_json</span><span class="p">(</span><span class="nf">Sys.getenv</span><span class="p">(</span><span class="s">&#34;QUARTO_EXECUTE_INFO&#34;</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="n">execute_info</span><span class="o">$</span><span class="n">`document-path`</span>
</span></span></code></pre></td></tr></table>
</div>
</div></div>
<div id="tabset-1-2">
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">json</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">os</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">&#34;QUARTO_EXECUTE_INFO&#34;</span><span class="p">))</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">execute_info</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">execute_info</span><span class="p">[</span><span class="s2">&#34;document-path&#34;</span><span class="p">]</span>
</span></span></code></pre></td></tr></table>
</div>
</div></div>
<div id="tabset-1-3">
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-julia" data-lang="julia"><span class="line"><span class="cl"><span class="k">using</span> <span class="n">JSON</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">execute_info</span> <span class="o">=</span> <span class="n">JSON</span><span class="o">.</span><span class="n">parsefile</span><span class="p">(</span><span class="nb">ENV</span><span class="p">[</span><span class="s">&#34;QUARTO_EXECUTE_INFO&#34;</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="n">execute_info</span><span class="p">[</span><span class="s">&#34;document-path&#34;</span><span class="p">]</span>
</span></span></code></pre></td></tr></table>
</div>
</div></div>
</div>
<p>Read more in <a href="https://quarto.org/docs/advanced/quarto-execute-info.html" target="_blank" rel="noopener">Access execution settings from code cells</a>
.</p>
<h2 id="other-highlights">Other Highlights
</h2>
<ul>
<li>
<p>Access <a href="https://quarto.org/docs/extensions/lua-api.html#metadata-access" target="_blank" rel="noopener">metadata</a>
 and <a href="https://quarto.org/docs/extensions/lua-api.html#variables-access" target="_blank" rel="noopener">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>
<h2 id="acknowledgements">Acknowledgements
</h2>
<p>We&rsquo;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" target="_blank" rel="noopener">Aariq</a>
,
<a href="https://github.com/AndreasThinks" target="_blank" rel="noopener">AndreasThinks</a>
,
<a href="https://github.com/ArthurData" target="_blank" rel="noopener">ArthurData</a>
,
<a href="https://github.com/Blake-Madden" target="_blank" rel="noopener">Blake-Madden</a>
,
<a href="https://github.com/ColinFay" target="_blank" rel="noopener">ColinFay</a>
,
<a href="https://github.com/DCEW" target="_blank" rel="noopener">DCEW</a>
,
<a href="https://github.com/DanStuder" target="_blank" rel="noopener">DanStuder</a>
,
<a href="https://github.com/Data-Wise" target="_blank" rel="noopener">Data-Wise</a>
,
<a href="https://github.com/EllaKaye" target="_blank" rel="noopener">EllaKaye</a>
,
<a href="https://github.com/EmilHvitfeldt" target="_blank" rel="noopener">EmilHvitfeldt</a>
,
<a href="https://github.com/FrankwaP" target="_blank" rel="noopener">FrankwaP</a>
,
<a href="https://github.com/GabrielCoffee9" target="_blank" rel="noopener">GabrielCoffee9</a>
,
<a href="https://github.com/GeorgRamer" target="_blank" rel="noopener">GeorgRamer</a>
,
<a href="https://github.com/Gewerd-Strauss" target="_blank" rel="noopener">Gewerd-Strauss</a>
,
<a href="https://github.com/GuillaumeDehaene" target="_blank" rel="noopener">GuillaumeDehaene</a>
,
<a href="https://github.com/HarunCelikOtto" target="_blank" rel="noopener">HarunCelikOtto</a>
,
<a href="https://github.com/HayesJohnD" target="_blank" rel="noopener">HayesJohnD</a>
,
<a href="https://github.com/Joao-O-Santos" target="_blank" rel="noopener">Joao-O-Santos</a>
,
<a href="https://github.com/MateusMolina" target="_blank" rel="noopener">MateusMolina</a>
,
<a href="https://github.com/MichaelHatherly" target="_blank" rel="noopener">MichaelHatherly</a>
,
<a href="https://github.com/PeteArm" target="_blank" rel="noopener">PeteArm</a>
,
<a href="https://github.com/Selbosh" target="_blank" rel="noopener">Selbosh</a>
,
<a href="https://github.com/SergeCroise" target="_blank" rel="noopener">SergeCroise</a>
,
<a href="https://github.com/SrShelo" target="_blank" rel="noopener">SrShelo</a>
,
<a href="https://github.com/VisruthSK" target="_blank" rel="noopener">VisruthSK</a>
,
<a href="https://github.com/Vistales" target="_blank" rel="noopener">Vistales</a>
,
<a href="https://github.com/abhiaagarwal" target="_blank" rel="noopener">abhiaagarwal</a>
,
<a href="https://github.com/aborruso" target="_blank" rel="noopener">aborruso</a>
,
<a href="https://github.com/adamblake" target="_blank" rel="noopener">adamblake</a>
,
<a href="https://github.com/adamiturabi" target="_blank" rel="noopener">adamiturabi</a>
,
<a href="https://github.com/alastairrushworth" target="_blank" rel="noopener">alastairrushworth</a>
,
<a href="https://github.com/albertomercurio" target="_blank" rel="noopener">albertomercurio</a>
,
<a href="https://github.com/alecloudenback" target="_blank" rel="noopener">alecloudenback</a>
,
<a href="https://github.com/alex-r-bigelow" target="_blank" rel="noopener">alex-r-bigelow</a>
,
<a href="https://github.com/allefeld" target="_blank" rel="noopener">allefeld</a>
,
<a href="https://github.com/alyst" target="_blank" rel="noopener">alyst</a>
,
<a href="https://github.com/andrewheiss" target="_blank" rel="noopener">andrewheiss</a>
,
<a href="https://github.com/andrewpbray" target="_blank" rel="noopener">andrewpbray</a>
,
<a href="https://github.com/austin-hoover" target="_blank" rel="noopener">austin-hoover</a>
,
<a href="https://github.com/batpigandme" target="_blank" rel="noopener">batpigandme</a>
,
<a href="https://github.com/bauerj" target="_blank" rel="noopener">bauerj</a>
,
<a href="https://github.com/benkeks" target="_blank" rel="noopener">benkeks</a>
,
<a href="https://github.com/benz0li" target="_blank" rel="noopener">benz0li</a>
,
<a href="https://github.com/bkowshik" target="_blank" rel="noopener">bkowshik</a>
,
<a href="https://github.com/blackerby" target="_blank" rel="noopener">blackerby</a>
,
<a href="https://github.com/boshek" target="_blank" rel="noopener">boshek</a>
,
<a href="https://github.com/brandonmontez" target="_blank" rel="noopener">brandonmontez</a>
,
<a href="https://github.com/bryce-carson" target="_blank" rel="noopener">bryce-carson</a>
,
<a href="https://github.com/carschandler" target="_blank" rel="noopener">carschandler</a>
,
<a href="https://github.com/christopherkenny" target="_blank" rel="noopener">christopherkenny</a>
,
<a href="https://github.com/cl-roberts" target="_blank" rel="noopener">cl-roberts</a>
,
<a href="https://github.com/cmadland" target="_blank" rel="noopener">cmadland</a>
,
<a href="https://github.com/co1emi11er2" target="_blank" rel="noopener">co1emi11er2</a>
,
<a href="https://github.com/coatless" target="_blank" rel="noopener">coatless</a>
,
<a href="https://github.com/cpcloud" target="_blank" rel="noopener">cpcloud</a>
,
<a href="https://github.com/daxkellie" target="_blank" rel="noopener">daxkellie</a>
,
<a href="https://github.com/dixslyf" target="_blank" rel="noopener">dixslyf</a>
,
<a href="https://github.com/dkapitan" target="_blank" rel="noopener">dkapitan</a>
,
<a href="https://github.com/econmaett" target="_blank" rel="noopener">econmaett</a>
,
<a href="https://github.com/edavidaja" target="_blank" rel="noopener">edavidaja</a>
,
<a href="https://github.com/edvinsyk" target="_blank" rel="noopener">edvinsyk</a>
,
<a href="https://github.com/ethanwhite" target="_blank" rel="noopener">ethanwhite</a>
,
<a href="https://github.com/fermarsan" target="_blank" rel="noopener">fermarsan</a>
,
<a href="https://github.com/fredguth" target="_blank" rel="noopener">fredguth</a>
,
<a href="https://github.com/fuhrmanator" target="_blank" rel="noopener">fuhrmanator</a>
,
<a href="https://github.com/gadenbuie" target="_blank" rel="noopener">gadenbuie</a>
,
<a href="https://github.com/georgestagg" target="_blank" rel="noopener">georgestagg</a>
,
<a href="https://github.com/ghisvail" target="_blank" rel="noopener">ghisvail</a>
,
<a href="https://github.com/ghost" target="_blank" rel="noopener">ghost</a>
,
<a href="https://github.com/apps/github-actions" target="_blank" rel="noopener">github-actions[bot]</a>
,
<a href="https://github.com/glin" target="_blank" rel="noopener">glin</a>
,
<a href="https://github.com/gregswinehart" target="_blank" rel="noopener">gregswinehart</a>
,
<a href="https://github.com/gwbrck" target="_blank" rel="noopener">gwbrck</a>
,
<a href="https://github.com/halleysfifthinc" target="_blank" rel="noopener">halleysfifthinc</a>
,
<a href="https://github.com/hansfn" target="_blank" rel="noopener">hansfn</a>
,
<a href="https://github.com/hchulkim" target="_blank" rel="noopener">hchulkim</a>
,
<a href="https://github.com/holtzy" target="_blank" rel="noopener">holtzy</a>
,
<a href="https://github.com/htbunn" target="_blank" rel="noopener">htbunn</a>
,
<a href="https://github.com/hturner" target="_blank" rel="noopener">hturner</a>
,
<a href="https://github.com/hugetim" target="_blank" rel="noopener">hugetim</a>
,
<a href="https://github.com/hutch3232" target="_blank" rel="noopener">hutch3232</a>
,
<a href="https://github.com/iagopinal" target="_blank" rel="noopener">iagopinal</a>
,
<a href="https://github.com/ihrke" target="_blank" rel="noopener">ihrke</a>
,
<a href="https://github.com/jameslairdsmith" target="_blank" rel="noopener">jameslairdsmith</a>
,
<a href="https://github.com/jdfoote" target="_blank" rel="noopener">jdfoote</a>
,
<a href="https://github.com/jeremy9959" target="_blank" rel="noopener">jeremy9959</a>
,
<a href="https://github.com/jfy133" target="_blank" rel="noopener">jfy133</a>
,
<a href="https://github.com/jkrumbiegel" target="_blank" rel="noopener">jkrumbiegel</a>
,
<a href="https://github.com/jmgirard" target="_blank" rel="noopener">jmgirard</a>
,
<a href="https://github.com/jonpeake" target="_blank" rel="noopener">jonpeake</a>
,
<a href="https://github.com/jvcarli" target="_blank" rel="noopener">jvcarli</a>
,
<a href="https://github.com/jxpeng98" target="_blank" rel="noopener">jxpeng98</a>
,
<a href="https://github.com/kandolfp" target="_blank" rel="noopener">kandolfp</a>
,
<a href="https://github.com/kapsner" target="_blank" rel="noopener">kapsner</a>
,
<a href="https://github.com/kathsherratt" target="_blank" rel="noopener">kathsherratt</a>
,
<a href="https://github.com/kazuyanagimoto" target="_blank" rel="noopener">kazuyanagimoto</a>
,
<a href="https://github.com/kevinah95" target="_blank" rel="noopener">kevinah95</a>
,
<a href="https://github.com/kippandrew" target="_blank" rel="noopener">kippandrew</a>
,
<a href="https://github.com/koldle" target="_blank" rel="noopener">koldle</a>
,
<a href="https://github.com/lachlansimpson" target="_blank" rel="noopener">lachlansimpson</a>
,
<a href="https://github.com/lbm364dl" target="_blank" rel="noopener">lbm364dl</a>
,
<a href="https://github.com/leovuong" target="_blank" rel="noopener">leovuong</a>
,
<a href="https://github.com/lostmygithubaccount" target="_blank" rel="noopener">lostmygithubaccount</a>
,
<a href="https://github.com/lu-kas" target="_blank" rel="noopener">lu-kas</a>
,
<a href="https://github.com/lukmanaj" target="_blank" rel="noopener">lukmanaj</a>
,
<a href="https://github.com/lwjohnst86" target="_blank" rel="noopener">lwjohnst86</a>
,
<a href="https://github.com/maelle" target="_blank" rel="noopener">maelle</a>
,
<a href="https://github.com/mahmudstat" target="_blank" rel="noopener">mahmudstat</a>
,
<a href="https://github.com/masud90" target="_blank" rel="noopener">masud90</a>
,
<a href="https://github.com/melaniewalsh" target="_blank" rel="noopener">melaniewalsh</a>
,
<a href="https://github.com/mfisher87" target="_blank" rel="noopener">mfisher87</a>
,
<a href="https://github.com/mipmip" target="_blank" rel="noopener">mipmip</a>
,
<a href="https://github.com/mpr1255" target="_blank" rel="noopener">mpr1255</a>
,
<a href="https://github.com/multimeric" target="_blank" rel="noopener">multimeric</a>
,
<a href="https://github.com/musvaage" target="_blank" rel="noopener">musvaage</a>
,
<a href="https://github.com/mvuorre" target="_blank" rel="noopener">mvuorre</a>
,
<a href="https://github.com/nathanj3" target="_blank" rel="noopener">nathanj3</a>
,
<a href="https://github.com/nessan" target="_blank" rel="noopener">nessan</a>
,
<a href="https://github.com/nichtich" target="_blank" rel="noopener">nichtich</a>
,
<a href="https://github.com/odysseu" target="_blank" rel="noopener">odysseu</a>
,
<a href="https://github.com/ofkoru" target="_blank" rel="noopener">ofkoru</a>
,
<a href="https://github.com/olivroy" target="_blank" rel="noopener">olivroy</a>
,
<a href="https://github.com/oyvindbso" target="_blank" rel="noopener">oyvindbso</a>
,
<a href="https://github.com/pagiraud" target="_blank" rel="noopener">pagiraud</a>
,
<a href="https://github.com/parmsam" target="_blank" rel="noopener">parmsam</a>
,
<a href="https://github.com/peter-gy" target="_blank" rel="noopener">peter-gy</a>
,
<a href="https://github.com/pm-gusmano" target="_blank" rel="noopener">pm-gusmano</a>
,
<a href="https://github.com/produnis" target="_blank" rel="noopener">produnis</a>
,
<a href="https://github.com/rabyj" target="_blank" rel="noopener">rabyj</a>
,
<a href="https://github.com/raffaem" target="_blank" rel="noopener">raffaem</a>
,
<a href="https://github.com/randyzwitch" target="_blank" rel="noopener">randyzwitch</a>
,
<a href="https://github.com/rben01" target="_blank" rel="noopener">rben01</a>
,
<a href="https://github.com/rossbowen" target="_blank" rel="noopener">rossbowen</a>
,
<a href="https://github.com/rundel" target="_blank" rel="noopener">rundel</a>
,
<a href="https://github.com/ryanzomorrodi" target="_blank" rel="noopener">ryanzomorrodi</a>
,
<a href="https://github.com/ryjohnson09" target="_blank" rel="noopener">ryjohnson09</a>
,
<a href="https://github.com/s2t2" target="_blank" rel="noopener">s2t2</a>
,
<a href="https://github.com/salim-b" target="_blank" rel="noopener">salim-b</a>
,
<a href="https://github.com/samcarter" target="_blank" rel="noopener">samcarter</a>
,
<a href="https://github.com/serialc" target="_blank" rel="noopener">serialc</a>
,
<a href="https://github.com/sgelzenleuchter" target="_blank" rel="noopener">sgelzenleuchter</a>
,
<a href="https://github.com/skriptum" target="_blank" rel="noopener">skriptum</a>
,
<a href="https://github.com/spaette" target="_blank" rel="noopener">spaette</a>
,
<a href="https://github.com/stragu" target="_blank" rel="noopener">stragu</a>
,
<a href="https://github.com/sun123zxy" target="_blank" rel="noopener">sun123zxy</a>
,
<a href="https://github.com/sverrirarnors" target="_blank" rel="noopener">sverrirarnors</a>
,
<a href="https://github.com/tecosaur" target="_blank" rel="noopener">tecosaur</a>
,
<a href="https://github.com/temospena" target="_blank" rel="noopener">temospena</a>
,
<a href="https://github.com/thatchermo" target="_blank" rel="noopener">thatchermo</a>
,
<a href="https://github.com/topepo" target="_blank" rel="noopener">topepo</a>
,
<a href="https://github.com/tylere" target="_blank" rel="noopener">tylere</a>
,
<a href="https://github.com/winniehell" target="_blank" rel="noopener">winniehell</a>
,
<a href="https://github.com/wklimowicz" target="_blank" rel="noopener">wklimowicz</a>
,
<a href="https://github.com/yogabonito" target="_blank" rel="noopener">yogabonito</a>
,
<a href="https://github.com/youcc" target="_blank" rel="noopener">youcc</a>
,
<a href="https://github.com/yves-amevoin" target="_blank" rel="noopener">yves-amevoin</a>
,
<a href="https://github.com/yyzeng" target="_blank" rel="noopener">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>&ndash; 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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-10-13-1.8-release/thumbnail.png" length="58117" type="image/png" />
    </item>
    <item>
      <title>How to use GitHub Codespaces to simplify your Quarto workshops</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-05-19-quarto-codespaces/</link>
      <pubDate>Mon, 19 May 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-05-19-quarto-codespaces/</guid>
      <dc:creator>Mickaël CANOUIL, _Ph.D._</dc:creator><description><![CDATA[<h2 id="what-is-github-codespaces">What Is GitHub Codespaces?
</h2>
<p><a href="https://github.com/features/codespaces" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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&rsquo;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 &ldquo;it doesn&rsquo;t work on my machine&rdquo; 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>
<h2 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&rsquo;s the magic of using Codespaces:</p>
<ol>
<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&rsquo;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/" target="_blank" rel="noopener">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" target="_blank" rel="noopener">&ldquo;deep link&rdquo;</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" target="_blank" rel="noopener"><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>
<p><a href="https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&amp;devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json" target="_blank" rel="noopener"><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://github.com/codespaces/badge.svg"
      alt="" 
      loading="lazy"
    >
  </figure></div>
</a>
</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">[<span class="nt">![Open in GitHub Codespaces</span>](<span class="na">https://github.com/codespaces/badge.svg</span>)](https://codespaces.new/mcanouil/quarto-codespaces?quickstart=1&amp;devcontainer_path=.devcontainer%2Funiversal%2Fdevcontainer.json)
</span></span></code></pre></td></tr></table>
</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>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: center;"><div width="50.0%" data-layout-align="center">
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-05-19-quarto-codespaces/quarto-codespaces-new-001-light.png" data-group="codespaces-light" data-fig-alt="GitHub Codespaces interface showing the &#39;Create codespace&#39; page. The page includes a section with the repository &#39;mcanouil/quarto-codespaces&#39; and a message stating &#39;No codespace to resume&#39;. There are two buttons: &#39;Change options&#39; and &#39;Create new codespace&#39;." /></p>
</div></td>
<td style="text-align: center;"><div width="50.0%" data-layout-align="center">
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2025-05-19-quarto-codespaces/quarto-codespaces-new-002-light.png" data-group="codespaces-light" data-fig-alt="image_url" alt="Screenshot of Visual Studio Code interface showing a GitHub Codespace for a project named &#39;quarto-codespaces&#39;. The left sidebar contains a file explorer with folders and files such as .devcontainer, .github, init-env.sh, LICENSE, and README.md. The terminal at the bottom displays logs related to configuring the codespace, including commands and their outcomes. The right sidebar has a section titled &#39;Edit with Copilot&#39; explaining how to use Copilot in agent mode." /></p>
</div></td>
</tr>
</tbody>
</table>
<h2 id="setting-up-your-own-quarto-codespaces-environment">Setting Up Your Own Quarto-Codespaces Environment
</h2>
<p>If you&rsquo;re considering using Codespaces with Quarto CLI for your next workshop or teaching module, here&rsquo;s how to get started:</p>
<p>Leverage the example provided by the <a href="https://github.com/mcanouil/quarto-codespaces" target="_blank" rel="noopener"><code>quarto-codespaces</code> repository</a>
 or <a href="https://github.com/codespaces/new/" target="_blank" rel="noopener">create your own Codespaces using the default</a>
.</p>
<h3 id="use-an-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" target="_blank" rel="noopener"><code>ghcr.io/quarto-dev/quarto</code></a>
</li>
<li><a href="https://github.com/quarto-dev/quarto-cli/pkgs/container/quarto-full" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;My Workshop Setup&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;image&#34;</span><span class="p">:</span> <span class="s2">&#34;ghcr.io/mcanouil/quarto-codespaces:latest&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;remoteUser&#34;</span><span class="p">:</span> <span class="s2">&#34;vscode&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;customizations&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;vscode&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;extensions&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;quarto.quarto&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;mcanouil.quarto-wizard&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;codespaces&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;openFiles&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;exercises/intro-to-quarto.qmd&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;exercises/computation.qmd&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><dl>
<dt>Line 3</dt>
<dd>The Docker image is specified in the <code>image</code> field.
It&rsquo;s built using a Dev Container specification that you can find in <a href="https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer" target="_blank" rel="noopener"><code>.github/.devcontainer</code></a>
.</dd>
<dt>Line 8</dt>
<dd>The <a href="https://github.com/quarto-dev/quarto" target="_blank" rel="noopener"><code>quarto</code> extension</a>
 for Visual Studio Code / Positron to provide support for Quarto documents.</dd>
<dt>Line 9</dt>
<dd>The <a href="https://github.com/mcanouil/quarto-wizard" target="_blank" rel="noopener"><code>quarto-wizard</code> extension</a>
 for Visual Studio Code / Positron to provide assistance in managing Quarto extensions</dd>
<dt>Line 13</dt>
<dd>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" target="_blank" rel="noopener">Codespaces documentation</a>
 for more information.</dd>
</dl>
<h3 id="configure-the-development-container">Configure the Development Container
</h3>
<p>You can fork the <a href="https://github.com/mcanouil/quarto-codespaces" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><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" target="_blank" rel="noopener"><code>ghcr.io/mcanouil/quarto-codespaces</code></a>
 using <a href="https://github.com/mcanouil/quarto-codespaces/tree/main/.github/.devcontainer" target="_blank" rel="noopener"><code>.github/.devcontainer/devcontainer.json</code></a>
).</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;Quarto&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="c1">// &#34;image&#34;: &#34;buildpack-deps:jammy-curl&#34;,
</span></span></span><span class="line"><span class="cl">  <span class="nt">&#34;build&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;dockerfile&#34;</span><span class="p">:</span> <span class="s2">&#34;./Dockerfile&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;context&#34;</span><span class="p">:</span> <span class="s2">&#34;.&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;args&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;VARIANT&#34;</span><span class="p">:</span> <span class="s2">&#34;jammy&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;remoteUser&#34;</span><span class="p">:</span> <span class="s2">&#34;vscode&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;features&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;./quarto-computing-dependencies&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;rDeps&#34;</span><span class="p">:</span> <span class="s2">&#34;rmarkdown,languageserver,nx10/httpgd@v2.0.3,prompt,lintr&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;pythonDeps&#34;</span><span class="p">:</span> <span class="s2">&#34;jupyter,papermill&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;juliaDeps&#34;</span><span class="p">:</span> <span class="s2">&#34;IJulia&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;./uv&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;latest&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;ghcr.io/rocker-org/devcontainer-features/quarto-cli:1&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;release&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;installTinyTex&#34;</span><span class="p">:</span> <span class="s2">&#34;true&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;installChromium&#34;</span><span class="p">:</span> <span class="s2">&#34;false&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;customizations&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;vscode&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;extensions&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;quarto.quarto&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;mcanouil.quarto-wizard&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;REditorSupport.r&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;Posit.air-vscode&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">],</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;settings&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;r.rterm.option&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;--no-save&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;--no-restore-data&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="s2">&#34;--quiet&#34;</span>
</span></span><span class="line"><span class="cl">        <span class="p">],</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;[r]&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">          <span class="nt">&#34;editor.defaultFormatter&#34;</span><span class="p">:</span> <span class="s2">&#34;Posit.air-vscode&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">          <span class="nt">&#34;editor.formatOnSave&#34;</span><span class="p">:</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><dl>
<dt>Line 3</dt>
<dd>The <code>image</code> field specifies the base image for the container.
You can customise this to suit your needs.</dd>
<dt>Line 12</dt>
<dd>The <code>features</code> section allows you to add additional tools or libraries.
See the <a href="https://containers.dev/features/" target="_blank" rel="noopener">Dev Container Features available</a>
 for a comprehensive list of available features.</dd>
<dt>Line 13</dt>
<dd>The <code>quarto-computing-dependencies</code> feature is a &ldquo;local&rdquo; 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.</dd>
<dt>Line 18</dt>
<dd>The <code>uv</code> feature installs the <a href="https://docs.astral.sh/uv/" target="_blank" rel="noopener"><code>uv</code> tool</a>
 to manage Python packages and project dependencies.</dd>
<dt>Line 21</dt>
<dd>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" target="_blank" rel="noopener">https://github.com/rocker-org/devcontainer-features/tree/main/src/quarto-cli</a>
.</dd>
<dt>Line 27</dt>
<dd>The <code>customizations</code> section allows you to specify settings and extensions for Visual Studio Code.</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 <a href="#use-existing-docker-image">Use an Existing Docker Image</a>
.</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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;My Workshop Setup&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;image&#34;</span><span class="p">:</span> <span class="s2">&#34;ghcr.io/mcanouil/quarto-codespaces:latest&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;remoteUser&#34;</span><span class="p">:</span> <span class="s2">&#34;vscode&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;postStartCommand&#34;</span><span class="p">:</span> <span class="s2">&#34;uv venv &amp;&amp; source .venv/bin/activate &amp;&amp; uv pip install -r requirements.txt&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;My Workshop Setup&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;image&#34;</span><span class="p">:</span> <span class="s2">&#34;ghcr.io/mcanouil/quarto-codespaces:latest&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;remoteUser&#34;</span><span class="p">:</span> <span class="s2">&#34;vscode&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;postStartCommand&#34;</span><span class="p">:</span> <span class="s2">&#34;bash ./init-env.sh --what all --force&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></td></tr></table>
</div>
</div><dl>
<dt>Line 5</dt>
<dd>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" target="_blank" rel="noopener"><code>init-env.sh</code> script</a>
 from <a href="https://github.com/mcanouil/quarto-codespaces" target="_blank" rel="noopener"><code>quarto-codespaces</code> repository</a>
 with the <code>--what all</code> and <code>--force</code> options.</dd>
</dl>
<h2 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&rsquo;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 &ldquo;Dependency Hell&rdquo;:</strong> With containerised development, all attendees work from the same baseline, ensuring that version conflicts or missing libraries don&rsquo;t derail a session.</li>
</ul>
<h2 id="final-thoughts-and-future-directions">Final Thoughts and Future Directions
</h2>
<p>Whether you&rsquo;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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">GitHub Codespaces: Real-time collaboration</a>
</li>
</ul>
<p>This post covered the basics of using Codespaces and Quarto together, but there&rsquo;s much more to Codespaces.
Learn more by <a href="https://docs.github.com/en/codespaces" target="_blank" rel="noopener">consulting their documentation</a>
.</p>
<p>Happy teaching!</p>
<h2 id="disclaimer">Disclaimer
</h2>
<p>GitHub Codespaces is a product of GitHub, Inc. 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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">GitHub Classroom</a>
.</p>
<h2 id="acknowledgements">Acknowledgements
</h2>
<p>Thanks to <a href="https://github.com/cscheid" target="_blank" rel="noopener">Carlos Scheidegger</a>
, <a href="https://github.com/juliasilge" target="_blank" rel="noopener">Julia Silge</a>
, and <a href="https://github.com/coatless" target="_blank" rel="noopener">James J. Balamuta</a>
 for their feedback and suggestions on this post.</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-05-19-quarto-codespaces/featured.png" length="76636" type="image/png" />
    </item>
    <item>
      <title>Quarto 1.7</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/</link>
      <pubDate>Mon, 28 Apr 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><description><![CDATA[<p>Quarto 1.7 is out! You can get the current release from the <a href="https://quarto.org/docs/download/index.html" target="_blank" rel="noopener">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&rsquo;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></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="https://quarto.org/docs/download/changelog/1.7/" target="_blank" rel="noopener">Release Notes</a>
.</p>
<h2 id="dark-mode-improvements">Dark Mode Improvements
</h2>
<h3 id="specify-light-and-dark-themes-via-brandyml">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>
<p><strong>_quarto.yml</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">brand</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">light</span><span class="p">:</span><span class="w"> </span><span class="l">light-brand.yml</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">dark</span><span class="p">:</span><span class="w"> </span><span class="l">dark-brand.yml</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</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>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/light.png" data-fig-alt="Screenshot of a webpage with a light blue body and charcoal text. A switch toggle in the navbar is &#39;off&#39;." alt="light brand" />
<figcaption aria-hidden="true"><code>light</code> brand</figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/dark.png" data-fig-alt="Screenshot of a webpage with a dark charcoal body and light blue text. A switch toggle in the navbar is &#39;on&#39;." alt="dark brand" />
<figcaption aria-hidden="true"><code>dark</code> brand</figcaption>
</figure>
</div></td>
</tr>
</tbody>
</table>
<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>
<p><strong>document.qmd</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">format</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">typst</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">brand-mode</span><span class="p">:</span><span class="w"> </span><span class="l">dark</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>Read about other ways to set a light and dark brand in <a href="https://quarto.org/docs/authoring/brand.html#dark-brand" target="_blank" rel="noopener">Guide &gt; Brand</a>
.</p>
<h3 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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">``<span class="sb">`{r}
</span></span></span><span class="line"><span class="cl"><span class="sb">#| renderings: [light, dark]
</span></span></span><span class="line"><span class="cl"><span class="sb">plot(1:10) # Shown in `</span>light<span class="sb">` mode
</span></span></span><span class="line"><span class="cl"><span class="sb">
</span></span></span><span class="line"><span class="cl"><span class="sb">par(bg = &#34;#000000&#34;, fg = &#34;#FFFFFF&#34;, col.axis = &#34;#FFFFFF&#34;)
</span></span></span><span class="line"><span class="cl"><span class="sb">plot(1:10) # Shown in `</span>dark<span class="sb">` mode
</span></span></span><span class="line"><span class="cl"><span class="sb">`</span>``
</span></span></code></pre></td></tr></table>
</div>
</div><img src="https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/index.markdown_strict_files/figure-markdown_strict/unnamed-chunk-1-1.png" width="768" />
<img src="https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/index.markdown_strict_files/figure-markdown_strict/unnamed-chunk-1-2.png" width="768" />
<p>Both outputs are produced, but you&rsquo;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>
<h3 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&rsquo;s operating system or browser preference for light or dark mode:</p>
<p><strong>_quarto.yml</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">format</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">html</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">respect-user-color-scheme</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><h2 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="https://quarto.org/docs/authoring/version.html" target="_blank" rel="noopener"><code>version</code> shortcode</a>
 to insert the version of Quarto used to build your document:</p>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<div class="sourceCode" id="cb1" data-shortcodes="false"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>Rendered with Quarto {{&lt;/* version */&gt;}}</span></code></pre></div>
</div></td>
<td style="text-align: left;"><div class="border" width="50.0%" data-layout-align="left">
<p>Rendered with Quarto 1.9.30</p>
</div></td>
</tr>
</tbody>
</table>
</li>
<li>
<p>Updated LaTeX and Beamer template partials:</p>
<ul>
<li><a href="https://quarto.org/docs/journals/templates.html#latex-partials" target="_blank" rel="noopener">LaTeX partials</a>
</li>
<li><a href="https://quarto.org/docs/journals/templates.html#beamer-partials" target="_blank" rel="noopener">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="https://quarto.org/docs/computations/julia.html#juliaup-integration" target="_blank" rel="noopener"><code>juliaup</code> integration</a>
: Use specific versions of Julia in your notebooks.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/computations/julia.html#r-and-python-support" target="_blank" rel="noopener">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="https://quarto.org/docs/computations/julia.html#caching-julia" target="_blank" rel="noopener">Caching</a>
: Save time rendering long-running notebooks by caching results.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/computations/julia.html#revise.jl-integration" target="_blank" rel="noopener">Revise.jl integration</a>
: Automatically update function definitions in Julia sessions.</p>
</li>
</ul>
</li>
</ul>
<h2 id="acknowledgements">Acknowledgements
</h2>
<p>We&rsquo;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" target="_blank" rel="noopener">AndreasThinks</a>
,
<a href="https://github.com/ArthurData" target="_blank" rel="noopener">ArthurData</a>
,
<a href="https://github.com/BrendonChau" target="_blank" rel="noopener">BrendonChau</a>
,
<a href="https://github.com/DanStuder" target="_blank" rel="noopener">DanStuder</a>
,
<a href="https://github.com/DavidFirth" target="_blank" rel="noopener">DavidFirth</a>
,
<a href="https://github.com/Eli-78-fas" target="_blank" rel="noopener">Eli-78-fas</a>
,
<a href="https://github.com/EllaKaye" target="_blank" rel="noopener">EllaKaye</a>
,
<a href="https://github.com/EmilHvitfeldt" target="_blank" rel="noopener">EmilHvitfeldt</a>
,
<a href="https://github.com/EvoArt" target="_blank" rel="noopener">EvoArt</a>
,
<a href="https://github.com/FMKerckhof" target="_blank" rel="noopener">FMKerckhof</a>
,
<a href="https://github.com/FrankwaP" target="_blank" rel="noopener">FrankwaP</a>
,
<a href="https://github.com/JanPalasek" target="_blank" rel="noopener">JanPalasek</a>
,
<a href="https://github.com/Jocarnail" target="_blank" rel="noopener">Jocarnail</a>
,
<a href="https://github.com/MHellmund" target="_blank" rel="noopener">MHellmund</a>
,
<a href="https://github.com/MichaelHatherly" target="_blank" rel="noopener">MichaelHatherly</a>
,
<a href="https://github.com/Noghpu" target="_blank" rel="noopener">Noghpu</a>
,
<a href="https://github.com/PeneLoopy" target="_blank" rel="noopener">PeneLoopy</a>
,
<a href="https://github.com/Rafnuss" target="_blank" rel="noopener">Rafnuss</a>
,
<a href="https://github.com/SergeCroise" target="_blank" rel="noopener">SergeCroise</a>
,
<a href="https://github.com/TonyFly3000" target="_blank" rel="noopener">TonyFly3000</a>
,
<a href="https://github.com/actuaristai" target="_blank" rel="noopener">actuaristai</a>
,
<a href="https://github.com/alex-r-bigelow" target="_blank" rel="noopener">alex-r-bigelow</a>
,
<a href="https://github.com/andrewheiss" target="_blank" rel="noopener">andrewheiss</a>
,
<a href="https://github.com/ant-durrant" target="_blank" rel="noopener">ant-durrant</a>
,
<a href="https://github.com/antoine4ucsd" target="_blank" rel="noopener">antoine4ucsd</a>
,
<a href="https://github.com/arnaudgallou" target="_blank" rel="noopener">arnaudgallou</a>
,
<a href="https://github.com/aronatkins" target="_blank" rel="noopener">aronatkins</a>
,
<a href="https://github.com/arthurgailes" target="_blank" rel="noopener">arthurgailes</a>
,
<a href="https://github.com/bkowshik" target="_blank" rel="noopener">bkowshik</a>
,
<a href="https://github.com/boshek" target="_blank" rel="noopener">boshek</a>
,
<a href="https://github.com/cbrnr" target="_blank" rel="noopener">cbrnr</a>
,
<a href="https://github.com/cl-roberts" target="_blank" rel="noopener">cl-roberts</a>
,
<a href="https://github.com/cmadland" target="_blank" rel="noopener">cmadland</a>
,
<a href="https://github.com/coatless" target="_blank" rel="noopener">coatless</a>
,
<a href="https://github.com/deepayan" target="_blank" rel="noopener">deepayan</a>
,
<a href="https://github.com/devmcp" target="_blank" rel="noopener">devmcp</a>
,
<a href="https://github.com/dhimmel" target="_blank" rel="noopener">dhimmel</a>
,
<a href="https://github.com/dkapitan" target="_blank" rel="noopener">dkapitan</a>
,
<a href="https://github.com/dmenne" target="_blank" rel="noopener">dmenne</a>
,
<a href="https://github.com/eamcvey" target="_blank" rel="noopener">eamcvey</a>
,
<a href="https://github.com/edavidaja" target="_blank" rel="noopener">edavidaja</a>
,
<a href="https://github.com/fredguth" target="_blank" rel="noopener">fredguth</a>
,
<a href="https://github.com/fuhrmanator" target="_blank" rel="noopener">fuhrmanator</a>
,
<a href="https://github.com/gadenbuie" target="_blank" rel="noopener">gadenbuie</a>
,
<a href="https://github.com/apps/github-actions" target="_blank" rel="noopener">github-actions[bot]</a>
,
<a href="https://github.com/glin" target="_blank" rel="noopener">glin</a>
,
<a href="https://github.com/gwbrck" target="_blank" rel="noopener">gwbrck</a>
,
<a href="https://github.com/hchulkim" target="_blank" rel="noopener">hchulkim</a>
,
<a href="https://github.com/hguturu" target="_blank" rel="noopener">hguturu</a>
,
<a href="https://github.com/hturner" target="_blank" rel="noopener">hturner</a>
,
<a href="https://github.com/ihrke" target="_blank" rel="noopener">ihrke</a>
,
<a href="https://github.com/jdutant" target="_blank" rel="noopener">jdutant</a>
,
<a href="https://github.com/jenslaufer" target="_blank" rel="noopener">jenslaufer</a>
,
<a href="https://github.com/jkrumbiegel" target="_blank" rel="noopener">jkrumbiegel</a>
,
<a href="https://github.com/jmgirard" target="_blank" rel="noopener">jmgirard</a>
,
<a href="https://github.com/joelostblom" target="_blank" rel="noopener">joelostblom</a>
,
<a href="https://github.com/kandolfp" target="_blank" rel="noopener">kandolfp</a>
,
<a href="https://github.com/kapsner" target="_blank" rel="noopener">kapsner</a>
,
<a href="https://github.com/kazuyanagimoto" target="_blank" rel="noopener">kazuyanagimoto</a>
,
<a href="https://github.com/kdheepak" target="_blank" rel="noopener">kdheepak</a>
,
<a href="https://github.com/kingo55" target="_blank" rel="noopener">kingo55</a>
,
<a href="https://github.com/knuesel" target="_blank" rel="noopener">knuesel</a>
,
<a href="https://github.com/kubu4" target="_blank" rel="noopener">kubu4</a>
,
<a href="https://github.com/kv9898" target="_blank" rel="noopener">kv9898</a>
,
<a href="https://github.com/kylie-foster" target="_blank" rel="noopener">kylie-foster</a>
,
<a href="https://github.com/loneguardian" target="_blank" rel="noopener">loneguardian</a>
,
<a href="https://github.com/lwjohnst86" target="_blank" rel="noopener">lwjohnst86</a>
,
<a href="https://github.com/ma2048" target="_blank" rel="noopener">ma2048</a>
,
<a href="https://github.com/markjholmes" target="_blank" rel="noopener">markjholmes</a>
,
<a href="https://github.com/maurosilber" target="_blank" rel="noopener">maurosilber</a>
,
<a href="https://github.com/mipmip" target="_blank" rel="noopener">mipmip</a>
,
<a href="https://github.com/mroavi" target="_blank" rel="noopener">mroavi</a>
,
<a href="https://github.com/mroberts1" target="_blank" rel="noopener">mroberts1</a>
,
<a href="https://github.com/msh855" target="_blank" rel="noopener">msh855</a>
,
<a href="https://github.com/mvuorre" target="_blank" rel="noopener">mvuorre</a>
,
<a href="https://github.com/nathanj3" target="_blank" rel="noopener">nathanj3</a>
,
<a href="https://github.com/odysseu" target="_blank" rel="noopener">odysseu</a>
,
<a href="https://github.com/parmsam" target="_blank" rel="noopener">parmsam</a>
,
<a href="https://github.com/peter-gy" target="_blank" rel="noopener">peter-gy</a>
,
<a href="https://github.com/pvelayudhan" target="_blank" rel="noopener">pvelayudhan</a>
,
<a href="https://github.com/raffaem" target="_blank" rel="noopener">raffaem</a>
,
<a href="https://github.com/robmcd" target="_blank" rel="noopener">robmcd</a>
,
<a href="https://github.com/ryanzomorrodi" target="_blank" rel="noopener">ryanzomorrodi</a>
,
<a href="https://github.com/stragu" target="_blank" rel="noopener">stragu</a>
,
<a href="https://github.com/sun123zxy" target="_blank" rel="noopener">sun123zxy</a>
,
<a href="https://github.com/t-kalinowski" target="_blank" rel="noopener">t-kalinowski</a>
,
<a href="https://github.com/temospena" target="_blank" rel="noopener">temospena</a>
,
<a href="https://github.com/tjni" target="_blank" rel="noopener">tjni</a>
,
<a href="https://github.com/torven-schalk" target="_blank" rel="noopener">torven-schalk</a>
,
<a href="https://github.com/turcotte" target="_blank" rel="noopener">turcotte</a>
,
<a href="https://github.com/wenyaoliu" target="_blank" rel="noopener">wenyaoliu</a>
,
<a href="https://github.com/yhkee0404" target="_blank" rel="noopener">yhkee0404</a>
.</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-04-28-1.7-release/thumbnail-1.7.jpeg" length="90331" type="image/jpeg" />
    </item>
    <item>
      <title>Tip - use Positron to choose colors for your project brand</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2025-01-15-quarto-tip-brand-positron/</link>
      <pubDate>Wed, 15 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2025-01-15-quarto-tip-brand-positron/</guid>
      <dc:creator>Carlos Scheidegger</dc:creator><description><![CDATA[<p>In today&rsquo;s Quarto Tip, we show you how <a href="https://positron.posit.co" target="_blank" rel="noopener">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/" target="_blank" rel="noopener">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="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/Mly_DK-2BnI"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Additional links:</p>
<ul>
<li><a href="https://quarto.org/docs/blog/posts/2024-11-25-1.6-release/index.html" target="_blank" rel="noopener">Quarto 1.6 release post</a>
</li>
<li><a href="https://positron.posit.co/download.html" target="_blank" rel="noopener">Download Positron</a>
</li>
<li><a href="https://quarto.org/docs/authoring/brand.html" target="_blank" rel="noopener">Quarto&rsquo;s <code>_brand.yml</code> documentation</a>
</li>
</ul>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2025-01-15-quarto-tip-brand-positron/brand.png" length="165176" type="image/png" />
    </item>
    <item>
      <title>Use `meta` &#43; `include` to customize reusable content</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/</link>
      <pubDate>Thu, 12 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/</guid>
      <dc:creator>Ashley Henry</dc:creator><description><![CDATA[<div class="callout callout-tip" role="note" aria-label="Tip">
<div class="callout-header">
<span class="callout-title">Re-posted from posit.co</span>
</div>
<div class="callout-body">
<p>This post was originally published on the <a href="https://posit.co/blog/quarto-meta-shortcode-variables/" target="_blank" rel="noopener">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" target="_blank" rel="noopener">Source</a>
 | <a href="https://examples.quarto.pub/quarto-meta-includes/" target="_blank" rel="noopener">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="https://quarto.org/" target="_blank" rel="noopener">Quarto</a>
 (an open-source technical publishing system), provides an <a href="https://quarto.org/docs/authoring/includes.html" target="_blank" rel="noopener">Includes</a>
 feature (the equivalent of an R Markdown &ldquo;child&rdquo; 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&rsquo;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>
<h2 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. <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>
<h3 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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">In this document, we cover facts that are unique to the state, like the state&#39;s population, its flower, and animal.
</span></span></code></pre></td></tr></table>
</div>
</div><p>This content is general enough to use as each state&rsquo;s introduction but lacks the facts that are unique to each state. So, we could insert the Include into each state&rsquo;s file and then add specific content that is unique to the state:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">title: New York
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">{{&lt; include _snippets/state-intro.qmd &gt;}}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">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><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">The state&#39;s flower is the Rose, as shown below:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">![](images/ny/flower.png)
</span></span></code></pre></td></tr></table>
</div>
</div><h3 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&rsquo;s fact (which introduces a higher risk of making an error), we can use meta variables to insert specific values.</p>
<h3 id="lets-execute">Let&rsquo;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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&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></span></code></pre></td></tr></table>
</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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">title: New York
</span></span><span class="line"><span class="cl">state-abbr: ny
</span></span><span class="line"><span class="cl">state: New York
</span></span><span class="line"><span class="cl">size-rank: 27th
</span></span><span class="line"><span class="cl">square-miles: 54,555
</span></span><span class="line"><span class="cl">population: 19.8 million
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">{{&lt; include _snippets/facts.qmd &gt;}}
</span></span></code></pre></td></tr></table>
</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&rsquo;s YAML.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/images/img1.png" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;" data-fig-align="center" />
<p>But, I would also like to add the state&rsquo;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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&lt; include _snippets/facts.qmd &gt;}}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">New York&#39;s official flower is the Rose:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">![](../images/ny/flower.png)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">And the official animal is the Beaver:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">![](../images/ny/animal.png)
</span></span></code></pre></td></tr></table>
</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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&lt; meta state &gt;}}&#39;s official flower is the {{&lt; meta flower &gt;}}, pictured below:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">![<span class="nt">The official {{&lt; meta state &gt;}} state flower, the {{&lt; meta flower &gt;}}</span>](<span class="na">../images/{{&lt; meta state-abbr &gt;}}/flower.png</span>)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Lastly, {{&lt; meta state &gt;}}&#39;s official animal is the {{&lt; meta animal &gt;}}, pictured below:
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">![<span class="nt">The official {{&lt; meta state &gt;}} state animal, the {{&lt; meta animal &gt;}}</span>](<span class="na">../images/{{&lt; meta state-abbr &gt;}}/animal.png</span>)
</span></span></code></pre></td></tr></table>
</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 &ldquo;ny&rdquo;.</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>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/images/img2.png" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;" data-fig-align="center" />
<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>
<h3 id="the-rendered-example">The rendered example
</h3>
<p>Here is New York&rsquo;s page:</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/images/img3.png" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;" data-fig-align="center" />
<p>Here is Pennsylvania&rsquo;s page:</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/images/img4.png" style="box-shadow: 5px 5px 15px rgba(0, 0, 0, 0.3); border-radius: 5px;" data-fig-align="center" />
<p>Each page was built using a single (shared) file:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&lt; include _snippets/facts.qmd &gt;}}
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="learn-more-about-quarto-includes">Learn more about Quarto Includes
</h2>
<p>Quarto&rsquo;s Includes feature allows you to improve your content creation process by reducing redundancy and maintaining consistency across multiple documents. Whether you&rsquo;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="https://quarto.org/docs/get-started/" target="_blank" rel="noopener">Get Started - Quarto</a>
</li>
<li><a href="https://quarto.org/docs/authoring/includes.html" target="_blank" rel="noopener">Quarto - Includes</a>
</li>
<li><a href="https://quarto.org/docs/authoring/variables.html#meta" target="_blank" rel="noopener">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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-12-12-includes-meta/thumbnail.jpg" length="60237" type="image/jpeg" />
    </item>
    <item>
      <title>Quarto website video series</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-12-04-websites-workshop/</link>
      <pubDate>Wed, 04 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-12-04-websites-workshop/</guid>
      <dc:creator>Charlotte Wickham</dc:creator>
      <dc:creator>Mine Çetinkaya-Rundel</dc:creator><description><![CDATA[<p>Do you need a professional website to showcase your work? If you&rsquo;ve used Quarto to produce a document, you&rsquo;ve already got the technical skills to create a Quarto website. In this video series, taught by <a href="https://www.cwick.co.nz/" target="_blank" rel="noopener">Charlotte Wickham</a>
 and <a href="https://emilhvitfeldt.com/" target="_blank" rel="noopener">Emil Hvitfeldt</a>
, you&rsquo;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" target="_blank" rel="noopener">YouTube Playlist</a>
</p>
<h2 id="quarto-websites-1-build-your-homepage">Quarto Websites 1: Build your homepage
</h2>
<p>In this video, you&rsquo;ll get a running start by using a template we&rsquo;ve designed to be functional and attractive, and that will serve as a foundation for the rest of the video series. You&rsquo;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&rsquo;ll learn one way to publish your website so other people can see it.</p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/l7r24gTEkEY"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Links: <a href="https://quarto.org/docs/websites/website-about.html" target="_blank" rel="noopener">About pages</a>
 | <a href="https://quarto.org/docs/output-formats/html-themes.html#basic-options" target="_blank" rel="noopener">YAML appearance options</a>
</p>
<p>Code: <a href="https://github.com/EmilHvitfeldt/website-template" target="_blank" rel="noopener">Starter</a>
 | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.1" target="_blank" rel="noopener">Final</a>
</p>
<h2 id="quarto-websites-2-add-pages-and-navigation">Quarto Websites 2: Add pages and navigation
</h2>
<p>Now you&rsquo;ve got a homepage, you&rsquo;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="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/k65E-8PXZmA"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Links: <a href="https://icons.getbootstrap.com/" target="_blank" rel="noopener">Bootstrap icons</a>
 | <a href="https://quarto.org/docs/websites/website-navigation.html#top-navigation" target="_blank" rel="noopener">Navigation bar options</a>
 | <a href="https://quarto.org/docs/websites/website-navigation.html" target="_blank" rel="noopener">Quarto website navigation</a>
</p>
<p>Code: <a href="Starter%20source%20code:%20https://github.com/cwickham/quarto-website-video/tree/v0.1">Starter</a>
 | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.2" target="_blank" rel="noopener">Final</a>
</p>
<h2 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&rsquo;ll start by learning the basics of CSS and SCSS and how to make good design choices. Then, you&rsquo;ll see how to apply these choices to your Quarto website.</p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/pAN2Hiq0XGs"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Links: <a href="https://colourcontrast.cc/" target="_blank" rel="noopener">Color contrast checker</a>
 | <a href="https://fonts.google.com/" target="_blank" rel="noopener">Google fonts</a>
</p>
<p>Code: <a href="https://github.com/cwickham/quarto-website-video/tree/v0.2" target="_blank" rel="noopener">Starter</a>
 | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.3" target="_blank" rel="noopener">Final</a>
</p>
<h2 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&rsquo;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="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/bv_Cw-3HI1Y"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Links: <a href="https://quarto.org/docs/websites/website-listings.html" target="_blank" rel="noopener">Listings</a>
 | <a href="https://www.andrewheiss.com/teaching/" target="_blank" rel="noopener">Andrew Heiss&rsquo; teaching listing</a>
</p>
<p>Code: <a href="https://github.com/cwickham/quarto-website-video/tree/v0.3" target="_blank" rel="noopener">Starter</a>
 | <a href="https://github.com/cwickham/quarto-website-video/tree/v0.4" target="_blank" rel="noopener">Final</a>
</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-12-04-websites-workshop/quarto-websites.jpg" length="55926" type="image/jpeg" />
    </item>
    <item>
      <title>Quarto 1.6</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-11-25-1.6-release/</link>
      <pubDate>Mon, 25 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-11-25-1.6-release/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><description><![CDATA[<p>Quarto 1.6 has been officially released! You can get the current release from the <a href="https://quarto.org/docs/download/index.html" target="_blank" rel="noopener">download page</a>
.</p>
<p>We are particularly excited about:</p>
<ul>
<li>
<p>Support for <strong>brand.yml</strong>&mdash;a single file that defines your organization&rsquo;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="https://quarto.org/docs/download/changelog/1.6/" target="_blank" rel="noopener">Release Notes</a>
.</p>
<h2 id="cross-format-theming-with-brandyml">Cross-format theming with <strong>brand.yml</strong>
</h2>
<p><a href="https://posit-dev.github.io/brand-yml/" target="_blank" rel="noopener"><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>
<p><strong>_brand.yml</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">color</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">palette</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">dark-grey</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#222222&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">blue</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;#ddeaf1&#34;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">background</span><span class="p">:</span><span class="w"> </span><span class="l">blue</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">foreground</span><span class="p">:</span><span class="w"> </span><span class="l">dark-grey</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">primary</span><span class="p">:</span><span class="w"> </span><span class="l">black</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">logo</span><span class="p">:</span><span class="w"> 
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">medium</span><span class="p">:</span><span class="w"> </span><span class="l">logo.png</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">typography</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">fonts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">family</span><span class="p">:</span><span class="w"> </span><span class="l">Jura</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">google</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">base</span><span class="p">:</span><span class="w"> </span><span class="l">Jura</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">headings</span><span class="p">:</span><span class="w"> </span><span class="l">Jura</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</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>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://quarto.org/docs/authoring/images/brand-html.png" data-group="brand-formats" data-fig-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." alt="Webpage: html" />
<figcaption aria-hidden="true">Webpage: <code>html</code></figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://quarto.org/docs/authoring/images/brand-dashboard.png" data-group="brand-formats" data-fig-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." alt="Dashboard dashboard" />
<figcaption aria-hidden="true">Dashboard <code>dashboard</code></figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://quarto.org/docs/authoring/images/brand-revealjs.png" data-group="brand-formats" data-fig-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." alt="Presentation: revealjs" />
<figcaption aria-hidden="true">Presentation: <code>revealjs</code></figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://quarto.org/docs/authoring/images/brand-typst.png" data-group="brand-formats" data-fig-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." alt="PDF: typst" />
<figcaption aria-hidden="true">PDF: <code>typst</code></figcaption>
</figure>
</div></td>
</tr>
</tbody>
</table>
<p>View the example: <a href="https://github.com/quarto-dev/quarto-examples/tree/main/brand/brand-simple#brand-simple" target="_blank" rel="noopener">Source</a>
 | <a href="https://examples.quarto.pub/brand-simple" target="_blank" rel="noopener">Live website</a>
</p>
<p>Get started by reading the Quarto <a href="https://quarto.org/docs/authoring/brand.html" target="_blank" rel="noopener">Guide to Brand</a>
.</p>
<h2 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="https://quarto.org/docs/presentations/revealjs/presenting.html#jump-to-slide" target="_blank" rel="noopener"><strong>Jump to Slide</strong></a>
: Quickly navigate to a slide. Press <code>G</code> to activate, type a slide number or ID, and hit Enter/Return.</p>
<p><a href="https://quarto.org/docs/presentations/revealjs/presenting.html#scroll-view" target="_blank" rel="noopener"><strong>Scroll Mode</strong></a>
: Scroll rather than click to advance slides. Press <code>R</code>, add <code>?view=scroll</code> to your URL, or use the Navigation menu to activate. Automatically activated on small screens.</p>
<h2 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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">``<span class="sb">`{python}
</span></span></span><span class="line"><span class="cl"><span class="sb">#| echo: false
</span></span></span><span class="line"><span class="cl"><span class="sb">#| label: a-cell
</span></span></span><span class="line"><span class="cl"><span class="sb">import matplotlib.pyplot as plt
</span></span></span><span class="line"><span class="cl"><span class="sb">plt.plot([1,2,3])
</span></span></span><span class="line"><span class="cl"><span class="sb">`</span>``
</span></span></code></pre></td></tr></table>
</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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">::: callout-note
</span></span><span class="line"><span class="cl"><span class="gu">## Note the following plot
</span></span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">{{&lt; contents a-cell &gt;}}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:::
</span></span></code></pre></td></tr></table>
</div>
</div><p>Find all the details on our guide page on the <a href="https://quarto.org/docs/authoring/contents.html" target="_blank" rel="noopener">contents shortcode</a>
.</p>
<h2 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="https://quarto.org/docs/authoring/article-layout.html#landscape-mode" target="_blank" rel="noopener"><code>landscape</code> block</a>
:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">::: {.landscape}
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">This will appear in landscape.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">:::
</span></span></code></pre></td></tr></table>
</div>
</div><h2 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&rsquo;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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">``<span class="sb">`{{r}}
</span></span></span><span class="line"><span class="cl"><span class="sb">#| label: tbl-example
</span></span></span><span class="line"><span class="cl"><span class="sb">#| tbl-cap: I want these images to be interpreted as Tables.
</span></span></span><span class="line"><span class="cl"><span class="sb">#| tbl-subcap:
</span></span></span><span class="line"><span class="cl"><span class="sb">#|   - This is the subcaption for the first subtable
</span></span></span><span class="line"><span class="cl"><span class="sb">#|   - This is the subcaption for the second subtable
</span></span></span><span class="line"><span class="cl"><span class="sb">plot(1:10)
</span></span></span><span class="line"><span class="cl"><span class="sb">plot(11:20)
</span></span></span><span class="line"><span class="cl"><span class="sb">`</span>``
</span></span></code></pre></td></tr></table>
</div>
</div><figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-11-25-1.6-release/./subcells-and-subfloats.png" class="border" data-fig-alt="Screenshot of a document showing two plots with an overall caption labelled &#39;Table 1&#39;, and each plot with a caption starting &#39;(a)&#39; and &#39;(b)&#39; respectively." alt="The result of executing the above code cell in HTML format" />
<figcaption aria-hidden="true">The result of executing the above code cell in HTML format</figcaption>
</figure>
<h2 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="https://quarto.org/docs/projects/scripts.html#deno-scripts" target="_blank" rel="noopener">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&rsquo;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>
<h2 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" target="_blank" rel="noopener">ArthurData</a>
,
<a href="https://github.com/Blake-Madden" target="_blank" rel="noopener">Blake-Madden</a>
,
<a href="https://github.com/Coding4Sec" target="_blank" rel="noopener">Coding4Sec</a>
,
<a href="https://github.com/EricMarcon" target="_blank" rel="noopener">EricMarcon</a>
,
<a href="https://github.com/Fgazzelloni" target="_blank" rel="noopener">Fgazzelloni</a>
,
<a href="https://github.com/GeorgRamer" target="_blank" rel="noopener">GeorgRamer</a>
,
<a href="https://github.com/Gewerd-Strauss" target="_blank" rel="noopener">Gewerd-Strauss</a>
,
<a href="https://github.com/GuillaumeDehaene" target="_blank" rel="noopener">GuillaumeDehaene</a>
,
<a href="https://github.com/HarunCelikOtto" target="_blank" rel="noopener">HarunCelikOtto</a>
,
<a href="https://github.com/IULibScholComm" target="_blank" rel="noopener">IULibScholComm</a>
,
<a href="https://github.com/IndrajeetPatil" target="_blank" rel="noopener">IndrajeetPatil</a>
,
<a href="https://github.com/LeoLuongVuong" target="_blank" rel="noopener">LeoLuongVuong</a>
,
<a href="https://github.com/MarcellGranat" target="_blank" rel="noopener">MarcellGranat</a>
,
<a href="https://github.com/Mavoort" target="_blank" rel="noopener">Mavoort</a>
,
<a href="https://github.com/Nenuial" target="_blank" rel="noopener">Nenuial</a>
,
<a href="https://github.com/PeteArm" target="_blank" rel="noopener">PeteArm</a>
,
<a href="https://github.com/ShixiangWang" target="_blank" rel="noopener">ShixiangWang</a>
,
<a href="https://github.com/Steinthal" target="_blank" rel="noopener">Steinthal</a>
,
<a href="https://github.com/Walser52" target="_blank" rel="noopener">Walser52</a>
,
<a href="https://github.com/Xinenomine" target="_blank" rel="noopener">Xinenomine</a>
,
<a href="https://github.com/abbyruthe" target="_blank" rel="noopener">abbyruthe</a>
,
<a href="https://github.com/aborruso" target="_blank" rel="noopener">aborruso</a>
,
<a href="https://github.com/adamblake" target="_blank" rel="noopener">adamblake</a>
,
<a href="https://github.com/albert-ying" target="_blank" rel="noopener">albert-ying</a>
,
<a href="https://github.com/alecloudenback" target="_blank" rel="noopener">alecloudenback</a>
,
<a href="https://github.com/allefeld" target="_blank" rel="noopener">allefeld</a>
,
<a href="https://github.com/aronatkins" target="_blank" rel="noopener">aronatkins</a>
,
<a href="https://github.com/arthur-shaw" target="_blank" rel="noopener">arthur-shaw</a>
,
<a href="https://github.com/astrowonk" target="_blank" rel="noopener">astrowonk</a>
,
<a href="https://github.com/avras" target="_blank" rel="noopener">avras</a>
,
<a href="https://github.com/baker-jr-john" target="_blank" rel="noopener">baker-jr-john</a>
,
<a href="https://github.com/bcm0" target="_blank" rel="noopener">bcm0</a>
,
<a href="https://github.com/blackerby" target="_blank" rel="noopener">blackerby</a>
,
<a href="https://github.com/boshek" target="_blank" rel="noopener">boshek</a>
,
<a href="https://github.com/brandonmontez" target="_blank" rel="noopener">brandonmontez</a>
,
<a href="https://github.com/brianmsm" target="_blank" rel="noopener">brianmsm</a>
,
<a href="https://github.com/bryanhanson" target="_blank" rel="noopener">bryanhanson</a>
,
<a href="https://github.com/carschandler" target="_blank" rel="noopener">carschandler</a>
,
<a href="https://github.com/castedo" target="_blank" rel="noopener">castedo</a>
,
<a href="https://github.com/chaz-clark" target="_blank" rel="noopener">chaz-clark</a>
,
<a href="https://github.com/christopherkenny" target="_blank" rel="noopener">christopherkenny</a>
,
<a href="https://github.com/coatless" target="_blank" rel="noopener">coatless</a>
,
<a href="https://github.com/d-morrison" target="_blank" rel="noopener">d-morrison</a>
,
<a href="https://github.com/danieltomasz" target="_blank" rel="noopener">danieltomasz</a>
,
<a href="https://github.com/daxkellie" target="_blank" rel="noopener">daxkellie</a>
,
<a href="https://github.com/ddlawton" target="_blank" rel="noopener">ddlawton</a>
,
<a href="https://github.com/debruine" target="_blank" rel="noopener">debruine</a>
,
<a href="https://github.com/dsbitor" target="_blank" rel="noopener">dsbitor</a>
,
<a href="https://github.com/e-miz" target="_blank" rel="noopener">e-miz</a>
,
<a href="https://github.com/eculler" target="_blank" rel="noopener">eculler</a>
,
<a href="https://github.com/edavidaja" target="_blank" rel="noopener">edavidaja</a>
,
<a href="https://github.com/edvinsyk" target="_blank" rel="noopener">edvinsyk</a>
,
<a href="https://github.com/eitsupi" target="_blank" rel="noopener">eitsupi</a>
,
<a href="https://github.com/ethanwhite" target="_blank" rel="noopener">ethanwhite</a>
,
<a href="https://github.com/fermarsan" target="_blank" rel="noopener">fermarsan</a>
,
<a href="https://github.com/floesche" target="_blank" rel="noopener">floesche</a>
,
<a href="https://github.com/fradav" target="_blank" rel="noopener">fradav</a>
,
<a href="https://github.com/fredguth" target="_blank" rel="noopener">fredguth</a>
,
<a href="https://github.com/gadenbuie" target="_blank" rel="noopener">gadenbuie</a>
,
<a href="https://github.com/georgestagg" target="_blank" rel="noopener">georgestagg</a>
,
<a href="https://github.com/apps/github-actions" target="_blank" rel="noopener">github-actions[bot]</a>
,
<a href="https://github.com/halleysfifthinc" target="_blank" rel="noopener">halleysfifthinc</a>
,
<a href="https://github.com/hamelsmu" target="_blank" rel="noopener">hamelsmu</a>
,
<a href="https://github.com/hansfn" target="_blank" rel="noopener">hansfn</a>
,
<a href="https://github.com/harrylojames" target="_blank" rel="noopener">harrylojames</a>
,
<a href="https://github.com/hodgesmr" target="_blank" rel="noopener">hodgesmr</a>
,
<a href="https://github.com/holtzy" target="_blank" rel="noopener">holtzy</a>
,
<a href="https://github.com/hugetim" target="_blank" rel="noopener">hugetim</a>
,
<a href="https://github.com/hurak" target="_blank" rel="noopener">hurak</a>
,
<a href="https://github.com/iagopinal" target="_blank" rel="noopener">iagopinal</a>
,
<a href="https://github.com/isabelizimm" target="_blank" rel="noopener">isabelizimm</a>
,
<a href="https://github.com/itsmevictor" target="_blank" rel="noopener">itsmevictor</a>
,
<a href="https://github.com/jameslairdsmith" target="_blank" rel="noopener">jameslairdsmith</a>
,
<a href="https://github.com/javajon" target="_blank" rel="noopener">javajon</a>
,
<a href="https://github.com/jchiquet" target="_blank" rel="noopener">jchiquet</a>
,
<a href="https://github.com/jdfoote" target="_blank" rel="noopener">jdfoote</a>
,
<a href="https://github.com/jido" target="_blank" rel="noopener">jido</a>
,
<a href="https://github.com/jimjam-slam" target="_blank" rel="noopener">jimjam-slam</a>
,
<a href="https://github.com/jkrumbiegel" target="_blank" rel="noopener">jkrumbiegel</a>
,
<a href="https://github.com/jmgirard" target="_blank" rel="noopener">jmgirard</a>
,
<a href="https://github.com/jmhammond" target="_blank" rel="noopener">jmhammond</a>
,
<a href="https://github.com/joelostblom" target="_blank" rel="noopener">joelostblom</a>
,
<a href="https://github.com/johannes-menzel" target="_blank" rel="noopener">johannes-menzel</a>
,
<a href="https://github.com/juliantao" target="_blank" rel="noopener">juliantao</a>
,
<a href="https://github.com/jvcarli" target="_blank" rel="noopener">jvcarli</a>
,
<a href="https://github.com/kazuyanagimoto" target="_blank" rel="noopener">kazuyanagimoto</a>
,
<a href="https://github.com/kbvernon" target="_blank" rel="noopener">kbvernon</a>
,
<a href="https://github.com/kdheepak" target="_blank" rel="noopener">kdheepak</a>
,
<a href="https://github.com/kjohnsen" target="_blank" rel="noopener">kjohnsen</a>
,
<a href="https://github.com/lballabio" target="_blank" rel="noopener">lballabio</a>
,
<a href="https://github.com/leovan" target="_blank" rel="noopener">leovan</a>
,
<a href="https://github.com/loneguardian" target="_blank" rel="noopener">loneguardian</a>
,
<a href="https://github.com/longapalooza" target="_blank" rel="noopener">longapalooza</a>
,
<a href="https://github.com/lucacasonato" target="_blank" rel="noopener">lucacasonato</a>
,
<a href="https://github.com/lukmanaj" target="_blank" rel="noopener">lukmanaj</a>
,
<a href="https://github.com/lwjohnst86" target="_blank" rel="noopener">lwjohnst86</a>
,
<a href="https://github.com/machow" target="_blank" rel="noopener">machow</a>
,
<a href="https://github.com/maelle" target="_blank" rel="noopener">maelle</a>
,
<a href="https://github.com/masud90" target="_blank" rel="noopener">masud90</a>
,
<a href="https://github.com/melaniewalsh" target="_blank" rel="noopener">melaniewalsh</a>
,
<a href="https://github.com/mfisher87" target="_blank" rel="noopener">mfisher87</a>
,
<a href="https://github.com/mipmip" target="_blank" rel="noopener">mipmip</a>
,
<a href="https://github.com/mitzimorris" target="_blank" rel="noopener">mitzimorris</a>
,
<a href="https://github.com/mpr1255" target="_blank" rel="noopener">mpr1255</a>
,
<a href="https://github.com/nessan" target="_blank" rel="noopener">nessan</a>
,
<a href="https://github.com/neuwirthe" target="_blank" rel="noopener">neuwirthe</a>
,
<a href="https://github.com/nichtich" target="_blank" rel="noopener">nichtich</a>
,
<a href="https://github.com/njericha" target="_blank" rel="noopener">njericha</a>
,
<a href="https://github.com/nsarang" target="_blank" rel="noopener">nsarang</a>
,
<a href="https://github.com/olivroy" target="_blank" rel="noopener">olivroy</a>
,
<a href="https://github.com/ozanozbeker" target="_blank" rel="noopener">ozanozbeker</a>
,
<a href="https://github.com/paciorek" target="_blank" rel="noopener">paciorek</a>
,
<a href="https://github.com/pagiraud" target="_blank" rel="noopener">pagiraud</a>
,
<a href="https://github.com/parmsam" target="_blank" rel="noopener">parmsam</a>
,
<a href="https://github.com/pedrohbraga" target="_blank" rel="noopener">pedrohbraga</a>
,
<a href="https://github.com/peteole" target="_blank" rel="noopener">peteole</a>
,
<a href="https://github.com/produnis" target="_blank" rel="noopener">produnis</a>
,
<a href="https://github.com/raffaem" target="_blank" rel="noopener">raffaem</a>
,
<a href="https://github.com/ryarazi" target="_blank" rel="noopener">ryarazi</a>
,
<a href="https://github.com/ryjohnson09" target="_blank" rel="noopener">ryjohnson09</a>
,
<a href="https://github.com/s2t2" target="_blank" rel="noopener">s2t2</a>
,
<a href="https://github.com/salim-b" target="_blank" rel="noopener">salim-b</a>
,
<a href="https://github.com/samlalwani" target="_blank" rel="noopener">samlalwani</a>
,
<a href="https://github.com/sgelzenleuchter" target="_blank" rel="noopener">sgelzenleuchter</a>
,
<a href="https://github.com/skriptum" target="_blank" rel="noopener">skriptum</a>
,
<a href="https://github.com/snhansen" target="_blank" rel="noopener">snhansen</a>
,
<a href="https://github.com/stragu" target="_blank" rel="noopener">stragu</a>
,
<a href="https://github.com/sun123zxy" target="_blank" rel="noopener">sun123zxy</a>
,
<a href="https://github.com/sverrirarnors" target="_blank" rel="noopener">sverrirarnors</a>
,
<a href="https://github.com/topepo" target="_blank" rel="noopener">topepo</a>
,
<a href="https://github.com/truecluster" target="_blank" rel="noopener">truecluster</a>
,
<a href="https://github.com/tylere" target="_blank" rel="noopener">tylere</a>
,
<a href="https://github.com/winniehell" target="_blank" rel="noopener">winniehell</a>
,
<a href="https://github.com/xtimbeau" target="_blank" rel="noopener">xtimbeau</a>
,
<a href="https://github.com/yogabonito" target="_blank" rel="noopener">yogabonito</a>
,
<a href="https://github.com/yurivict" target="_blank" rel="noopener">yurivict</a>
,
<a href="https://github.com/yves-amevoin" target="_blank" rel="noopener">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>&ndash; 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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-11-25-1.6-release/thumbnail.png" length="72949" type="image/png" />
    </item>
    <item>
      <title>Quarto dashboards video series</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-11-22-dashboards-workshop/</link>
      <pubDate>Fri, 22 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-11-22-dashboards-workshop/</guid>
      <dc:creator>Charlotte Wickham</dc:creator>
      <dc:creator>Mine Çetinkaya-Rundel</dc:creator><description><![CDATA[<p>If you&rsquo;ve been looking to get your head around Quarto dashboards,
check out the Quarto dashboards video series by <a href="https://mine-cr.com/" target="_blank" rel="noopener">Mine Çetinkaya-Rundel</a>
.</p>
<p>Materials: <a href="https://youtube.com/playlist?list=PLitrm9UndxcsapDsLimKGn3dEjQZy5vYs&amp;si=oLK2D1PuyF9MKVon" target="_blank" rel="noopener">YouTube playlist</a>
 | <a href="https://mine.quarto.pub/quarto-dashboards/" target="_blank" rel="noopener">Slides</a>
 | <a href="https://github.com/mine-cetinkaya-rundel/olympicdash" target="_blank" rel="noopener">Starter code</a>
</p>
<h2 id="1-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" target="_blank" rel="noopener">Slides</a>
</p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/HW7QbqI4fH0"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<h2 id="2-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" target="_blank" rel="noopener">Slides</a>
</p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/KdsQgwaY950"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<h2 id="3-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" target="_blank" rel="noopener">Slides</a>
</p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/NigWSB-jG4Y"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-11-22-dashboards-workshop/quarto-dashboards.jpg" length="80578" type="image/jpeg" />
    </item>
    <item>
      <title>posit::conf(2024) Quarto talks</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-11-06-conf-talks/</link>
      <pubDate>Wed, 06 Nov 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-11-06-conf-talks/</guid>
      <dc:creator>Mine Çetinkaya-Rundel and Charlotte Wickham</dc:creator><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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">Updates from Posit, with Hadley Wickham, Charlotte Wickham, George Stagg, and James Blair</a>
</li>
<li><a href="https://youtu.be/KqLxy66B3lQ?si=fe1zVCBozVmWKufO" target="_blank" rel="noopener">Andrew Bray - Closeread: bringing Scrollytelling to Quarto</a>
</li>
<li><a href="https://youtu.be/VJEBg1Ke0lE?si=LUMa5-IF3gWORr3I" target="_blank" rel="noopener">Meghan Hall - Designing and Deploying Internal Quarto Templates</a>
</li>
<li><a href="https://youtu.be/bp1SMhLoz_M?si=tyvyO-FP0AEBV6W2" target="_blank" rel="noopener">David Keyes - Report Design in R: Small Tweaks that Make a Big Difference</a>
</li>
<li><a href="https://youtu.be/fsfoqpQYN2k?si=sDUOZTEBXvXLNVHq" target="_blank" rel="noopener">Mine Çetinkaya-Rundel - Reproducible, dynamic, and elegant books with Quarto</a>
</li>
<li><a href="https://youtu.be/4zy9R26B8kk?si=rO_5BIjTC3ENVC2c" target="_blank" rel="noopener">Cynthia Huang - Quarto for Knowledge Management</a>
</li>
<li><a href="https://youtu.be/UOMcGBMvVdo?si=yo3dFtWScKn06iXy" target="_blank" rel="noopener">Regina Lionheart - Making Waves with R, Python, and Quarto</a>
</li>
<li><a href="https://youtu.be/PITfti4JRiU?si=TMi-CJOi04zViU_p" target="_blank" rel="noopener">Joshua Cook - Quarto: A Multifaceted Publishing Powerhouse for Medical Researchers</a>
</li>
<li><a href="https://youtu.be/U8_Dc_ru8fg?si=-fEK5Ou57f-QhSba" target="_blank" rel="noopener">Tyler Morgan-Wall - Quarto, AI, and the Art of Getting Your Life Back</a>
</li>
<li><a href="https://youtu.be/fzykFa6c3LI?si=wV83nh1WvctfRAiu" target="_blank" rel="noopener">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" target="_blank" rel="noopener">Richie Moluno - JSquarto: Bridging JavaScript Documentation with Quarto&rsquo;s Power</a>
</li>
<li><a href="https://youtu.be/1gUl-vWqScc?si=nLEJ8JsLzBv8UqqT" target="_blank" rel="noopener">Mika Braginsky - DataPages for interactive data sharing using Quarto</a>
</li>
<li><a href="https://youtu.be/ceW3nQssV88?si=caHnzvBHorxWFn00" target="_blank" rel="noopener">Brennan Antone - Democratizing Organizational Surveys with Quarto and Shiny</a>
</li>
</ul>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-11-06-conf-talks/images/thumbnail.jpg" length="176419" type="image/jpeg" />
    </item>
    <item>
      <title>posit::conf(2024) Quarto workshop materials</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/</link>
      <pubDate>Tue, 15 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/</guid>
      <dc:creator>Mine Çetinkaya-Rundel and Charlotte Wickham</dc:creator><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&rsquo;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/" target="_blank" rel="noopener">CC BY-SA 4.0</a>
 license.</p>
<table>
<colgroup>
<col style="width: 70%" />
<col style="width: 30%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="70.0%" data-layout-align="left">
<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></td>
<td style="text-align: center;"><div width="30.0%" data-layout-align="center">
<p><a href="https://posit-conf-2024.github.io/quarto-intro/"><img src="https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/images/intro.png" data-fig-alt="Illustration of a seaplane." /></a></p>
</div></td>
</tr>
</tbody>
</table>
<table>
<colgroup>
<col style="width: 70%" />
<col style="width: 30%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="70.0%" data-layout-align="left">
<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></td>
<td style="text-align: center;"><div width="30.0%" data-layout-align="center">
<p><a href="https://posit-conf-2024.github.io/quarto-dashboards/"><img src="https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/images/dashboards.png" data-fig-alt="An illustration of a dashboard made with Quarto" /></a></p>
</div></td>
</tr>
</tbody>
</table>
<table>
<colgroup>
<col style="width: 70%" />
<col style="width: 30%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="70.0%" data-layout-align="left">
<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></td>
<td style="text-align: center;"><div width="30.0%" data-layout-align="center">
<p><a href="https://posit-conf-2024.github.io/quarto-websites/"><img src="https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/images/websites.png" data-fig-alt="A diagram showing switching between navbar and sidebar navigation for a Quarto website." /></a></p>
</div></td>
</tr>
</tbody>
</table>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-10-15-conf-workshops-materials/images/thumbnail.png" length="747217" type="image/png" />
    </item>
    <item>
      <title>Quarto 1.5</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/</link>
      <pubDate>Thu, 11 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><description><![CDATA[<p>Quarto 1.5 is out! You can find the current release on the <a href="https://quarto.org/docs/download/index.html" target="_blank" rel="noopener">download page</a>
.</p>
<p>Below, we&rsquo;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="https://quarto.org/docs/download/changelog/1.5/" target="_blank" rel="noopener">Release Notes</a>
.</p>
<h2 id="typst-css">Typst CSS
</h2>
<p>We&rsquo;ve already blogged about one feature that is now available in 1.5: <a href="https://quarto.org/docs/blog/posts/2024-07-02-beautiful-tables-in-typst/" target="_blank" rel="noopener">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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">Here is a [span with a green background]{style=&#34;background-color:green&#34;}.
</span></span></code></pre></td></tr></table>
</div>
</div><p>You can read more about using CSS in Typst at <a href="https://quarto.org/docs/output-formats/typst.html#typst-css" target="_blank" rel="noopener">Typst Basics: Typst CSS</a>
.</p>
<h2 id="improved-website-draft-support">Improved Website Draft Support
</h2>
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/images/website-drafts-banner.png" class="border" data-fig-alt="Screenshot of a post titled &#39;Post With Code&#39;, displaying a banner at the top of the page titled &#39;Draft&#39;." alt="A draft post with the new draft banner" />
<figcaption aria-hidden="true">A <code>draft</code> post with the new draft banner</figcaption>
</figure>
<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="https://quarto.org/docs/websites/website-drafts.html" target="_blank" rel="noopener">Website Drafts</a>
.</p>
<h2 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>
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/images/website-announcement.png" data-fig-alt="Screenshot of the quarto documentation showing a blue bar below the navbar, starting with the text &#39;Alert:...&#39;." alt="An example announcement bar" />
<figcaption aria-hidden="true">An example announcement bar</figcaption>
</figure>
<p>Read about your options at <a href="https://quarto.org/docs/websites/website-tools.html#announcement-bar" target="_blank" rel="noopener">Website Tools: Announcement Bar</a>
.</p>
<h2 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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">title</span><span class="p">:</span><span class="w"> </span><span class="l">Julia without Jupyter</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">engine</span><span class="p">:</span><span class="w"> </span><span class="l">julia</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nn">---</span><span class="w">
</span></span></span></code></pre></td></tr></table>
</div>
</div><p>Read about the details in <a href="https://quarto.org/docs/computations/julia.html#using-the-julia-engine" target="_blank" rel="noopener">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" target="_blank" rel="noopener">@jkrumbiegel</a>
!</p>
<h2 id="placeholder-shortcodes">Placeholder Shortcodes
</h2>
<p>We&rsquo;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="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&lt; placeholder 400 200 format=svg &gt;}}
</span></span><span class="line"><span class="cl">{{&lt; lipsum 1 &gt;}}
</span></span></code></pre></td></tr></table>
</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" target="_blank" rel="noopener">Lorem Ipsum</a>
 text:</p>
<p><div class="not-prose"><figure>
    <img class="h-auto max-w-full rounded-lg"
      src="https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/data:image/svg&#43;xml;base64,PHN2ZyB3aWR0aCA9ICI0MDAiIGhlaWdodCA9ICIyMDAiIHhtbG5zID0gImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94ID0gIjAgMCA0MDAgMjAwIj48cmVjdCB3aWR0aCA9ICI0MDAiIGhlaWdodCA9ICIyMDAiIGZpbGwgPSAiI2RkZCIgLz48dGV4dCB4ID0gIjUwJSIgeSA9ICI1MCUiIGZvbnQtZmFtaWx5ID0gInNhbnMtc2VyaWYiIGZvbnQtc2l6ZSA9ICIyMCIgZmlsbCA9ICIjMDAwIiB0ZXh0LWFuY2hvciA9ICJtaWRkbGUiPjQwMCB4IDIwMDwvdGV4dD48L3N2Zz4="
      alt="" 
      loading="lazy"
    >
  </figure></div>
</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>
<p>Read more about their options at <a href="https://quarto.org/docs/authoring/placeholder.html" target="_blank" rel="noopener">Placeholder Images</a>
 and <a href="https://quarto.org/docs/authoring/lipsum.html" target="_blank" rel="noopener">Placeholder Text</a>
.</p>
<h2 id="acknowledgements">Acknowledgements
</h2>
<p>Finally, we&rsquo;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" target="_blank" rel="noopener">AaronGullickson</a>
, <a href="https://github.com/abduazizR" target="_blank" rel="noopener">abduazizR</a>
, <a href="https://github.com/aborruso" target="_blank" rel="noopener">aborruso</a>
, <a href="https://github.com/AdaemmerP" target="_blank" rel="noopener">AdaemmerP</a>
, <a href="https://github.com/adamalfredsson" target="_blank" rel="noopener">adamalfredsson</a>
, <a href="https://github.com/adamulrich" target="_blank" rel="noopener">adamulrich</a>
, <a href="https://github.com/aghaynes" target="_blank" rel="noopener">aghaynes</a>
, <a href="https://github.com/ALanguillaume" target="_blank" rel="noopener">ALanguillaume</a>
, <a href="https://github.com/AlbertRapp" target="_blank" rel="noopener">AlbertRapp</a>
, <a href="https://github.com/allefeld" target="_blank" rel="noopener">allefeld</a>
, <a href="https://github.com/AndreiBiziuk" target="_blank" rel="noopener">AndreiBiziuk</a>
, <a href="https://github.com/andrie" target="_blank" rel="noopener">andrie</a>
, <a href="https://github.com/anhi" target="_blank" rel="noopener">anhi</a>
, <a href="https://github.com/aravezskinteeth" target="_blank" rel="noopener">aravezskinteeth</a>
, <a href="https://github.com/arnaudgallou" target="_blank" rel="noopener">arnaudgallou</a>
, <a href="https://github.com/aronatkins" target="_blank" rel="noopener">aronatkins</a>
, <a href="https://github.com/ArthurAndrews" target="_blank" rel="noopener">ArthurAndrews</a>
, <a href="https://github.com/arvindvenkatadri" target="_blank" rel="noopener">arvindvenkatadri</a>
, <a href="https://github.com/AshleyHenry15" target="_blank" rel="noopener">AshleyHenry15</a>
, <a href="https://github.com/averms" target="_blank" rel="noopener">averms</a>
, <a href="https://github.com/awhol1" target="_blank" rel="noopener">awhol1</a>
, <a href="https://github.com/batpigandme" target="_blank" rel="noopener">batpigandme</a>
, <a href="https://github.com/bcdavasconcelos" target="_blank" rel="noopener">bcdavasconcelos</a>
, <a href="https://github.com/bhattmaulik" target="_blank" rel="noopener">bhattmaulik</a>
, <a href="https://github.com/bhogan-mitre" target="_blank" rel="noopener">bhogan-mitre</a>
, <a href="https://github.com/billgeo" target="_blank" rel="noopener">billgeo</a>
, <a href="https://github.com/BradyAJohnston" target="_blank" rel="noopener">BradyAJohnston</a>
, <a href="https://github.com/cameronraysmith" target="_blank" rel="noopener">cameronraysmith</a>
, <a href="https://github.com/CeresBarros" target="_blank" rel="noopener">CeresBarros</a>
, <a href="https://github.com/christian-million" target="_blank" rel="noopener">christian-million</a>
, <a href="https://github.com/cpcloud" target="_blank" rel="noopener">cpcloud</a>
, <a href="https://github.com/daslu" target="_blank" rel="noopener">daslu</a>
, <a href="https://github.com/davidkane9" target="_blank" rel="noopener">davidkane9</a>
, <a href="https://github.com/debdagybra" target="_blank" rel="noopener">debdagybra</a>
, <a href="https://github.com/dfolio" target="_blank" rel="noopener">dfolio</a>
, <a href="https://github.com/dhodge180" target="_blank" rel="noopener">dhodge180</a>
, <a href="https://github.com/dmbates" target="_blank" rel="noopener">dmbates</a>
, <a href="https://github.com/drtingtp" target="_blank" rel="noopener">drtingtp</a>
, <a href="https://github.com/eitsupi" target="_blank" rel="noopener">eitsupi</a>
, <a href="https://github.com/eyayaw" target="_blank" rel="noopener">eyayaw</a>
, <a href="https://github.com/FabienSe" target="_blank" rel="noopener">FabienSe</a>
, <a href="https://github.com/fernandortdias" target="_blank" rel="noopener">fernandortdias</a>
, <a href="https://github.com/fkgruber" target="_blank" rel="noopener">fkgruber</a>
, <a href="https://github.com/ForceBru" target="_blank" rel="noopener">ForceBru</a>
, <a href="https://github.com/gcgbarbosa" target="_blank" rel="noopener">gcgbarbosa</a>
, <a href="https://github.com/gimmiereddy" target="_blank" rel="noopener">gimmiereddy</a>
, <a href="https://github.com/gl-eb" target="_blank" rel="noopener">gl-eb</a>
, <a href="https://github.com/gregswinehart" target="_blank" rel="noopener">gregswinehart</a>
, <a href="https://github.com/guilhermegarcia" target="_blank" rel="noopener">guilhermegarcia</a>
, <a href="https://github.com/GuillaumeDehaene" target="_blank" rel="noopener">GuillaumeDehaene</a>
, <a href="https://github.com/hadley" target="_blank" rel="noopener">hadley</a>
, <a href="https://github.com/has2k1" target="_blank" rel="noopener">has2k1</a>
, <a href="https://github.com/Hemken" target="_blank" rel="noopener">Hemken</a>
, <a href="https://github.com/hervyqa" target="_blank" rel="noopener">hervyqa</a>
, <a href="https://github.com/hewag1975" target="_blank" rel="noopener">hewag1975</a>
, <a href="https://github.com/hughjonesd" target="_blank" rel="noopener">hughjonesd</a>
, <a href="https://github.com/iandol" target="_blank" rel="noopener">iandol</a>
, <a href="https://github.com/IULibScholComm" target="_blank" rel="noopener">IULibScholComm</a>
, <a href="https://github.com/j-horak" target="_blank" rel="noopener">j-horak</a>
, <a href="https://github.com/jackgerrits" target="_blank" rel="noopener">jackgerrits</a>
, <a href="https://github.com/jasonpott" target="_blank" rel="noopener">jasonpott</a>
, <a href="https://github.com/jcheng5" target="_blank" rel="noopener">jcheng5</a>
, <a href="https://github.com/jdossgollin" target="_blank" rel="noopener">jdossgollin</a>
, <a href="https://github.com/jebyrnes" target="_blank" rel="noopener">jebyrnes</a>
, <a href="https://github.com/jimgar" target="_blank" rel="noopener">jimgar</a>
, <a href="https://github.com/jimjam-slam" target="_blank" rel="noopener">jimjam-slam</a>
, <a href="https://github.com/jkrumbiegel" target="_blank" rel="noopener">jkrumbiegel</a>
, <a href="https://github.com/jobrachem" target="_blank" rel="noopener">jobrachem</a>
, <a href="https://github.com/jolars" target="_blank" rel="noopener">jolars</a>
, <a href="https://github.com/jonpeake" target="_blank" rel="noopener">jonpeake</a>
, <a href="https://github.com/jrob95" target="_blank" rel="noopener">jrob95</a>
, <a href="https://github.com/jrtheobald" target="_blank" rel="noopener">jrtheobald</a>
, <a href="https://github.com/juliantao" target="_blank" rel="noopener">juliantao</a>
, <a href="https://github.com/JulienGAMartin" target="_blank" rel="noopener">JulienGAMartin</a>
, <a href="https://github.com/justinaskav" target="_blank" rel="noopener">justinaskav</a>
, <a href="https://github.com/kadykov" target="_blank" rel="noopener">kadykov</a>
, <a href="https://github.com/KaiWaldrant" target="_blank" rel="noopener">KaiWaldrant</a>
, <a href="https://github.com/kdheepak" target="_blank" rel="noopener">kdheepak</a>
, <a href="https://github.com/kkaja123" target="_blank" rel="noopener">kkaja123</a>
, <a href="https://github.com/kletts" target="_blank" rel="noopener">kletts</a>
, <a href="https://github.com/kompre" target="_blank" rel="noopener">kompre</a>
, <a href="https://github.com/krishaamer" target="_blank" rel="noopener">krishaamer</a>
, <a href="https://github.com/lamurian" target="_blank" rel="noopener">lamurian</a>
, <a href="https://github.com/Lextuga007" target="_blank" rel="noopener">Lextuga007</a>
, <a href="https://github.com/li-yq" target="_blank" rel="noopener">li-yq</a>
, <a href="https://github.com/libjohn" target="_blank" rel="noopener">libjohn</a>
, <a href="https://github.com/liyongg" target="_blank" rel="noopener">liyongg</a>
, <a href="https://github.com/loreabad6" target="_blank" rel="noopener">loreabad6</a>
, <a href="https://github.com/Luc-UMass" target="_blank" rel="noopener">Luc-UMass</a>
, <a href="https://github.com/lwjohnst86" target="_blank" rel="noopener">lwjohnst86</a>
, <a href="https://github.com/m-clark" target="_blank" rel="noopener">m-clark</a>
, <a href="https://github.com/m-delem" target="_blank" rel="noopener">m-delem</a>
, <a href="https://github.com/MarcoPortmann" target="_blank" rel="noopener">MarcoPortmann</a>
, <a href="https://github.com/marklhc" target="_blank" rel="noopener">marklhc</a>
, <a href="https://github.com/martinscripts" target="_blank" rel="noopener">martinscripts</a>
, <a href="https://github.com/memeplex" target="_blank" rel="noopener">memeplex</a>
, <a href="https://github.com/MHellmund" target="_blank" rel="noopener">MHellmund</a>
, <a href="https://github.com/mhollanders" target="_blank" rel="noopener">mhollanders</a>
, <a href="https://github.com/mine-cetinkaya-rundel" target="_blank" rel="noopener">mine-cetinkaya-rundel</a>
, <a href="https://github.com/MKDJr" target="_blank" rel="noopener">MKDJr</a>
, <a href="https://github.com/mroberts1" target="_blank" rel="noopener">mroberts1</a>
, <a href="https://github.com/mvuorre" target="_blank" rel="noopener">mvuorre</a>
, <a href="https://github.com/mwouts" target="_blank" rel="noopener">mwouts</a>
, <a href="https://github.com/ncclementi" target="_blank" rel="noopener">ncclementi</a>
, <a href="https://github.com/ncworstell" target="_blank" rel="noopener">ncworstell</a>
, <a href="https://github.com/nealrichardson" target="_blank" rel="noopener">nealrichardson</a>
, <a href="https://github.com/Nesper94" target="_blank" rel="noopener">Nesper94</a>
, <a href="https://github.com/nickvigilante" target="_blank" rel="noopener">nickvigilante</a>
, <a href="https://github.com/nmalkin" target="_blank" rel="noopener">nmalkin</a>
, <a href="https://github.com/NMarkgraf" target="_blank" rel="noopener">NMarkgraf</a>
, <a href="https://github.com/nrichers" target="_blank" rel="noopener">nrichers</a>
, <a href="https://github.com/olivroy" target="_blank" rel="noopener">olivroy</a>
, <a href="https://github.com/ozanozbeker" target="_blank" rel="noopener">ozanozbeker</a>
, <a href="https://github.com/pagiraud" target="_blank" rel="noopener">pagiraud</a>
, <a href="https://github.com/pastorn" target="_blank" rel="noopener">pastorn</a>
, <a href="https://github.com/pbousquets" target="_blank" rel="noopener">pbousquets</a>
, <a href="https://github.com/pem725" target="_blank" rel="noopener">pem725</a>
, <a href="https://github.com/petrbouchal" target="_blank" rel="noopener">petrbouchal</a>
, <a href="https://github.com/pgseye" target="_blank" rel="noopener">pgseye</a>
, <a href="https://github.com/pingumops" target="_blank" rel="noopener">pingumops</a>
, <a href="https://github.com/pmoris" target="_blank" rel="noopener">pmoris</a>
, <a href="https://github.com/pschloss" target="_blank" rel="noopener">pschloss</a>
, <a href="https://github.com/rafaelorozco" target="_blank" rel="noopener">rafaelorozco</a>
, <a href="https://github.com/rastrau" target="_blank" rel="noopener">rastrau</a>
, <a href="https://github.com/RegalPlatypus" target="_blank" rel="noopener">RegalPlatypus</a>
, <a href="https://github.com/rgaiacs" target="_blank" rel="noopener">rgaiacs</a>
, <a href="https://github.com/Robinlovelace" target="_blank" rel="noopener">Robinlovelace</a>
, <a href="https://github.com/robolyst" target="_blank" rel="noopener">robolyst</a>
, <a href="https://github.com/royfrancis" target="_blank" rel="noopener">royfrancis</a>
, <a href="https://github.com/rpchastain" target="_blank" rel="noopener">rpchastain</a>
, <a href="https://github.com/sapphire008" target="_blank" rel="noopener">sapphire008</a>
, <a href="https://github.com/schrammelj" target="_blank" rel="noopener">schrammelj</a>
, <a href="https://github.com/sinamoghimi73" target="_blank" rel="noopener">sinamoghimi73</a>
, <a href="https://github.com/statik" target="_blank" rel="noopener">statik</a>
, <a href="https://github.com/stevengogogo" target="_blank" rel="noopener">stevengogogo</a>
, <a href="https://github.com/sun123zxy" target="_blank" rel="noopener">sun123zxy</a>
, <a href="https://github.com/szsctt" target="_blank" rel="noopener">szsctt</a>
, <a href="https://github.com/teecrow" target="_blank" rel="noopener">teecrow</a>
, <a href="https://github.com/the-solipsist" target="_blank" rel="noopener">the-solipsist</a>
, <a href="https://github.com/TomBener" target="_blank" rel="noopener">TomBener</a>
, <a href="https://github.com/ttalVlatt" target="_blank" rel="noopener">ttalVlatt</a>
, <a href="https://github.com/tvroylandt" target="_blank" rel="noopener">tvroylandt</a>
, <a href="https://github.com/tylermorganwall" target="_blank" rel="noopener">tylermorganwall</a>
, <a href="https://github.com/Unco3892" target="_blank" rel="noopener">Unco3892</a>
, <a href="https://github.com/Vinnie-Palazeti" target="_blank" rel="noopener">Vinnie-Palazeti</a>
, <a href="https://github.com/WardBrian" target="_blank" rel="noopener">WardBrian</a>
, <a href="https://github.com/wjschne" target="_blank" rel="noopener">wjschne</a>
, <a href="https://github.com/wklimowicz" target="_blank" rel="noopener">wklimowicz</a>
, <a href="https://github.com/xiaoxl" target="_blank" rel="noopener">xiaoxl</a>
, <a href="https://github.com/ycrouin" target="_blank" rel="noopener">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>&ndash; 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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-07-11-1.5-release/images/thumbnail.png" length="70820" type="image/png" />
    </item>
    <item>
      <title>Beautiful Tables in Typst</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/</link>
      <pubDate>Tue, 02 Jul 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/</guid>
      <dc:creator>Gordon Woodhull</dc:creator><description><![CDATA[<p>Quarto now allows HTML Tables with CSS styling to be output in Typst.</p>
<p>It does this by translating CSS properties into Typst properties. You can read about the feature <a href="https://quarto.org/docs/output-formats/typst.html#typst-css" target="_blank" rel="noopener">in the Guide</a>
.<span class="column-margin margin-aside">technical details <a href="https://quarto.org/docs/advanced/typst/typst-css.html" target="_blank" rel="noopener">in the Advanced Docs</a>
</span></p>
<p>Let&rsquo;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>
<h2 id="confusion-matrix-pandas--python">Confusion Matrix (Pandas / Python)
</h2>
<p>This example uses a dashed border to draw attention to two cells.</p>
<p><img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/pandas-confusion-matrix.png" width="700" /> <a href="examples/pandas-confusion-matrix.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/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>
<h2 id="cars-heatmap-gt--r">Cars heatmap (gt / R)
</h2>
<p>This example uses cell background colors to encode ranges of values.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/gt-cars.png" width="430" />
<p><a href="examples/gt-cars.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/demo/gt-cars.html" width=430 height=375 scrolling="no"></iframe>
<p><a href="examples/gt-cars.HTML" target="_blank">HTML</a></p>
<h2 id="oceania-great-tables--python">Oceania (Great Tables / Python)
</h2>
<p>Borders can show the structure of grouped rows.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/great-tables-oceania.png" width="600" />
<p><a href="examples/great-tables-oceania.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/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>
<h2 id="islands-gt--r">Islands (gt / R)
</h2>
<p>Font sizes and minimal borders make this table stand out.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/gt-islands.png" width="500" />
<p><a href="examples/gt-islands.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/demo/gt-islands.html" width=400 height=580 scrolling="no"></iframe>
<p><a href="examples/gt-islands.HTML" target="_blank">HTML</a></p>
<h2 id="solar-zenith-great-tables--python">Solar Zenith (Great Tables / Python)
</h2>
<p>Another cool heatmap.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/great-tables-solar-zenith.png" width="750" />
<p><a href="examples/great-tables-solar-zenith.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/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>
<h2 id="acting-on-data-pandas--python">Acting on Data (Pandas / Python)
</h2>
<p>Applying colors and transparency based on data.</p>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/images/pandas-acting-on-data.png" width="540" />
<p><a href="examples/pandas-acting-on-data.pdf" target="_blank">Typst</a></p>
<iframe class="html-demo" src="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/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>
<p>We can&rsquo;t wait to see what you do with this new feature!</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-07-02-beautiful-tables-in-typst/beautiful-tables-typst.png" length="185743" type="image/png" />
    </item>
    <item>
      <title>Quarto workshops at posit::conf(2024)</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-05-28-conf-workshops/</link>
      <pubDate>Tue, 28 May 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-05-28-conf-workshops/</guid>
      <dc:creator>Isabella Velásquez and Mine Çetinkaya-Rundel</dc:creator><description><![CDATA[<p>Join us for posit::conf(2024) in Seattle! On August 12, we&rsquo;re hosting a day of workshops featuring three dedicated to Quarto. Check out the options below and find the workshop that&rsquo;s just right for you. Already found your ideal Quarto workshop? <a href="https://posit.co/conference/" target="_blank" rel="noopener">Register today</a>
!</p>
<p><a href="#introduction-to-quarto"><strong>Introduction to Quarto</strong></a>
</p>
<ul>
<li>
<p>Led by <a href="https://bids.berkeley.edu/people/andrew-bray" target="_blank" rel="noopener">Andrew Bray</a>
, Berkeley University</p>
</li>
<li>
<p>Ideal for beginners looking to create rich documents</p>
</li>
</ul>
<p><a href="#build-a-dashboard-workshop-with-quarto-r-andor-python"><strong>Build-a-Dashboard Workshop (with Quarto, R, and/or Python)</strong></a>
</p>
<ul>
<li>
<p>Led by <a href="https://mine-cr.com/" target="_blank" rel="noopener">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><a href="#quarto-websites"><strong>Quarto Websites</strong></a>
</p>
<ul>
<li>
<p>Led by <a href="https://www.cwick.co.nz/" target="_blank" rel="noopener">Charlotte Wickham</a>
 and <a href="https://emilhvitfeldt.com/" target="_blank" rel="noopener">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>
<h2 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&rsquo;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>
<h2 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&rsquo;s next? </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 &ldquo;home&rdquo; &ndash; 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>
<h2 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&rsquo;s brand? If you&rsquo;ve used Quarto to produce a document, you&rsquo;ve already got the technical skills to create a Quarto website. In this workshop, you&rsquo;ll learn everything else you need to build a website and customize its appearance.</p>
<p>You&rsquo;ll get a running start by using a template we&rsquo;ve designed to be functional and attractive but also act as a guide for your learning. Then you&rsquo;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&rsquo;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&rsquo;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&rsquo;ll assume you&rsquo;ve used Quarto to produce documents, but we won&rsquo;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>
<h2 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" target="_blank" rel="noopener">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" target="_blank" rel="noopener">conference agenda</a>
.</p>
<ul>
<li>Tip: For a quick view of all Quarto talks, filter for &ldquo;Quarto&rdquo; under topics.</li>
</ul>
</li>
</ul>
<p>Ready to secure your spot? Visit the <a href="https://posit.co/conference/" target="_blank" rel="noopener">conference website</a>
 for comprehensive details on pricing and the agenda, and <a href="https://reg.conf.posit.co/flow/posit/positconf24/reg/login" target="_blank" rel="noopener">register today</a>
!</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-05-28-conf-workshops/images/conf-workshops-thumbnail.png" length="286065" type="image/png" />
    </item>
    <item>
      <title>Quarto for Reproducible Medical Manuscripts</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-04-01-manuscripts-rmedicine/</link>
      <pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-04-01-manuscripts-rmedicine/</guid>
      <dc:creator>Mine Çetinkaya-Rundel</dc:creator><description><![CDATA[<p>Recently I gave a webinar for R/Medicine titled &ldquo;Quarto for Reproducible Medical Manuscripts&rdquo;. You can watch the video below or on the R Consortium website at <a href="https://www.r-consortium.org/r-medicine-quarto-for-reproducible-medical-manuscripts" target="_blank" rel="noopener">https://www.r-consortium.org/r-medicine-quarto-for-reproducible-medical-manuscripts</a>
.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>















  

  
  
  
    
    
  

  
  










  
  
    <div class="w-full aspect-video">
      <iframe
        src="https://www.youtube.com/embed/NK1onTLcgY4"
        class="w-full h-full"
        
        frameborder="0"
        allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
        allowfullscreen></iframe>
    </div>
  




<p>Some highlights from the webinar include:</p>
<ul>
<li>
<p>Step-by-step instructions for getting started with a new manuscript project</p>
</li>
<li>
<p>Obtaining multiple formats from one source</p>
</li>
<li>
<p>An overview of the rich front matter</p>
</li>
<li>
<p>Embedding computations from supplementary notebooks</p>
<ul>
<li>Note that I demoed embedding computations in R from .qmd files however it&rsquo;s also possible to embed computations from Jupyter notebooks and computations done in Python.</li>
</ul>
</li>
<li>
<p>A live-coding demo of authoring Quarto manuscripts with RStudio and all the bells-and-whistles of the visual editor, including:</p>
<ul>
<li>cross referencing</li>
<li>citations</li>
<li>inline code</li>
</ul>
</li>
<li>
<p>Ability to actually interact with code from a manuscript with Binder</p>
</li>
<li>
<p>And a rich Q&amp;A, thanks to the audience!</p>
</li>
</ul>
<p>The slides (also written in Quarto!) and their source code can be found at the links below:</p>
<ul>
<li>
<p>Slides: <a href="https://mine.quarto.pub/quarto-manuscripts-rmed" target="_blank" rel="noopener">https://mine.quarto.pub/quarto-manuscripts-rmed</a>
</p>
</li>
<li>
<p>Source code for slides: <a href="https://github.com/mine-cetinkaya-rundel/quarto-manuscripts-rmed" target="_blank" rel="noopener">https://github.com/mine-cetinkaya-rundel/quarto-manuscripts-rmed</a>
</p>
</li>
</ul>
<p>In addition, the webinar featured a reproduction of a medical manuscript with Quarto.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> Materials from this reproduction can be found at the links below:</p>
<ul>
<li>
<p>Manuscript homepage: <a href="https://mine-cetinkaya-rundel.github.io/indo-rct" target="_blank" rel="noopener">https://mine-cetinkaya-rundel.github.io/indo-rct</a>
</p>
<ul>
<li>This is an HTML page but you can also access PDF and MS Word versions of the manuscript by clicking on their respective links.</li>
<li>You can also find a link to the Binder instance for this manuscript.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup></li>
</ul>
</li>
<li>
<p>Source code for manuscript: <a href="https://github.com/mine-cetinkaya-rundel/indo-rct" target="_blank" rel="noopener">https://github.com/mine-cetinkaya-rundel/indo-rct</a>
</p>
</li>
</ul>
<p>Ready to get started writing a manuscript with Quarto? Go to <a href="https://quarto.org/docs/manuscripts" target="_blank" rel="noopener">https://quarto.org/docs/manuscripts</a>
 for more info and a step-by-step tutorial. Happy authoring!</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Huge thanks to the R Consortium for hosting the webinar and making the recording available so quickly!&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Huge thanks to <a href="https://github.com/higgi13425" target="_blank" rel="noopener">Peter Higgins</a>
 who pointed me to this article as well as the R package that contains code from the article (<a href="https://higgi13425.github.io/medicaldata/" target="_blank" rel="noopener"><strong>medicaldata</strong></a>
) and shared some starter code with me.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>The Binder instance takes a few minutes to launch, you can leave that running in a tab while you browse the rest of the manuscript in another tab.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-04-01-manuscripts-rmedicine/images/manuscripts-thumbnail.png" length="113188" type="image/png" />
    </item>
    <item>
      <title>Quarto on Hugging Face</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-03-26-hugging-face/</link>
      <pubDate>Tue, 26 Mar 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-03-26-hugging-face/</guid>
      <dc:creator>Gordon Shotwell</dc:creator><description><![CDATA[<p>We&rsquo;re happy to announce that you can now host Quarto Websites on <a href="https://huggingface.co/" target="_blank" rel="noopener">Hugging Face</a>
 using the new <a href="https://quarto.org/docs/publishing/hugging-face.html" target="_blank" rel="noopener">Quarto Template</a>
. This template allows you to deploy Quarto sites to Hugging Face with a click of a button, making it easy to integrate them with other Hugging Face models and datasets.</p>
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-03-26-hugging-face/images/hf-space-screen.png" data-fig-alt="Screenshot of Hugging Face Space selection screen showing Docker selected as the SDK, and Quarto selected as the Docker template." alt="Hugging Face Space selection screen" />
<figcaption aria-hidden="true">Hugging Face Space selection screen</figcaption>
</figure>
<h2 id="about-hugging-face">About Hugging Face
</h2>
<p>Hugging Face is the most used open platform for AI, where the machine learning community has shared more than 500,000 models, 115,000 datasets, and 160,000 ML apps, including Stable Diffusion, Llama, GPT-J, and open-source ChatGPT alternatives.</p>
<p>These apps enable the community to explore models, replicate results, and lower the barrier of entry for ML. At Posit, we&rsquo;ve been extremely impressed with the Hugging Face community and their commitment to supporting open-source machine learning models.</p>
<h2 id="what-does-quarto-add">What does Quarto add?
</h2>
<p>We think that Quarto is one of the best frameworks for scientific writing, making it a perfect tool for the Hugging Face community. With Quarto, you can interleave code and text to produce accurate, reproducible, and beautiful documents. You use simple markdown or Jupyter notebook files to generate <a href="https://quarto.org/docs/presentations/" target="_blank" rel="noopener">presentations</a>
, <a href="https://quarto.org/docs/manuscripts/" target="_blank" rel="noopener">manuscripts</a>
, <a href="https://quarto.org/docs/dashboards/" target="_blank" rel="noopener">dashboards</a>
, and <a href="https://quarto.org/docs/output-formats/all-formats.html" target="_blank" rel="noopener">more</a>
.</p>
<h2 id="conclusion">Conclusion
</h2>
<p>Our mission at Posit is to support open-source scientific software, and so we&rsquo;re very proud to support Hugging Face&rsquo;s effort to build advanced AI models under open-source licenses. We can&rsquo;t wait to see what people build with this integration.</p>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-03-26-hugging-face/images/hugging-face-thumb.png" length="54122" type="image/png" />
    </item>
    <item>
      <title>Quarto 1.4</title>
      <link>https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/</link>
      <pubDate>Wed, 24 Jan 2024 00:00:00 +0000</pubDate>
      <guid>https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/</guid>
      <dc:creator>Charlotte Wickham</dc:creator><description><![CDATA[<p>Quarto 1.4 has been officially released! You can get the current release from the <a href="https://quarto.org/docs/download/index.html" target="_blank" rel="noopener">download page</a>
</p>
<p>This release has tons of new features. Some of the big ones we want to spotlight are: Dashboards, Typst, Inline Code Syntax, Cross-References and Manuscripts.</p>
<h2 id="dashboards">Dashboards
</h2>
<p>Quarto Dashboards streamline the creation of interactive dashboards, giving you an effortless way to lay out interactive components, visualizations, tabular data, and annotations. Here are some examples (click on the image to visit the live version):</p>
<table style="width:100%;">
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: center;"><div width="33.3%" data-layout-align="center">
<p><a href="https://jjallaire.github.io/stock-explorer-dashboard/"><img src="https://quarto.org/docs/dashboards/examples/thumbnails/stock-explorer-dashboard.png" class="border" data-fig-alt="Screenshot of a Stock Trader dashboard: a row of three values boxes, then a row with a stock ticker graph and a table of closing values. Navy blue and green theme." /></a></p>
</div></td>
<td style="text-align: center;"><div width="33.3%" data-layout-align="center">
<p><a href="https://jjallaire.github.io/customer-churn-dashboard/"><img src="https://quarto.org/docs/dashboards/examples/thumbnails/customer-churn-dashboard.png" class="border" data-fig-alt="Screenshot of a Customer Churn dashboard: a row of three values boxes, then a row with two plots, then a row with a table. Light blue and yellow theme." /></a></p>
</div></td>
<td style="text-align: center;"><div width="33.3%" data-layout-align="center">
<p><a href="https://jjallaire.shinyapps.io/penguins-dashboard/"><img src="https://quarto.org/docs/dashboards/examples/thumbnails/penguins-dashboard.png" class="border" data-fig-alt="Screenshot of a Palmer Penguins dashboard: a sidebar with checkboxes and a dropdown, and two plots in main panel. Blue theme." /></a></p>
</div></td>
</tr>
</tbody>
</table>
<p>For the source code of these dashboards and additional examples see the <a href="https://quarto.org/docs/gallery/index.html#dashboards" target="_blank" rel="noopener">examples gallery</a>
. When you are ready to build your own Quarto dashboard head to our guide on <a href="https://quarto.org/docs/dashboards/index.html" target="_blank" rel="noopener">Dashboards</a>
.</p>
<h2 id="typst">Typst
</h2>
<p><a href="https://github.com/typst/typst" class="external">Typst</a> is a new open-source markup-based typesetting system that is designed to be as powerful as LaTeX while being much easier to learn and use. Typst creates beautiful PDF output with blazing fast render times.</p>
<p>Quarto 1.4 includes the Typst CLI, so all you need to get started creating PDFs via Typst is to use <code>format: typst</code>:</p>
<p><strong>hello-typst.qmd</strong></p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">title: &#34;Hello Typst!&#34;
</span></span><span class="line"><span class="cl">format: typst
</span></span><span class="line"><span class="cl">---
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">My first Typst document
</span></span></code></pre></td></tr></table>
</div>
</div><p>We are particularly excited about how easy it is to make templates for journal articles, conference posters, newsletters and more with Typst. Here are some examples you can use in Quarto as <a href="https://quarto.org/docs/output-formats/typst-custom.html" target="_blank" rel="noopener">custom formats</a>
:</p>
<table>
<colgroup>
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
<col style="width: 25%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/typst-format-ieee.png" data-group="custom-formats" data-fig-alt="Screenshot of a page showing a article styled according IEEE standards. The title is centered with authors below in two columns." alt="IEEE" />
<figcaption aria-hidden="true">IEEE</figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/typst-format-poster.png" data-group="custom-formats" data-fig-alt="Screenshot of a poster in landscape orientiation. The poster includes a logo in the top right, a title in the top left, and content arranged in three columns." alt="Poster" />
<figcaption aria-hidden="true">Poster</figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/typst-format-letter.png" data-group="custom-formats" data-fig-alt="Screenshot of a page showing a letter. A sender address is across the top of the page, followed by a recipient address left justified. The body of the letter includes a subject line in bold." alt="Letter" />
<figcaption aria-hidden="true">Letter</figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/typst-format-dept-news.png" data-group="custom-formats" data-fig-alt="Screenshot of a page showing a department newsletter. The page is split vertically with a white column on the left and a red one on the right. An image spans across the column with the text &quot;Award Winning Science&quot; oriented to run vertically down its right side." alt="Dept News" />
<figcaption aria-hidden="true">Dept News</figcaption>
</figure>
</div></td>
</tr>
</tbody>
</table>
<p>Start your Typst journey with Quarto in our guide on <a href="https://quarto.org/docs/output-formats/typst.html" target="_blank" rel="noopener">Typst Basics</a>
.</p>
<h2 id="inline-code-syntax">Inline Code Syntax
</h2>
<p>Quarto 1.4 introduces a unified syntax for including computed values inline. The syntax for inline code is similar to code blocks, except you use a single tick (<code>`</code>) rather than triple ticks (<code>```</code>), and you can use it in the middle of markdown:</p>
<table style="width:100%;">
<colgroup>
<col style="width: 33%" />
<col style="width: 33%" />
<col style="width: 33%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="33.3%" data-layout-align="left">
<h3 id="jupyter">Jupyter</h3>
<div class="sourceCode" id="cb1"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="in">```{python}</span></span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a>radius <span class="op">=</span> <span class="dv">5</span></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>The radius of the circle is <span class="in">`{python} radius`</span></span></code></pre></div>
<p>This syntax works for any Jupyter kernel—so for Julia you would write an inline expression as <code>`{julia} radius`</code>).</p>
</div></td>
<td style="text-align: left;"><div width="33.3%" data-layout-align="left">
<h3 id="knitr">Knitr</h3>
<div class="sourceCode" id="cb2"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="in">```{r}</span></span>
<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a>radius <span class="ot">&lt;-</span> <span class="dv">5</span></span>
<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span>
<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>The radius of the circle is <span class="in">`{r} radius`</span></span></code></pre></div>
</div></td>
<td style="text-align: left;"><div width="33.3%" data-layout-align="left">
<h3 id="ojs">OJS</h3>
<div class="sourceCode" id="cb3"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a><span class="in">```{ojs}</span></span>
<span id="cb3-2"><a href="#cb3-2" aria-hidden="true" tabindex="-1"></a>radius <span class="op">=</span> <span class="dv">5</span></span>
<span id="cb3-3"><a href="#cb3-3" aria-hidden="true" tabindex="-1"></a><span class="in">```</span></span>
<span id="cb3-4"><a href="#cb3-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb3-5"><a href="#cb3-5" aria-hidden="true" tabindex="-1"></a>The radius of the circle is <span class="in">`{ojs} radius`</span></span></code></pre></div>
</div></td>
</tr>
</tbody>
</table>
<p>And don&rsquo;t worry if you are used to using <code>`r `</code> that syntax remains fully supported. Read more at <a href="https://quarto.org/docs/computations/inline-code.html" target="_blank" rel="noopener">Inline Code</a>
.</p>
<h2 id="cross-references">Cross-References
</h2>
<p>Cross-references have been overhauled in Quarto 1.4, enabling you to do things like:</p>
<ul>
<li>
<p>Flexibly define the content of float cross-references (e.g. figures, tables and code listings) with the new <a href="https://quarto.org/docs/authoring/cross-references-divs.html" target="_blank" rel="noopener">Cross-Reference Div Syntax</a>
. For example, <a href="#tbl-table" class="quarto-xref">Table 1</a> is an image treated like a table:</p>
<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<div class="sourceCode" id="cb1"><pre class="sourceCode markdown"><code class="sourceCode markdown"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>::: {#tbl-table}</span>
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="al">![](table.png)</span></span>
<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>An image treated like a table</span>
<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a></span>
<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a>:::</span></code></pre></div>
</div></td>
<td style="text-align: left;"><div width="50.0%" data-layout-align="left">
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/crossref-div-table.png" id="tbl-table"
alt="Table 1: An image treated like a table" />
&#10;</div></td>
</tr>
</tbody>
</table>
<p>And notice if you hover over the reference as it appears in the text, e.g. hover over this link to <a href="#tbl-table" class="quarto-xref">Table 1</a>, you&rsquo;ll get a floating preview of the content&mdash;that&rsquo;s new too.</p>
</li>
<li>
<p>Define <a href="https://quarto.org/docs/authoring/cross-references-custom.html" target="_blank" rel="noopener">custom types of float cross-reference</a>
, which you could use to create cross-references to Videos, Diagrams or <a href="https://quarto.org/docs/authoring/cross-references-custom.html#example-supplemental-figures" target="_blank" rel="noopener">Supplemental Figures</a>
.</p>
</li>
<li>
<p>Cross-reference <a href="https://quarto.org/docs/authoring/cross-references.html#code-listings" target="_blank" rel="noopener">executable code cells</a>
, <a href="https://quarto.org/docs/authoring/cross-references.html#callouts" target="_blank" rel="noopener">callouts</a>
 and <a href="https://quarto.org/docs/authoring/cross-references.html#theorems-and-proofs" target="_blank" rel="noopener">remarks and solutions</a>
.</p>
</li>
</ul>
<h2 id="manuscripts">Manuscripts
</h2>
<p>Quarto manuscript projects provide a framework for writing and publishing scholarly articles. You can use notebooks (<code>.qmd</code> or <code>.ipynb</code>) as the source of content and computations, and then publish these computations alongside the manuscript, allowing readers to dive into your code.</p>
<p>The output of a manuscript project is a website containing the article in multiple formats (e.g. LaTeX, MS Word) along with rendered versions of the notebooks in the project:</p>
<table>
<colgroup>
<col style="width: 75%" />
<col style="width: 25%" />
</colgroup>
<tbody>
<tr>
<td style="text-align: left;"><div width="75.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/article-content.png" class="border" data-fig-alt="A screenshot of the content area on the manuscript webpage. Content shows a title block including the article title, authors, and abstract, body text, and an image with a caption." alt="Article Content" />
<figcaption aria-hidden="true">Article Content</figcaption>
</figure>
</div></td>
<td style="text-align: left;"><div width="25.0%" data-layout-align="left">
<figure>
<img src="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/webpage-menu.png" class="border" data-fig-alt="A screenshot of the menu on the right hand side of the manuscript webpage. The menu has headings: Table of contents, Other Formats, Notebooks and Other Links." alt="Navigation" />
<figcaption aria-hidden="true">Navigation</figcaption>
</figure>
</div></td>
</tr>
</tbody>
</table>
<p>Read more about manuscripts and how to get started in our guide to <a href="https://quarto.org/docs/manuscripts/index.html" target="_blank" rel="noopener">Manuscripts</a>
.</p>
<h2 id="other-highlights">Other Highlights
</h2>
<p>Some other highlights include:</p>
<ul>
<li>
<p><a href="https://quarto.org/docs/dashboards/interactivity/shiny-python/index.html" target="_blank" rel="noopener">Shiny for Python</a>
&mdash;Support for using Shiny for Python within Quarto documents.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/computations/render-scripts.html" target="_blank" rel="noopener">Script Rendering</a>
&mdash;Render specially formatted <code>.py</code>, <code>.jl</code> and <code>.r</code> script files.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/projects/binder.html" target="_blank" rel="noopener">Easy Binder Configuration for Quarto Projects</a>
&mdash;Support for generating files required to deploy a Quarto project to <a href="https://mybinder.org/" class="external">Binder</a>.</p>
</li>
<li>
<p><a href="https://docs.posit.co/connect/user/quarto/#email-customization" class="external">Connect Email Generation</a>&mdash;Extends the <code>html</code> output format so that HTML/text emails can be created and selectively delivered through Posit Connect.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/publishing/posit-cloud.html" target="_blank" rel="noopener">Publish to Posit Cloud</a>
&mdash;Adds <code>posit-cloud</code> as a venue for <code>quarto publish</code>.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/output-formats/html-lightbox-figures.html" target="_blank" rel="noopener">Lightbox Treatment for Images and Figures</a>
&mdash;Support for zooming into images and figures as well as grouping multiple images into a gallery.</p>
</li>
</ul>
<p>If you build Quarto extensions, you should also be aware of some developer-facing changes:</p>
<ul>
<li>
<p><a href="https://quarto.org/docs/prerelease/1.4/lua_changes.html" target="_blank" rel="noopener">Lua changes</a>
&mdash;New Support for crossreferenceable elements in filters, extensible renderers of quarto AST nodes such as <code>FloatRefTarget</code> and <code>Callout</code>, the use of relative paths in <code>require()</code> calls, and more precise specification of where a filter will be inserted.</p>
</li>
<li>
<p><a href="https://quarto.org/docs/prerelease/1.4/ast.html" target="_blank" rel="noopener">AST processing changes</a>
&mdash;Improvements to the HTML table processing added in v1.3 and a way for LaTeX raw blocks to include Quarto-compatible markdown for processing.</p>
</li>
</ul>
<p>You can find all the other changes in 1.4 in the <a href="https://quarto.org/docs/download/#download-section-news" target="_blank" rel="noopener">Release Notes</a>
.</p>
<h2 id="acknowledgements">Acknowledgements
</h2>
<p>We&rsquo;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/AaronGullickson" target="_blank" rel="noopener">AaronGullickson</a>
, <a href="https://github.com/abichat" target="_blank" rel="noopener">abichat</a>
, <a href="https://github.com/abigailhaddad" target="_blank" rel="noopener">abigailhaddad</a>
, <a href="https://github.com/aborruso" target="_blank" rel="noopener">aborruso</a>
, <a href="https://github.com/abraver" target="_blank" rel="noopener">abraver</a>
, <a href="https://github.com/acebulsk" target="_blank" rel="noopener">acebulsk</a>
, <a href="https://github.com/aghaynes" target="_blank" rel="noopener">aghaynes</a>
, <a href="https://github.com/ajay333a" target="_blank" rel="noopener">ajay333a</a>
, <a href="https://github.com/ajsmit" target="_blank" rel="noopener">ajsmit</a>
, <a href="https://github.com/ALanguillaume" target="_blank" rel="noopener">ALanguillaume</a>
, <a href="https://github.com/AlbertRapp" target="_blank" rel="noopener">AlbertRapp</a>
, <a href="https://github.com/aletroux" target="_blank" rel="noopener">aletroux</a>
, <a href="https://github.com/alex-vinogradov" target="_blank" rel="noopener">alex-vinogradov</a>
, <a href="https://github.com/alexCardazzi" target="_blank" rel="noopener">alexCardazzi</a>
, <a href="https://github.com/allefeld" target="_blank" rel="noopener">allefeld</a>
, <a href="https://github.com/am-lh" target="_blank" rel="noopener">am-lh</a>
, <a href="https://github.com/andlekbra" target="_blank" rel="noopener">andlekbra</a>
, <a href="https://github.com/andrefmello91" target="_blank" rel="noopener">andrefmello91</a>
, <a href="https://github.com/AndreiBiziuk" target="_blank" rel="noopener">AndreiBiziuk</a>
, <a href="https://github.com/andrewheiss" target="_blank" rel="noopener">andrewheiss</a>
, <a href="https://github.com/anielsen001" target="_blank" rel="noopener">anielsen001</a>
, <a href="https://github.com/apsteinmetz" target="_blank" rel="noopener">apsteinmetz</a>
, <a href="https://github.com/AQLT" target="_blank" rel="noopener">AQLT</a>
, <a href="https://github.com/arnaudgallou" target="_blank" rel="noopener">arnaudgallou</a>
, <a href="https://github.com/aronatkins" target="_blank" rel="noopener">aronatkins</a>
, <a href="https://github.com/atsyplenkov" target="_blank" rel="noopener">atsyplenkov</a>
, <a href="https://github.com/b-rodrigues" target="_blank" rel="noopener">b-rodrigues</a>
, <a href="https://github.com/Balaika" target="_blank" rel="noopener">Balaika</a>
, <a href="https://github.com/baptiste" target="_blank" rel="noopener">baptiste</a>
, <a href="https://github.com/barryrowlingson" target="_blank" rel="noopener">barryrowlingson</a>
, <a href="https://github.com/batpigandme" target="_blank" rel="noopener">batpigandme</a>
, <a href="https://github.com/bcongelio" target="_blank" rel="noopener">bcongelio</a>
, <a href="https://github.com/benabel" target="_blank" rel="noopener">benabel</a>
, <a href="https://github.com/benjaminschlegel" target="_blank" rel="noopener">benjaminschlegel</a>
, <a href="https://github.com/bfordAIMS" target="_blank" rel="noopener">bfordAIMS</a>
, <a href="https://github.com/blacksqr" target="_blank" rel="noopener">blacksqr</a>
, <a href="https://github.com/boshek" target="_blank" rel="noopener">boshek</a>
, <a href="https://github.com/BradyAJohnston" target="_blank" rel="noopener">BradyAJohnston</a>
, <a href="https://github.com/brtarran" target="_blank" rel="noopener">brtarran</a>
, <a href="https://github.com/bryanhanson" target="_blank" rel="noopener">bryanhanson</a>
, <a href="https://github.com/bweatherson" target="_blank" rel="noopener">bweatherson</a>
, <a href="https://github.com/c-zippel" target="_blank" rel="noopener">c-zippel</a>
, <a href="https://github.com/cadojo" target="_blank" rel="noopener">cadojo</a>
, <a href="https://github.com/camilogarciabotero" target="_blank" rel="noopener">camilogarciabotero</a>
, <a href="https://github.com/cbrnr" target="_blank" rel="noopener">cbrnr</a>
, <a href="https://github.com/ccamara" target="_blank" rel="noopener">ccamara</a>
, <a href="https://github.com/cermak-consulting" target="_blank" rel="noopener">cermak-consulting</a>
, <a href="https://github.com/chendaniely" target="_blank" rel="noopener">chendaniely</a>
, <a href="https://github.com/ChrisJefferson" target="_blank" rel="noopener">ChrisJefferson</a>
, <a href="https://github.com/ChristopherBarrington" target="_blank" rel="noopener">ChristopherBarrington</a>
, <a href="https://github.com/christopherkenny" target="_blank" rel="noopener">christopherkenny</a>
, <a href="https://github.com/chrisvoncsefalvay" target="_blank" rel="noopener">chrisvoncsefalvay</a>
, <a href="https://github.com/chuxinyuan" target="_blank" rel="noopener">chuxinyuan</a>
, <a href="https://github.com/cjber" target="_blank" rel="noopener">cjber</a>
, <a href="https://github.com/coatless" target="_blank" rel="noopener">coatless</a>
, <a href="https://github.com/coltongearhart" target="_blank" rel="noopener">coltongearhart</a>
, <a href="https://github.com/CorradoLanera" target="_blank" rel="noopener">CorradoLanera</a>
, <a href="https://github.com/csgroen" target="_blank" rel="noopener">csgroen</a>
, <a href="https://github.com/dalejbarr" target="_blank" rel="noopener">dalejbarr</a>
, <a href="https://github.com/DamonCharlesRoberts" target="_blank" rel="noopener">DamonCharlesRoberts</a>
, <a href="https://github.com/Damonsoul" target="_blank" rel="noopener">Damonsoul</a>
, <a href="https://github.com/daniel-smit-haw" target="_blank" rel="noopener">daniel-smit-haw</a>
, <a href="https://github.com/danieltomasz" target="_blank" rel="noopener">danieltomasz</a>
, <a href="https://github.com/danmackinlay" target="_blank" rel="noopener">danmackinlay</a>
, <a href="https://github.com/daranzolin" target="_blank" rel="noopener">daranzolin</a>
, <a href="https://github.com/darthlite" target="_blank" rel="noopener">darthlite</a>
, <a href="https://github.com/das-g" target="_blank" rel="noopener">das-g</a>
, <a href="https://github.com/davidfoxcroft" target="_blank" rel="noopener">davidfoxcroft</a>
, <a href="https://github.com/davidpomerenke" target="_blank" rel="noopener">davidpomerenke</a>
, <a href="https://github.com/ddotta" target="_blank" rel="noopener">ddotta</a>
, <a href="https://github.com/declann" target="_blank" rel="noopener">declann</a>
, <a href="https://github.com/dense-set" target="_blank" rel="noopener">dense-set</a>
, <a href="https://github.com/dfolio" target="_blank" rel="noopener">dfolio</a>
, <a href="https://github.com/dgkf" target="_blank" rel="noopener">dgkf</a>
, <a href="https://github.com/dkapitan" target="_blank" rel="noopener">dkapitan</a>
, <a href="https://github.com/dlakelan" target="_blank" rel="noopener">dlakelan</a>
, <a href="https://github.com/dloss" target="_blank" rel="noopener">dloss</a>
, <a href="https://github.com/dmkaplan2000" target="_blank" rel="noopener">dmkaplan2000</a>
, <a href="https://github.com/DOSull" target="_blank" rel="noopener">DOSull</a>
, <a href="https://github.com/dpabon" target="_blank" rel="noopener">dpabon</a>
, <a href="https://github.com/dpprdan" target="_blank" rel="noopener">dpprdan</a>
, <a href="https://github.com/DriesSchaumont" target="_blank" rel="noopener">DriesSchaumont</a>
, <a href="https://github.com/drscotthawley" target="_blank" rel="noopener">drscotthawley</a>
, <a href="https://github.com/dschief001" target="_blank" rel="noopener">dschief001</a>
, <a href="https://github.com/dweng0" target="_blank" rel="noopener">dweng0</a>
, <a href="https://github.com/e-miz" target="_blank" rel="noopener">e-miz</a>
, <a href="https://github.com/EconomiCurtis" target="_blank" rel="noopener">EconomiCurtis</a>
, <a href="https://github.com/edavidaja" target="_blank" rel="noopener">edavidaja</a>
, <a href="https://github.com/edibotopic" target="_blank" rel="noopener">edibotopic</a>
, <a href="https://github.com/eeenilsson" target="_blank" rel="noopener">eeenilsson</a>
, <a href="https://github.com/ehudkr" target="_blank" rel="noopener">ehudkr</a>
, <a href="https://github.com/eitsupi" target="_blank" rel="noopener">eitsupi</a>
, <a href="https://github.com/EllaKaye" target="_blank" rel="noopener">EllaKaye</a>
, <a href="https://github.com/emdelponte" target="_blank" rel="noopener">emdelponte</a>
, <a href="https://github.com/emilBeBri" target="_blank" rel="noopener">emilBeBri</a>
, <a href="https://github.com/EmilHvitfeldt" target="_blank" rel="noopener">EmilHvitfeldt</a>
, <a href="https://github.com/emitanaka" target="_blank" rel="noopener">emitanaka</a>
, <a href="https://github.com/epruesse" target="_blank" rel="noopener">epruesse</a>
, <a href="https://github.com/ercbk" target="_blank" rel="noopener">ercbk</a>
, <a href="https://github.com/EricJC24" target="_blank" rel="noopener">EricJC24</a>
, <a href="https://github.com/ericvmai" target="_blank" rel="noopener">ericvmai</a>
, <a href="https://github.com/erikerhardt" target="_blank" rel="noopener">erikerhardt</a>
, <a href="https://github.com/espinielli" target="_blank" rel="noopener">espinielli</a>
, <a href="https://github.com/Eugloh" target="_blank" rel="noopener">Eugloh</a>
, <a href="https://github.com/fecet" target="_blank" rel="noopener">fecet</a>
, <a href="https://github.com/Felixmil" target="_blank" rel="noopener">Felixmil</a>
, <a href="https://github.com/FeralFlora" target="_blank" rel="noopener">FeralFlora</a>
, <a href="https://github.com/finkelshtein" target="_blank" rel="noopener">finkelshtein</a>
, <a href="https://github.com/fkohrt" target="_blank" rel="noopener">fkohrt</a>
, <a href="https://github.com/fradav" target="_blank" rel="noopener">fradav</a>
, <a href="https://github.com/fuhrmanator" target="_blank" rel="noopener">fuhrmanator</a>
, <a href="https://github.com/fulem" target="_blank" rel="noopener">fulem</a>
, <a href="https://github.com/gadenbuie" target="_blank" rel="noopener">gadenbuie</a>
, <a href="https://github.com/garrettgman" target="_blank" rel="noopener">garrettgman</a>
, <a href="https://github.com/GegznaV" target="_blank" rel="noopener">GegznaV</a>
, <a href="https://github.com/Gewerd-Strauss" target="_blank" rel="noopener">Gewerd-Strauss</a>
, <a href="https://github.com/gimmiereddy" target="_blank" rel="noopener">gimmiereddy</a>
, <a href="https://github.com/gl-eb" target="_blank" rel="noopener">gl-eb</a>
, <a href="https://github.com/grantmcdermott" target="_blank" rel="noopener">grantmcdermott</a>
, <a href="https://github.com/gregmacfarlane" target="_blank" rel="noopener">gregmacfarlane</a>
, <a href="https://github.com/gregoireurvoy" target="_blank" rel="noopener">gregoireurvoy</a>
, <a href="https://github.com/gregswinehart" target="_blank" rel="noopener">gregswinehart</a>
, <a href="https://github.com/gshotwell" target="_blank" rel="noopener">gshotwell</a>
, <a href="https://github.com/GuillaumeDehaene" target="_blank" rel="noopener">GuillaumeDehaene</a>
, <a href="https://github.com/gvelasq" target="_blank" rel="noopener">gvelasq</a>
, <a href="https://github.com/gyansinha" target="_blank" rel="noopener">gyansinha</a>
, <a href="https://github.com/hamelsmu" target="_blank" rel="noopener">hamelsmu</a>
, <a href="https://github.com/harrelfe" target="_blank" rel="noopener">harrelfe</a>
, <a href="https://github.com/harrylojames" target="_blank" rel="noopener">harrylojames</a>
, <a href="https://github.com/harrysw1729" target="_blank" rel="noopener">harrysw1729</a>
, <a href="https://github.com/HelenaLC" target="_blank" rel="noopener">HelenaLC</a>
, <a href="https://github.com/helmingstay" target="_blank" rel="noopener">helmingstay</a>
, <a href="https://github.com/HenrikBengtsson" target="_blank" rel="noopener">HenrikBengtsson</a>
, <a href="https://github.com/homerhanumat" target="_blank" rel="noopener">homerhanumat</a>
, <a href="https://github.com/icarusz" target="_blank" rel="noopener">icarusz</a>
, <a href="https://github.com/ig0101" target="_blank" rel="noopener">ig0101</a>
, <a href="https://github.com/ijlyttle" target="_blank" rel="noopener">ijlyttle</a>
, <a href="https://github.com/ijmitch" target="_blank" rel="noopener">ijmitch</a>
, <a href="https://github.com/irmoodie" target="_blank" rel="noopener">irmoodie</a>
, <a href="https://github.com/isabelizimm" target="_blank" rel="noopener">isabelizimm</a>
, <a href="https://github.com/IULibScholComm" target="_blank" rel="noopener">IULibScholComm</a>
, <a href="https://github.com/ivelasq" target="_blank" rel="noopener">ivelasq</a>
, <a href="https://github.com/jack-davison" target="_blank" rel="noopener">jack-davison</a>
, <a href="https://github.com/Janidai" target="_blank" rel="noopener">Janidai</a>
, <a href="https://github.com/jarbet" target="_blank" rel="noopener">jarbet</a>
, <a href="https://github.com/jasonaris" target="_blank" rel="noopener">jasonaris</a>
, <a href="https://github.com/jatalah" target="_blank" rel="noopener">jatalah</a>
, <a href="https://github.com/JauntyJJS" target="_blank" rel="noopener">JauntyJJS</a>
, <a href="https://github.com/jb-leger" target="_blank" rel="noopener">jb-leger</a>
, <a href="https://github.com/jcheng5" target="_blank" rel="noopener">jcheng5</a>
, <a href="https://github.com/jdonland" target="_blank" rel="noopener">jdonland</a>
, <a href="https://github.com/jdutant" target="_blank" rel="noopener">jdutant</a>
, <a href="https://github.com/jeremy9959" target="_blank" rel="noopener">jeremy9959</a>
, <a href="https://github.com/jeroenjanssens" target="_blank" rel="noopener">jeroenjanssens</a>
, <a href="https://github.com/jfb-h" target="_blank" rel="noopener">jfb-h</a>
, <a href="https://github.com/jfunction" target="_blank" rel="noopener">jfunction</a>
, <a href="https://github.com/JGobeil" target="_blank" rel="noopener">JGobeil</a>
, <a href="https://github.com/jgomezdans" target="_blank" rel="noopener">jgomezdans</a>
, <a href="https://github.com/jgostick" target="_blank" rel="noopener">jgostick</a>
, <a href="https://github.com/jhchou" target="_blank" rel="noopener">jhchou</a>
, <a href="https://github.com/jhk0530" target="_blank" rel="noopener">jhk0530</a>
, <a href="https://github.com/jhunter-aof" target="_blank" rel="noopener">jhunter-aof</a>
, <a href="https://github.com/jimgar" target="_blank" rel="noopener">jimgar</a>
, <a href="https://github.com/jimjam-slam" target="_blank" rel="noopener">jimjam-slam</a>
, <a href="https://github.com/jmbuhr" target="_blank" rel="noopener">jmbuhr</a>
, <a href="https://github.com/jmcvw" target="_blank" rel="noopener">jmcvw</a>
, <a href="https://github.com/Joda66" target="_blank" rel="noopener">Joda66</a>
, <a href="https://github.com/joelostblom" target="_blank" rel="noopener">joelostblom</a>
, <a href="https://github.com/joelvonrotz" target="_blank" rel="noopener">joelvonrotz</a>
, <a href="https://github.com/johngoldin" target="_blank" rel="noopener">johngoldin</a>
, <a href="https://github.com/jonassmedegaard" target="_blank" rel="noopener">jonassmedegaard</a>
, <a href="https://github.com/jpatteet" target="_blank" rel="noopener">jpatteet</a>
, <a href="https://github.com/jrowen" target="_blank" rel="noopener">jrowen</a>
, <a href="https://github.com/jthomasmock" target="_blank" rel="noopener">jthomasmock</a>
, <a href="https://github.com/jtr13" target="_blank" rel="noopener">jtr13</a>
, <a href="https://github.com/juba" target="_blank" rel="noopener">juba</a>
, <a href="https://github.com/juliantao" target="_blank" rel="noopener">juliantao</a>
, <a href="https://github.com/jurjoroa" target="_blank" rel="noopener">jurjoroa</a>
, <a href="https://github.com/justanothergithubber" target="_blank" rel="noopener">justanothergithubber</a>
, <a href="https://github.com/jzelner" target="_blank" rel="noopener">jzelner</a>
, <a href="https://github.com/KaiWaldrant" target="_blank" rel="noopener">KaiWaldrant</a>
, <a href="https://github.com/kbvernon" target="_blank" rel="noopener">kbvernon</a>
, <a href="https://github.com/kcarnold" target="_blank" rel="noopener">kcarnold</a>
, <a href="https://github.com/kdheepak" target="_blank" rel="noopener">kdheepak</a>
, <a href="https://github.com/kdzhang" target="_blank" rel="noopener">kdzhang</a>
, <a href="https://github.com/kejaed" target="_blank" rel="noopener">kejaed</a>
, <a href="https://github.com/kendonB" target="_blank" rel="noopener">kendonB</a>
, <a href="https://github.com/knuesel" target="_blank" rel="noopener">knuesel</a>
, <a href="https://github.com/Kodiologist" target="_blank" rel="noopener">Kodiologist</a>
, <a href="https://github.com/kompre" target="_blank" rel="noopener">kompre</a>
, <a href="https://github.com/koushikkhan" target="_blank" rel="noopener">koushikkhan</a>
, <a href="https://github.com/krishaamer" target="_blank" rel="noopener">krishaamer</a>
, <a href="https://github.com/ksreyes" target="_blank" rel="noopener">ksreyes</a>
, <a href="https://github.com/kwangkim" target="_blank" rel="noopener">kwangkim</a>
, <a href="https://github.com/kyleGrealis" target="_blank" rel="noopener">kyleGrealis</a>
, <a href="https://github.com/lcnbr" target="_blank" rel="noopener">lcnbr</a>
, <a href="https://github.com/leeroyaus" target="_blank" rel="noopener">leeroyaus</a>
, <a href="https://github.com/leonardblaschek" target="_blank" rel="noopener">leonardblaschek</a>
, <a href="https://github.com/Lextuga007" target="_blank" rel="noopener">Lextuga007</a>
, <a href="https://github.com/lidavidm" target="_blank" rel="noopener">lidavidm</a>
, <a href="https://github.com/lillemets" target="_blank" rel="noopener">lillemets</a>
, <a href="https://github.com/lnnrtwttkhn" target="_blank" rel="noopener">lnnrtwttkhn</a>
, <a href="https://github.com/luifrancgom" target="_blank" rel="noopener">luifrancgom</a>
, <a href="https://github.com/Lulliter" target="_blank" rel="noopener">Lulliter</a>
, <a href="https://github.com/lyndondrake" target="_blank" rel="noopener">lyndondrake</a>
, <a href="https://github.com/m-clark" target="_blank" rel="noopener">m-clark</a>
, <a href="https://github.com/m-guggenmos" target="_blank" rel="noopener">m-guggenmos</a>
, <a href="https://github.com/machow" target="_blank" rel="noopener">machow</a>
, <a href="https://github.com/maelle" target="_blank" rel="noopener">maelle</a>
, <a href="https://github.com/magnusnosnes" target="_blank" rel="noopener">magnusnosnes</a>
, <a href="https://github.com/MarieEtienne" target="_blank" rel="noopener">MarieEtienne</a>
, <a href="https://github.com/marklhc" target="_blank" rel="noopener">marklhc</a>
, <a href="https://github.com/martinfleis" target="_blank" rel="noopener">martinfleis</a>
, <a href="https://github.com/Martinomagnifico" target="_blank" rel="noopener">Martinomagnifico</a>
, <a href="https://github.com/masud90" target="_blank" rel="noopener">masud90</a>
, <a href="https://github.com/matanhakim" target="_blank" rel="noopener">matanhakim</a>
, <a href="https://github.com/Matoyatapika" target="_blank" rel="noopener">Matoyatapika</a>
, <a href="https://github.com/matthew-brett" target="_blank" rel="noopener">matthew-brett</a>
, <a href="https://github.com/matthewfinkbeiner" target="_blank" rel="noopener">matthewfinkbeiner</a>
, <a href="https://github.com/maxdrohde" target="_blank" rel="noopener">maxdrohde</a>
, <a href="https://github.com/mfenner" target="_blank" rel="noopener">mfenner</a>
, <a href="https://github.com/mfisher87" target="_blank" rel="noopener">mfisher87</a>
, <a href="https://github.com/MichaelPascale" target="_blank" rel="noopener">MichaelPascale</a>
, <a href="https://github.com/mikabr" target="_blank" rel="noopener">mikabr</a>
, <a href="https://github.com/milanmlft" target="_blank" rel="noopener">milanmlft</a>
, <a href="https://github.com/mine-cetinkaya-rundel" target="_blank" rel="noopener">mine-cetinkaya-rundel</a>
, <a href="https://github.com/Minh-AnhHuynh" target="_blank" rel="noopener">Minh-AnhHuynh</a>
, <a href="https://github.com/miwojc" target="_blank" rel="noopener">miwojc</a>
, <a href="https://github.com/mloubout" target="_blank" rel="noopener">mloubout</a>
, <a href="https://github.com/msarahan" target="_blank" rel="noopener">msarahan</a>
, <a href="https://github.com/msh855" target="_blank" rel="noopener">msh855</a>
, <a href="https://github.com/mslynch" target="_blank" rel="noopener">mslynch</a>
, <a href="https://github.com/murattasdemir" target="_blank" rel="noopener">murattasdemir</a>
, <a href="https://github.com/mvanaman" target="_blank" rel="noopener">mvanaman</a>
, <a href="https://github.com/nanxstats" target="_blank" rel="noopener">nanxstats</a>
, <a href="https://github.com/netique" target="_blank" rel="noopener">netique</a>
, <a href="https://github.com/netw0rkf10w" target="_blank" rel="noopener">netw0rkf10w</a>
, <a href="https://github.com/nickriches" target="_blank" rel="noopener">nickriches</a>
, <a href="https://github.com/njbart" target="_blank" rel="noopener">njbart</a>
, <a href="https://github.com/noahmf" target="_blank" rel="noopener">noahmf</a>
, <a href="https://github.com/nqt2022" target="_blank" rel="noopener">nqt2022</a>
, <a href="https://github.com/nwisn" target="_blank" rel="noopener">nwisn</a>
, <a href="https://github.com/nwvhb" target="_blank" rel="noopener">nwvhb</a>
, <a href="https://github.com/OlexiyPukhov" target="_blank" rel="noopener">OlexiyPukhov</a>
, <a href="https://github.com/olivroy" target="_blank" rel="noopener">olivroy</a>
, <a href="https://github.com/ollyhensby" target="_blank" rel="noopener">ollyhensby</a>
, <a href="https://github.com/pastorn" target="_blank" rel="noopener">pastorn</a>
, <a href="https://github.com/pat-s" target="_blank" rel="noopener">pat-s</a>
, <a href="https://github.com/patgd" target="_blank" rel="noopener">patgd</a>
, <a href="https://github.com/petrbouchal" target="_blank" rel="noopener">petrbouchal</a>
, <a href="https://github.com/petzi53" target="_blank" rel="noopener">petzi53</a>
, <a href="https://github.com/phongphuhanam" target="_blank" rel="noopener">phongphuhanam</a>
, <a href="https://github.com/pieterprovoost" target="_blank" rel="noopener">pieterprovoost</a>
, <a href="https://github.com/piotr-kaczmarski" target="_blank" rel="noopener">piotr-kaczmarski</a>
, <a href="https://github.com/pjastr" target="_blank" rel="noopener">pjastr</a>
, <a href="https://github.com/pommevilla" target="_blank" rel="noopener">pommevilla</a>
, <a href="https://github.com/prosoitos" target="_blank" rel="noopener">prosoitos</a>
, <a href="https://github.com/ptram" target="_blank" rel="noopener">ptram</a>
, <a href="https://github.com/qiushiyan" target="_blank" rel="noopener">qiushiyan</a>
, <a href="https://github.com/ratnanil" target="_blank" rel="noopener">ratnanil</a>
, <a href="https://github.com/ravicodelabs" target="_blank" rel="noopener">ravicodelabs</a>
, <a href="https://github.com/rcannood" target="_blank" rel="noopener">rcannood</a>
, <a href="https://github.com/rchaput" target="_blank" rel="noopener">rchaput</a>
, <a href="https://github.com/regob" target="_blank" rel="noopener">regob</a>
, <a href="https://github.com/remlapmot" target="_blank" rel="noopener">remlapmot</a>
, <a href="https://github.com/resmartiZH" target="_blank" rel="noopener">resmartiZH</a>
, <a href="https://github.com/rgaiacs" target="_blank" rel="noopener">rgaiacs</a>
, <a href="https://github.com/rmcd1024" target="_blank" rel="noopener">rmcd1024</a>
, <a href="https://github.com/rmflight" target="_blank" rel="noopener">rmflight</a>
, <a href="https://github.com/rnd195" target="_blank" rel="noopener">rnd195</a>
, <a href="https://github.com/robolyst" target="_blank" rel="noopener">robolyst</a>
, <a href="https://github.com/rogerbramon" target="_blank" rel="noopener">rogerbramon</a>
, <a href="https://github.com/ronblum" target="_blank" rel="noopener">ronblum</a>
, <a href="https://github.com/ropeladder" target="_blank" rel="noopener">ropeladder</a>
, <a href="https://github.com/rowanc1" target="_blank" rel="noopener">rowanc1</a>
, <a href="https://github.com/RoyiAvital" target="_blank" rel="noopener">RoyiAvital</a>
, <a href="https://github.com/rsenft1" target="_blank" rel="noopener">rsenft1</a>
, <a href="https://github.com/salim-b" target="_blank" rel="noopener">salim-b</a>
, <a href="https://github.com/samcarter" target="_blank" rel="noopener">samcarter</a>
, <a href="https://github.com/sceptri" target="_blank" rel="noopener">sceptri</a>
, <a href="https://github.com/sda030" target="_blank" rel="noopener">sda030</a>
, <a href="https://github.com/sebacea" target="_blank" rel="noopener">sebacea</a>
, <a href="https://github.com/sebastian-c" target="_blank" rel="noopener">sebastian-c</a>
, <a href="https://github.com/sebastianrowan" target="_blank" rel="noopener">sebastianrowan</a>
, <a href="https://github.com/sebffischer" target="_blank" rel="noopener">sebffischer</a>
, <a href="https://github.com/seeM" target="_blank" rel="noopener">seeM</a>
, <a href="https://github.com/Serenade600" target="_blank" rel="noopener">Serenade600</a>
, <a href="https://github.com/Servinjesus1" target="_blank" rel="noopener">Servinjesus1</a>
, <a href="https://github.com/shafayetShafee" target="_blank" rel="noopener">shafayetShafee</a>
, <a href="https://github.com/sharon-wang" target="_blank" rel="noopener">sharon-wang</a>
, <a href="https://github.com/shirdekel" target="_blank" rel="noopener">shirdekel</a>
, <a href="https://github.com/simonjackman" target="_blank" rel="noopener">simonjackman</a>
, <a href="https://github.com/sje30" target="_blank" rel="noopener">sje30</a>
, <a href="https://github.com/sjspielman" target="_blank" rel="noopener">sjspielman</a>
, <a href="https://github.com/skaltman" target="_blank" rel="noopener">skaltman</a>
, <a href="https://github.com/smithbn" target="_blank" rel="noopener">smithbn</a>
, <a href="https://github.com/snhansen" target="_blank" rel="noopener">snhansen</a>
, <a href="https://github.com/Sparrow0hawk" target="_blank" rel="noopener">Sparrow0hawk</a>
, <a href="https://github.com/sswam" target="_blank" rel="noopener">sswam</a>
, <a href="https://github.com/stefanbringuier" target="_blank" rel="noopener">stefanbringuier</a>
, <a href="https://github.com/stephan-koenig" target="_blank" rel="noopener">stephan-koenig</a>
, <a href="https://github.com/steveguil" target="_blank" rel="noopener">steveguil</a>
, <a href="https://github.com/Sumidu" target="_blank" rel="noopener">Sumidu</a>
, <a href="https://github.com/sun123zxy" target="_blank" rel="noopener">sun123zxy</a>
, <a href="https://github.com/tegorman13" target="_blank" rel="noopener">tegorman13</a>
, <a href="https://github.com/tflexs" target="_blank" rel="noopener">tflexs</a>
, <a href="https://github.com/th0ger" target="_blank" rel="noopener">th0ger</a>
, <a href="https://github.com/the-solipsist" target="_blank" rel="noopener">the-solipsist</a>
, <a href="https://github.com/TheGoodCartman" target="_blank" rel="noopener">TheGoodCartman</a>
, <a href="https://github.com/TheisFerre" target="_blank" rel="noopener">TheisFerre</a>
, <a href="https://github.com/thomascwells" target="_blank" rel="noopener">thomascwells</a>
, <a href="https://github.com/TLouf" target="_blank" rel="noopener">TLouf</a>
, <a href="https://github.com/tobydriscoll" target="_blank" rel="noopener">tobydriscoll</a>
, <a href="https://github.com/tom67" target="_blank" rel="noopener">tom67</a>
, <a href="https://github.com/tonyaseverson" target="_blank" rel="noopener">tonyaseverson</a>
, <a href="https://github.com/topepo" target="_blank" rel="noopener">topepo</a>
, <a href="https://github.com/tpoisot" target="_blank" rel="noopener">tpoisot</a>
, <a href="https://github.com/TrainedMusician" target="_blank" rel="noopener">TrainedMusician</a>
, <a href="https://github.com/TS-CUBED" target="_blank" rel="noopener">TS-CUBED</a>
, <a href="https://github.com/ttalVlatt" target="_blank" rel="noopener">ttalVlatt</a>
, <a href="https://github.com/Tutuchan" target="_blank" rel="noopener">Tutuchan</a>
, <a href="https://github.com/tylermorganwall" target="_blank" rel="noopener">tylermorganwall</a>
, <a href="https://github.com/ulyngs" target="_blank" rel="noopener">ulyngs</a>
, <a href="https://github.com/ute" target="_blank" rel="noopener">ute</a>
, <a href="https://github.com/vfacta" target="_blank" rel="noopener">vfacta</a>
, <a href="https://github.com/vitpetrik" target="_blank" rel="noopener">vitpetrik</a>
, <a href="https://github.com/VivaldoMendes" target="_blank" rel="noopener">VivaldoMendes</a>
, <a href="https://github.com/VladimirAlexiev" target="_blank" rel="noopener">VladimirAlexiev</a>
, <a href="https://github.com/Walser52" target="_blank" rel="noopener">Walser52</a>
, <a href="https://github.com/warrickball" target="_blank" rel="noopener">warrickball</a>
, <a href="https://github.com/wch" target="_blank" rel="noopener">wch</a>
, <a href="https://github.com/weihuangwong" target="_blank" rel="noopener">weihuangwong</a>
, <a href="https://github.com/wilcar" target="_blank" rel="noopener">wilcar</a>
, <a href="https://github.com/willingc" target="_blank" rel="noopener">willingc</a>
, <a href="https://github.com/wjdenny" target="_blank" rel="noopener">wjdenny</a>
, <a href="https://github.com/wklimowicz" target="_blank" rel="noopener">wklimowicz</a>
, <a href="https://github.com/XiangyunHuang" target="_blank" rel="noopener">XiangyunHuang</a>
, <a href="https://github.com/xtimbeau" target="_blank" rel="noopener">xtimbeau</a>
, <a href="https://github.com/yoyo25" target="_blank" rel="noopener">yoyo25</a>
, <a href="https://github.com/YuanchenZhu2020" target="_blank" rel="noopener">YuanchenZhu2020</a>
, <a href="https://github.com/yuxi-liu-wired" target="_blank" rel="noopener">yuxi-liu-wired</a>
, <a href="https://github.com/yyzeng" target="_blank" rel="noopener">yyzeng</a>
, <a href="https://github.com/zenggyu" target="_blank" rel="noopener">zenggyu</a>
, <a href="https://github.com/Zeno-of-Elea" target="_blank" rel="noopener">Zeno-of-Elea</a>
, <a href="https://github.com/zief0002" target="_blank" rel="noopener">zief0002</a>
, <a href="https://github.com/Zuline" target="_blank" rel="noopener">Zuline</a>
</p>
<p>The party popper 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>&ndash; 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>
]]></description>
      <enclosure url="https://posit-open-source.netlify.app/blog/quarto/2024-01-24-1.4-release/images/thumbnail.png" length="69536" type="image/png" />
    </item>
  </channel>
</rss>
