1.7 Release Notes

v1.8 backports

In this release

In previous releases

  • (#6607): Add missing beamer template update for beamer theme options: colorthemeoptions, fontthemeoptions, innerthemeoptions and outerthemeoptions.
  • (#12625): Fire resize event on window when light/dark toggle is clicked, to tell widgets to resize.
  • (#12657): Load Giscus in generated script tag, to avoid wrong-theming in Chrome.
  • (#12700): Giscus not loading on a site without dark mode configured.
  • (#12780): keep-ipynb: true now works again correctly and intermediate .quarto_ipynb is not removed.
  • (#12627): Don’t actually install extension when user responds yes to first prompt but no to second.
  • (#12753): Support change in IPython 9+ and import set_matplotlib_formats from matplotlib_inline.backend_inline in the internal setup.py script used to initialize rendering with Jupyter engine.
  • (#12870): Update QuartoNotebookRunner to 0.17.3.
  • (#13051): Fixed support for captioned Markdown table inside Div syntax for crossref. This is special handling, but this could be output by function like knitr::kable() with old option support.

v1.7 changes

Regression fixes

  • (#11509): Fix link-decoration regression in HTML formats.
  • (#11532): Fix regression for #660, which causes files to have incorrect permissions when Quarto is installed in a location not writable by the current user.
  • (#11549): Fix regression in rendering dashboard tabsets into cards without titles.
  • (#11561): Fix a regression with $border-color that impacted, callouts borders, tabset borders, and table borders of the defaults themes. $border-color is now correctly a mixed of $body-color and $body-bg even for the default theme.
  • (#11580): Fix regression with documents containing categories fields that are not strings.
  • (#11659): julia engine - Fix escaping bug where paths containing spaces or backslashes break server startup on Windows.
  • (#11752): Fix regression with non-alphanumeric characters in categories preventing correct filtering of listing.
  • (#11943): Fix callout title color on dark theme in revealjs following Revealjs update in quarto 1.6.
  • (#11990): Do not print parameter cell in parameterized Jupyter notebooks.
  • (#12147): for RevealJS format, serif and simple themes defaults back to have their heading color ($presentation-heading-color) to be the same as the body color ($body-color) as in Quarto 1.5.

Dependencies

  • Update typst to 0.13.0.
  • Update pandoc to 3.6.3.
  • Update dart-sass to 1.85.1.
  • Update esbuild to 0.19.12.

YAML validation

  • (#10251): EJS template for website now uses proper object to get alt text for logo in sidebar.
  • (#11654): Allow page-inset as value in column key for code cells.
  • (#12151): Fix YAML validation in computations cell on Windows. Validate YAML in documents in julia engine.

Projects

website

  • (#8238): Listing categories are now sorted case-insensitively.
  • (#10501): Improve documentation of repo-actions option.
  • (#11701): Wrap HTML emitted by EJS templates in {=html} blocks to avoid memory blowup issues with Pandoc’s parser.
  • (#12134): Forward logo.small images in _brand.yml files to a website favicon.

blog

  • (#11745): Fix categories links under post title in post with url encoded path (e.g. with space or other special characters).

book

  • (#11520): Book’s cover image now escapes lightbox treatment, which was incorrectly applied to it when lightbox: true was set in the book’s configuration.
  • (#12134): Forward logo.small images in _brand.yml files to the favicon of the book’s website.

Commands

quarto check

  • (#10047): quarto check will now check binary dependency versions strictly by default. Use quarto check --no-strict to revert to old behavior.
  • (#10561): quarto check will now report paths of binary dependencies.
  • (#11608): Do not issue error message when calling quarto check info.
  • (#12433): Add --output option to quarto check to produce structured JSON output.

quarto convert

  • (#12042): Preserve Markdown content that follows YAML metadata in a raw .ipynb cell.
  • (#12318): Ensure enough line breaks between cells that might be trimmed.

quarto inspect

  • (#12336): Clean up transient files created by quarto inspect.

Formats

dashboard

  • (#11338): Remove unused datatables imports when appropriate.

html

  • (#1325): Dark Mode pages should not flash light on reload. (Nor should Light Mode pages flash dark.)
  • (#1470): respect-user-color-scheme enables checking the media query prefers-color-scheme for user dark mode preference. Author preference still influences stylesheet order and NoJS experience. Defaults to false, leaving to author preference.
  • (#10780): improve link-external-filter documentation.
  • (#11860): ES6 modules that import other local JS modules in documents with embed-resources: true are now correctly embedded.
  • (#11911): Code highlighting colors for tokens are now the same between code blocks and inline code when using Pandoc’s syntax highlighting.
  • (#12118): Don’t hide :focus on code-copy button.
  • (#12277): Provide light and dark plot and table renderings with renderings: [light,dark]
  • (#12307): Tabsets using tabby.js in non-boostrap html (theme: pandoc, theme: none or minimal: true) now correctly render reactive content when server: shiny is used.
  • (#12319): Provide switchable light and dark brands for a page with brand.light and brand.dark.
  • (#12356): Remove duplicate id in HTML document when using #lst- prefix label for using Quarto crossref.

pdf

  • (#11695): Translate ANSI color codes more carefully inside highlighting environments.
  • (#11835): Take markdown structure into account when detecting minimum heading level.
  • (#11878, #12085): Correctly fixup raw LaTeX table having an unexpected table env with options (e.g \begin{table}[!ht]) to be handled as crossref table.
  • (#11903): crossref configuration like fig-title or tbl-title now correctly supports multi word values, e.g. fig-title: 'Supplementary Figure'.
  • (#12344): Ensure decorated code blocks do not float when inside layout elements.
  • Update to Pandoc’s LaTeX template following Pandoc 3.6.3 support:
    • format: beamer now uses its own template. The main template for latex does not use $if(beamer)$ anymore, and the new template for beamer uses the same partials as latex one.
    • Improved Babel support:
      • New babeloptions variable in the template to allow for more flexible Babel options.
      • doc-class.tex Quarto’s partial has been updated as Babel options have been moved to documentclass definition in doc-class.tex Quarto’s partial.
    • New partials available for format: latex and format: beamer:
      • Pandoc now uses partials for its latex templates, and they are available through template-partials. Pandoc’s partials uses .latex extension: passoptions.latex, common.latex, font-settings.latex, fonts.latex, hypersetup.latex, after-header-includes.latex
      • New Quarto partials: babel-lang.tex, biblio-config.tex. Quarto’s partials uses .tex extension.
    • BREAKING CHANGE for templates authors: common.latex does now uses pandoc.tex partial from Quarto, which include now part of the content that was in main template.tex. If you modify pandoc.tex as part of a custom format, it should be updated to new content.

jats

  • Update to Pandoc’s template following Pandoc 3.6.3 support:
    • article.jats_publishing partials now support author.roles

revealjs

  • (#12307): Tabsets using tabby.js in Revealjs now correctly render reactive content when server: shiny is used.

typst format

  • (#11578): Typst column layout widths use fractional fr units instead of percent % units for unitless and default widths in order to fill the enclosing block and not spill outside it.
  • (#11676): Convert unitless image widths from pixels to inches for column layouts.
  • (#11835): Take markdown structure into account when detecting minimum heading level.
  • (#11964): Using panel layout without a crossref label now correctly do not add an empty #block[] that was leading to an unnecessary space in output.
  • (#12387): brand-mode chooses whether to use light (default) or dark brand yml.
  • (#12825): Callouts look better with dark brands, mixing the title color and using brand background color for body.
  • (#12354): CodeBlock in Listing with #lst- prefix are now correctly highlighted.

Engines

julia

  • (#11803): Added subcommands status, kill, close [--force] and log under the new CLI command quarto call engine julia.
  • (#12121): Update QuartoNotebookRunner to 0.17.0. Support for evaluating Python cells via PythonCall.jl added. Support for notebook caching via execute.cache added.
  • (#12151): Basic YAML validation is now active for documents using Julia engine.

jupyter

  • (#9089): Serialize compound jupyter metadata into a special key-value attribute to not break Pandoc’s fenced div parsing.
  • (#10113): KaTeX will now load correctly in engine: jupyter documents using emebed-resources: true.
  • (#12114): JUPYTERCACHE environment variable from Jupyter cache CLI is now respected by Quarto when cache: true is used. This environment variable allows to change the path of the cache directory.
  • (#12228): quarto render will now fails if errors are detected at IPython display level. Setting error: true globally or at cell level will keep the error to show in output and not stop the rendering.
  • (#12374): Detect language properly in Jupyter notebooks that lack the language field in their kernelspecs.

Quarto PDF rendering

  • (#12194): More specific checks added in log parsing to automatically find missing fonts.

Shiny

  • (#12059): quarto preview now correctly run on Windows an interactive Quarto doc with Jupyter engine and py-shiny, when using a *.py file as resource.

Lua Filters and extensions

  • Add quarto.paths.tinytex_bin_dir to Quarto’s Lua API. If TinyTeX is found by Quarto, this will be set to the path to the bin directory of the TinyTeX installation where command line tool are located (e.g., pdflatex, tlmgr, etc.). If TinyTeX is not found, this will be nil, meaning Quarto will use the system PATH to find the command line tools.
  • Fix pandoc.mediabag Lua typings so autocompletions work with the Lua LSP integration.
  • (#11379): Add version shortcode to display the current Quarto version.
  • (#11526): General improvements to the style and robustness of Quarto’s Lua code. This also provides a new public function quarto.utils.is_empty_node that allows to check whether a node is empty, i.e., whether it’s an empty list, has no child nodes, and contains no text.
  • (#11664): lipsum shortcode is no longer randomly generated by default, use 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.Nunc ac dignissim magna. Vestibulum vitae egestas elit. Proin feugiat leo quis ante condimentum, eu ornare mauris feugiat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris cursus laoreet ex, dignissim bibendum est posuere iaculis. Suspendisse et maximus elit. In fringilla gravida ornare. Aenean id lectus pulvinar, sagittis felis nec, rutrum risus. Nam vel neque eu arcu blandit fringilla et in quam. Aliquam luctus est sit amet vestibulum eleifend. Phasellus elementum sagittis molestie. Proin tempor lorem arcu, at condimentum purus volutpat eu. Fusce et pellentesque ligula. Pellentesque id tellus at erat luctus fringilla. Suspendisse potenti.Etiam maximus accumsan gravida. Maecenas at nunc dignissim, euismod enim ac, bibendum ipsum. Maecenas vehicula velit in nisl aliquet ultricies. Nam eget massa interdum, maximus arcu vel, pretium erat. Maecenas sit amet tempor purus, vitae aliquet nunc. Vivamus cursus urna velit, eleifend dictum magna laoreet ut. Duis eu erat mollis, blandit magna id, tincidunt ipsum. Integer massa nibh, commodo eu ex vel, venenatis efficitur ligula. Integer convallis lacus elit, maximus eleifend lacus ornare ac. Vestibulum scelerisque viverra urna id lacinia. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Aenean eget enim at diam bibendum tincidunt eu non purus. Nullam id magna ultrices, sodales metus viverra, tempus turpis.Duis ornare ex ac iaculis pretium. Maecenas sagittis odio id erat pharetra, sit amet consectetur quam sollicitudin. Vivamus pharetra quam purus, nec sagittis risus pretium at. Nullam feugiat, turpis ac accumsan interdum, sem tellus blandit neque, id vulputate diam quam semper nisl. Donec sit amet enim at neque porttitor aliquet. Phasellus facilisis nulla eget placerat eleifend. Vestibulum non egestas eros, eget lobortis ipsum. Nulla rutrum massa eget enim aliquam, id porttitor erat luctus. Nunc sagittis quis eros eu sagittis. Pellentesque dictum, erat at pellentesque sollicitudin, justo augue pulvinar metus, quis rutrum est mi nec felis. Vestibulum efficitur mi lorem, at elementum purus tincidunt a. Aliquam finibus enim magna, vitae pellentesque erat faucibus at. Nulla mauris tellus, imperdiet id lobortis et, dignissim condimentum ipsum. Morbi nulla orci, varius at aliquet sed, facilisis id tortor. Donec ut urna nisi.Aenean placerat luctus tortor vitae molestie. Nulla at aliquet nulla. Sed efficitur tellus orci, sed fringilla lectus laoreet eget. Vivamus maximus quam sit amet arcu dignissim, sed accumsan massa ullamcorper. Sed iaculis tincidunt feugiat. Nulla in est at nunc ultricies dictum ut vitae nunc. Aenean convallis vel diam at malesuada. Suspendisse arcu libero, vehicula tempus ultrices a, placerat sit amet tortor. Sed dictum id nulla commodo mattis. Aliquam mollis, nunc eu tristique faucibus, purus lacus tincidunt nulla, ac pretium lorem nunc ut enim. Curabitur eget mattis nisl, vitae sodales augue. Nam felis massa, bibendum sit amet nulla vel, vulputate rutrum lacus. Aenean convallis odio pharetra nulla mattis consequat. to restore randomness.
  • (#11699): Fix crash with video shortcode inside HTML comments.
  • (#11896): fix \f () form feed character not valid in PowerPoint (pptx).
  • (#12326): Add quarto.shortcode.* API entry points for shortcode developers.
  • (#12365): brand color shortcode takes an optional brandMode second parameter, default light.
  • (#12453): Expose _quarto.modules.brand as quarto.brand and add has_mode() function.
  • (#12564): brand logo shortcode also takes an optional brandMode second parameter, default light.

Conditional Content

  • (#4411): Added support for new format and aliases in when-format and unless-format: confluence, docusaurus (and docusaurus-md), email, dashboard, gfm, hugo (and hugo-md).

Quarto Lua API

  • (#4411): quarto.format.is_format is now working as expected with support of more aliases: confluence, docusaurus (and docusaurus-md), email, dashboard, gfm, hugo (and hugo-md)
  • (#12299): quarto.doc.pdf_engine() now correctly returns the PDF engine used for the document. quarto.doc.cite_method() now returns nil if no citation method will be used (i.e. no references is the document set).

Languages

  • (#12366): Added Bulgarian translation for Quarto UI text (credit: @sakelariev)

quarto publish

  • (#9929): quarto publish gh-pages will now clean previous worktree directory leftover from previous deploys.

Other Fixes and Improvements

  • A new folder quarto-session-temp can be created in .quarto to store temporary files created by Quarto during a rendering. Reminder: .quarto is for internal use of Quarto and should not be versioned (thus added to .gitignore).
  • (fb38eb5) Use the latest parser for Acorn when analyzing JS code imported from OJS blocks.
  • (#7260): Add support for active class in tabsets so the .active tab shows up by default.
  • (#7757): Session temporary files are now cleaned up when the session ends abnormally (e.g. Ctrl+C) also on Windows.
  • (#8613): Fix giscus color on load to support dark mode (by @kv9898).
  • (#9867): Blank lines are now trimmed in Raw HTML Table blocks.
  • (#10532): Changed default of --headless=old to --headless as Chrome 132 has removed old headless mode and only support new mode. To use old mode, set QUARTO_CHROMIUM to a new chrome-headless-shell binary or to an older chrome version (between 128 and 132). Set QUARTO_CHROMIUM_HEADLESS_MODE to old to use old headless mode with that compatible version.
  • (#10961): Add more information on which Chrome Headless will be used in quarto check install. This is helpful to help debug mermaid issues.
  • (#11441): Don’t add newlines around shortcodes during processing.
  • (#11606): Added a new QUARTO_DOCUMENT_FILE env var available to computation engine to the name of the file currently being rendered.
  • (#11643): Improve highlighting of nested code block inside markdown code block, i.e. using ```{python} or ```python inside ````markdown fenced code block.
  • (#11788): quarto add and quarto remove will return non-zero code when they fail.
  • (#11803): Added a new CLI command quarto call. First users of this interface are the new quarto call engine julia ... subcommands.
  • (#11951): Raw LaTeX table without tbl- prefix label for using Quarto crossref are now correctly passed through unmodified.
  • (#11967): Produce a better error message when YAML metadata with !expr tags are used outside of knitr code cells.
  • (#12117): Color output to stdout and stderr is now correctly rendered for html format in the Jupyter and Julia engines. This change includes support for ANSI color codes in output.
  • (#12264): Upgrade dart-sass to 1.85.1.
  • (#12238): Do not truncate very long console errors (e.g. in Jupyter Notebook with backtrace).
  • (#12338): Add an additional workaround for the SCSS parser used in color variable extraction.
  • (#12369): quarto preview correctly throws a YAML validation error when a format key does not conform.
  • (#12459): Add .page-inset-* classes to completions.
  • (#12492): Improve shortcode extension template with new parameters and a link to docs.
  • (#12513): Fix an issue with quarto preview when using DiagrammeR R package for Graphiz diagram.