Extending Quarto workshop @ posit::conf(2025)
Wifi: Posit Conf 2025 Password: conf2025
Materials: pos.it/quarto-extend-conf25
Download exercises: https://github.com/posit-conf-2025/quarto-extend-exercises
Join the discord: #workshop-quarto-extend
Full schedule at: pos.it/quarto-extend-conf25
| Time | |
|---|---|
| 10:30 - 11:00 | Coffee Break |
| 12:30 - 13:30 | Lunch |
| 15:00 - 15:30 | Coffee Break |
| 17:00 | END |
Carlos
Elliot
Introduce yourself to your neighbor(s):
04:00
Raise your color post-it note
Ask in Discord
Talk to us during breaks or your-turns
Within documents, across documents, across projects, and across people
Quarto Extensions: the mechanism for sharing across projects and people. This module
Extending Quarto: entrypoints for customizing Quarto regardless of whether you bundle them as an extension. Most useful:
Let’s jump in!
Add the quarto-revealjs-clean extension to the project in 01-basics/ by running:
Where did the file _extension.yml get installed?
Compare _extension.yml and the files alongside it to those in the source on GitHub. What’s the same? What’s different?
Preview slides.qmd. Then, edit to use the clean-revealjs format, and preview.
Done? Browse https://m.canouil.dev/quarto-extensions for other extensions and explore their source.
Exercise: 01-basics/
10:00
Installed: _extensions/grantmcdermott/clean/_extension.yml
Source: https://github.com/grantmcdermott/quarto-revealjs-clean/_extensions/clean/_extension.yml
Installing copies the contents of the _extensions/clean to our project.
Other files alongside _extensions/ are not copied with quarto add, but would be had we done quarto use template:
“Each extension is defined by its _extension.yml file which contains the metadata about the extension as well as the what items it contributes when used.”
Possible contributes: formats, project, metadata, brand, shortcodes, filters, revealjs-plugins
quarto-revealjs-clean is an example of a custom format extension.
A way to share Quarto options:
_extensions/myformat/_extension.yml
User needs to specify format: myformat-html in their document or _quarto.yml.
Combine with other resources, for highly customized outputs:
Still in 01-basics/:
Edit _extension.yml to add a custom html format that sets 2-3 of your favorite HTML options.
Edit slides.qmd to use your custom format, and preview.
Exercise: 01-basics/
08:00
quarto create extension







.md → Reader → ASTMarkdown is parsed into a representation called the Abstract Syntax Tree (AST)


Filters transform nodes in the AST
E.g. cross-references (Quarto), citations (Pandoc), and custom filters (extensions & you).
.html
Writers convert the content to the desired output format.
.html
Combined with boilerplate from template and partials.
Notes that we want as slides (format: revealjs) and a document (format: html).
Title slide in every slide deck controlled by metadata

Partial
Special slide combines boilerplate with content.

Filter