All changes included in 1.9:
Shortcodes
(#13342): Ensure that the
contentsshortcode works inside metadata.(#13489): Add
mode=plainoption to thekbdshortcode to render keyboard shortcuts exactly as written, without OS-specific symbol translation.(#14061): Fix
metashortcode not preserving line breaks in values. The shortcode now respects its usage context (block, inline, or text) and preserves paragraph breaks in block and code block contexts.
Regression fixes
(#13396): Fix
quarto publish connectregression.(#13441): Catch
undefinedexceptions in Pandoc failure to avoid spurious error message.(#13046): Use new url for multiplex socket.io server https://multiplex.up.railway.app/ as default for
format: revealjsandrevealjs.multiplex: true.(#13506): Fix navbar active state detection when sidebar has no logo configured. Prevents empty logo links from interfering with navigation highlighting.
(#13616): Fix fatal error when rendering manuscript projects with custom blocks like ConditionalBlock.
(#13625): Fix Windows file locking error (os error 32) when rendering with
--output-dirflag. Context cleanup now happens before removing the temporary.quartodirectory, ensuring file handles are properly closed.(#13633): Fix detection and auto-installation of babel language packages from newer error format that doesn't explicitly mention
.ldffilename.(#13694): Fix
notebook-view.urlbeing ignored - external notebook links now properly use specified URLs instead of local preview files.(#13732): Fix automatic font package installation for fonts with spaces in their names (e.g., "Noto Emoji", "DejaVu Sans"). Font file search patterns now match both with and without spaces.
Dependencies
Update
pandocto 3.8.3(#13925): Pandoc 3.8.3 introduces
^[text]^as inline footnote syntax. This conflicts with superscript containing a Span at the start (e.g.,^[text]{.class}^) since the^[sequence now triggers footnote parsing. A workaround is to insert a zero-width space or other invisible character between^and[.
Update
typstto 0.14.2Update
esbuildto 0.25.10Update
denoto 2.4.5(#13601): Update
mermaidto 11.12.0 (author: @multimeric)
Formats
All Formats
(#13878): Add
syntax-highlightingoption replacing the deprecatedhighlight-stylein Pandoc 3.8. It supports style names (e.g.,tango,github), custom.themefiles,noneto disable highlighting, oridiomaticfor native format highlighting. Thehighlight-styleoption remains supported but is deprecated.
gfm
(#13421): Do not word-wrap titles in header.
(#13603): Fix callouts with title but no body content causing fatal error when rendering to GitHub Flavored Markdown.
email
(#13882): Add support for multiple email outputs when rendering to
format: emailfor Posit Connect.(#14021): Add
email-versionhook to override detected Connect version when rendering emails for Posit Connect.(#14098): Add support for dynamic email recipients computed via Python or R code.
html
(#14072): Add q syntax files
(#11929): Import all
brand.typography.fontsin CSS, whether or not fonts are referenced by typography elements.(#13413): Fix uncentered play button in
videoshortcodes from cross-reference divs. (author: @bruvellu)(#13508): Add
aria-labelsupport tovideoshortcode for improved accessibility.(#13685): Fix remote font URLs in brand extensions being incorrectly joined with the extension path, resulting in broken font imports.
(#13825): Fix
column: marginnot working withrenderings: [light, dark]option. Column classes are now preserved when applying theme classes to cell outputs.(#13883): Fix unequal top/bottom spacing in simple untitled callouts.
(#13900): Warn when
renderingscell option contains duplicate names. Previously, duplicate names like[dark, light, dark, light]would silently use only the last output for each name.(#14065): Fix
SCSSParsingErrorwhen custom SCSS themes contain non-ASCII characters in selectors (e.g.,#présentation).
typst
(#12803): Fix callout text being centered instead of left-aligned when callout has a cross-reference ID prefix (e.g.,
#tip-abc).(#13249): Update to Pandoc's Typst template following Pandoc 3.8.3 and Typst 0.14.2 support:
Code syntax highlighting now uses Skylighting by default.
New template variables
mathfont,codefont, andlinestretchfor font and line spacing customization.New template variables
linkcolor,citecolor, andfilecolorfor link color customization.New template variable
thanksfor title footnote acknowledgment.New template variable
abstract-titlefor abstract header customization.PDF accessibility metadata: document title, author, and keywords are now set for PDF readers.
Two-column layout now uses
set page(columns:)instead ofcolumns()function, fixing compatibility with landscape sections.Title block now properly spans both columns in multi-column layouts.
(#13362): Remove unused
blockquotedefinitions from template.(#13452): Wraps subfigure captions generated by
quarto_super()inblockfunction to avoid emittingparelements. (author: @christopherkenny)(#13474): Heading font for title should default to
mainfont.(#13486): Update the Custom Typst Templates, which had been failing due to changes in the Typst language, to use the latest upstream packages and bundle them using
typst-gatherfor offline use. (ams, dept-news, fiction, ieee, letter, poster)(#13555): Add support for
icon=falsein callouts when used informat: typst.(#13589): Fix callouts with invalid ID prefixes crashing with "attempt to index a nil value". Callouts with unknown reference types now render as non-crossreferenceable callouts with a warning, ignoring the invalid ID.
(#13602): Fix support for multiple files set in
bibliographyfield inbiblio.typtemplate partial.(#13745): Fix relative
font-pathsfrom extensions or document metadata not resolving correctly for Typst compilation. Relative paths are now resolved against the document directory before being passed to the Typst CLI.(#13775): Fix brand fonts not being applied when using
citeproc: truewith Typst format. Format detection now properly handles Pandoc format variants liketypst-citations.(#13868): Add image alt text support for PDF/UA accessibility. Alt text from markdown captions and explicit
altattributes is now passed to Typst'simage()function. (Temporary workaround until jgm/pandoc#11394 is merged.)(#13870): Add support for
altattribute on cross-referenced equations for improved accessibility. (author: @mcanouil)(#13917): Fix brand logo paths not resolving correctly for Typst documents in project subdirectories. Brand logo paths are now converted to project-absolute paths before merging with document metadata, replacing the fragile
projectOffset()workaround.(#13942): Fix Typst compilation errors showing confusing internal stack traces. Users now see only the relevant Typst error message.
(#13950): Replace ctheorems with theorion package for theorem environments. Add
theorem-appearanceoption to control styling:simple(default, classic LaTeX style),fancy(colored boxes with brand colors),clouds(rounded backgrounds), orrainbow(colored start border and colored title).(#13954): Add support for Typst book projects via format extensions. Quarto now bundles the
orange-bookextension which provides a textbook-style format with chapter numbering, cross-references, and professional styling. Book projects withformat: typstautomatically use this extension.(#13978): Keep term and description together in definition lists to avoid breaking across pages. (author: @mcanouil)
(#13878): Typst now uses Pandoc's skylighting for syntax highlighting by default (consistent with other formats). Use
syntax-highlighting: idiomaticto opt-in to Typst's native syntax highlighting instead.(#14126): Fix Skylighting code blocks in Typst lacking full-width background, padding, and border radius. A postprocessor patches the Pandoc-generated Skylighting function to add
width: 100%,inset: 8pt, andradius: 2ptto the block call, matching the styling of native code blocks. Brandmonospace-block.background-coloralso now correctly applies to Skylighting output. This workaround will be removed once the fix is upstreamed to Skylighting.(#14202): Fix CSS inlining (
juice) failing on Windows when Quarto is installed in a path with spaces (e.g.,C:\Program Files\Quarto\).
pdf
(#4426): Add
pdf-standardoption for PDF/A, PDF/UA, and PDF version control. Supports standards likea-2b,ua-1, and versions1.7,2.0. Works with both LaTeX and Typst formats.(#9091): Fix vertical alignment div has no effect for pdf output
(#10291): Fix detection of babel hyphenation warnings with straight-quote format instead of backtick-quote format.
(#13248): Fix image alt text not being passed to LaTeX
\includegraphics[alt={...}]for PDF accessibility. Markdown image captions andfig-altattributes are now preserved for PDF/UA compliance.(#13661): Fix LaTeX compilation errors when using
mermaid-format: svgwith PDF/LaTeX output. SVG diagrams are now written directly without HTML script tags. Note:mermaid-format: pngis recommended for best compatibility. SVG format requiresrsvg-convert(or Inkscape withuse-rsvg-convert: false) in PATH for conversion to PDF, and may experience text clipping in diagrams with multi-line labels.(rstudio/tinytex-releases#49): Fix detection of LuaTeX-ja missing file errors by matching both "File" and "file" in error messages.
(#13667): Fix LaTeX compilation error with Python error output containing caret characters.
(#13730): Fix TinyTeX detection when
~/.TinyTeX/directory exists without binaries. Quarto now verifies that the bin directory and tlmgr binary exist before reporting TinyTeX as available, allowing proper fallback to system PATH installations.(#13919): Fix margin citations with citeproc showing unresolved
?quarto-cite:placeholders in PDF output. Caused by Pandoc 3.6+ adding\protectbefore\phantomsectionin bibliography anchors.(#13249): Update to Pandoc's LaTeX template following Pandoc 3.8.3 support:
New RTL support for LuaTeX with
\RL,\LRcommands andRTL,LTRenvironments.New
shorthandsvariable for Babel language shortcuts control.New
pdf-trailer-idsupport for reproducible PDF builds.New
cancelpackage support for\cancelcommand in math.
(#14017):
tColorOptions()in .tex file will now always have options in alphabetical order. Previously, they were in random order leading to a different .tex intermediates for identical .qmd.(#14241): Add
QUARTO_PDF_STANDARDenvironment variable as a fallback for thepdf-standardoption. Accepts comma-separated values (e.g.,QUARTO_PDF_STANDARD=ua-2), enabling PDF standard conformance without modifying document YAML. Works with both LaTeX and Typst formats.
revealjs
(#13722): Fix
light-content/dark-contentSCSS rules not included in Reveal.js format. (author: @mcanouil)(#13781): Fix
axeaccessibility checks failing with SCSS compilation error for revealjs format. Axe now loads as a standalone module for all HTML formats with format-specific report placement.(#13852): Scroll-view options (
scrollSnap,scrollProgress,scrollActivationWidth,scrollLayout) are now rendered in the Pandoc template instead of injected at runtime. Custom revealjs templates may need updating to include the scroll-view configuration block.(#14125): Add format-specific
axeaccessibility report for revealjs when usingaxe: {output: document}. Report appears as a dedicated slide appended to the deck with hover-to-highlight navigation to offending slides.
dashboard
(#14125): Add format-specific
axeaccessibility report for dashboards when usingaxe: {output: document}. Report appears as a Bootstrap offcanvas sidebar with automatic rescan when switching pages, card tabsets, or toggling the sidebar.
ipynb
(#13956): Fix crash when rendering to
ipynbformat with figure labels (#| label: fig-*) on cells for cross references.
Projects
(#12444): Improve pre/post render script logging with
Running scriptprefix and addQUARTO_PROJECT_SCRIPT_PROGRESSandQUARTO_PROJECT_SCRIPT_QUIETenvironment variables so scripts can adapt their output.(#13892): Fix
output-dir: ./deleting entire project directory.output-dirmust be a subdirectory of the project directory and check is now better to avoid deleting the project itself when it revolves to the same path.
website
(#13524): Add support for Plausible Analytics via
plausible-analyticsconfiguration option. Users can either paste their Plausible script snippet directly in YAML or provide a path to a file containing the snippet usingplausible-analytics: { path: _plausible_snippet.html }.(#13525): Algolia Insights now uses privacy-friendly defaults:
useCookie: falsewith random session tokens when cookie consent is not configured. Whencookie-consent: trueis enabled, Algolia scripts are deferred and only use cookies after user grants "tracking" consent, ensuring GDPR compliance.(#13547)
cookie-content: { type: express }is now the default. Previously it wastype: implied. It now means this will block cookies until the user expressly agrees to allow them (or continue blocking them if the user doesn't agree).(#13570): Replace Twitter with Bluesky in default blog template and documentation examples. New blog projects now include Bluesky social links instead of Twitter.
(#13716): Fix draft pages showing blank during preview when pre-render scripts are configured.
(#13847): Open graph title with markdown is now processed correctly. (author: @mcanouil)
(#13910): Add support for
logo: falseto disable sidebar and navbar logos when using_brand.yml. Works in website projects (sidebar.logo: false,navbar.logo: false) and book projects (book.sidebar.logo: false,book.navbar.logo: false).(#13932): Add
llms-txt: trueoption to generate LLM-friendly content for websites. Creates.llms.mdmarkdown files alongside HTML pages and a rootllms.txtindex file following the llms.txt specification.(#13951): Fix
image-lazy-loadingnot applyingloading="lazy"attribute to auto-detected listing images.(#9802, #14047): Fix search term highlighting disappearing on page scroll or layout events when navigating from search results. (author: @jtbayly, #13442)
(#14080): Algolia search results now highlight matching terms on the target page. Search term highlighting also works when matches span across formatted text (e.g., inline code, syntax highlighting).
book
(#12136): Fix false
citeproc: citation not foundwarnings when book metadata URLs contain@(e.g., Mastodon links). The@in URL strings is now escaped before passing to Pandoc, preventing misinterpretation as citation references.(#13769): Apply
repo-link-targetandrepo-link-reloptions to tools in book sidebar for consistent link attribute handling with website projects. (author: @mcanouil)
manuscript
(#10031): Fix manuscript rendering prompting for GitHub credentials when origin points to private repository. Auto-detection of manuscript URL now fails gracefully with a warning instead of blocking renders.
Publishing
Posit Connect Cloud
(#14027): Add
quarto publish posit-connect-cloudfor publishing static content to Posit Connect Cloud.
Confluence
(#12558): Fix 500 error when updating multiple Confluence attachments. Attachments are now uploaded sequentially instead of concurrently. (author: @fkgruber)
(#13414): Be more forgiving when Confluence server returns malformed JSON response. (author: @m1no)
gh-pages
(#14046): Fix
quarto publish gh-pagesleaving stale worktrees whengit commitfails due to missinguser.name/user.emailconfiguration. Git identity is now validated before worktree creation, and worktree cleanup uses--forceto handle modified/untracked files.
Lua API
(#13762): Add
quarto.paths.typst()to Quarto's Lua API to resolve Typst binary path in Lua filters and extensions consistently with Quarto itself. (author: @mcanouil)
Commands
use brand
(#13828): New
quarto use brandcommand copies and synchronizes the_brand/directory from a repo, directory, or ZIP file. See the prerelease documentation for details.
call build-ts-extension
(): New
quarto call build-ts-extensioncommand builds a TypeScript extension, such as an engine extension, and places the artifacts in the_extensionsdirectory. See the engine extension pre-release documentation for details.
install
(#4426): New
quarto install verapdfcommand installs veraPDF for PDF/A and PDF/UA validation. When verapdf is available, PDFs created with thepdf-standardoption are automatically validated for compliance. Also supportsquarto uninstall verapdf,quarto update verapdf, andquarto tools.(#11877, #10961, #6821, #13704): New
quarto install chrome-headless-shellcommand downloads Chrome Headless Shell from Google's Chrome for Testing API. This is the recommended headless browser for diagram rendering (Mermaid, Graphviz) to non-HTML formats. Smaller and lighter than full Chrome, with fewer system dependencies.(#12124): Support
quarto install tinytexon ARM64 Linux and adopt new TinyTeX naming scheme with.tar.xzcompression.
preview
(#13804): Fix intermittent preview crashes during re-renders by properly managing project context lifecycle. Resolves issues with missing temporary directories and
quarto_ipynbfiles when editing notebooks and qmd files together.
Extensions
Metadata and brand extensions now work without a
_quarto.ymlproject. (Engine extensions do too.) A temporary default project is created in memory.New Engine Extensions, to allow other execution engines than knitr, jupyter, julia. Julia is now a bundled extension. See the prerelease notes and engine extension documentation.
Engines
jupyter
(#13748): Fix stdin encoding to UTF-8 on Windows to correctly handle JSON in documents containing non-ASCII characters.
(#13936): Add support for q/kdb+ programming language in percent format notebooks and code cell options. (author: @benlubas)
(#13936): Fix
isJupyterPercentScriptregex to correctly detect percent scripts with[raw]cells and cells not at the start of the file. The regex now properly groups the alternation(markdown|raw)and uses multiline mode.
knitr
(#13958): Use max precision for
ojs_definenumber like this is the case forjupyterorjuliaengine.
Other fixes and improvements
(#8730): Detect x64 R crashes on Windows ARM and provide helpful error message directing users to install native ARM64 R instead of showing generic "check your R installation" error.
(#13402):
nfpm(https://nfpm.goreleaser.com/) is now used to create the.debpackage, and new.rpmpackage. Both Linux packages are also now built forx86_64(amd64) andaarch64(arm64) architectures.(#13528): Adds support for table specification using nested lists and the
list-tableclass.(#13575): Improve CPU architecture detection/reporting in macOS to allow quarto to run in virtualized environments such as OpenAI's
codex.(#13656): Fix R code cells with empty
lang: ""option producing invalid markdown class attributes.(#13776): Do not process tblwidths attributes for non-simple tables, since this breaks rowspan handling.
(#13832): Fix
license.textmetadata not being accessible when using an inline license (license: "text"), and populate it with the license name for CC licenses instead of empty string. (author: @mcanouil)(#13856): Add code annotation support for Typst and Observable.js code blocks. (author: @mcanouil)
(#13890): Fix render failure when using
embed-resources: truewith input path through a symlinked directory. The cleanup now resolves symlinks before comparing paths.(#13907): Ignore AI assistant configuration files (
CLAUDE.md,AGENTS.md) when scanning for project input files and in extension templates, similar to howREADME.mdis handled.(#14198): Ignore
.local.mdvariants of AI assistant configuration files (CLAUDE.local.md,AGENTS.local.md) during project render andquarto use template.(#13935): Fix
quarto install,quarto update, andquarto uninstallinteractive tool selection.(#13992): Fix crash when rendering div with both cross-reference ID and conditional visibility to PDF.
(#13997): Fix Windows dart-sass theme compilation failing when Quarto is installed in a path with spaces (e.g.,
C:\Program Files\) and the project path also contains spaces.(#13998): Fix YAML validation error with CR-only line terminators (old Mac format). Documents using
\rline endings no longer fail with "Expected YAML front matter to contain at least 2 lines".(#14012): Add
fr-CAlanguage translation for Quebec French inclusive writing conventions, using parenthetical forms instead of middle dots for author labels. (author: @tdhock)(#14032): Add
editor_optionswithchunk_output_typeto YAML schema for autocompletion and validation in RStudio and Positron.(#14156): Avoid O(n^2) performance in handling large code blocks.