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