bash
quarto use template royfrancis/speckyNBIS Workshop
Roy Francis
02-Nov-2026
The custom template is a Quarto website project with HTML reports and Reveal.js presentations.
Quarto 1.8.25 or later is required. To download the starter template, run:
The downloaded template does not include _extensions/. Install the required extensions before the first render:
bash
# adds Font Awesome icons
quarto add --no-prompt quarto-ext/fontawesome
# adds a two-logo header to slides
quarto add --no-prompt royfrancis/quarto-revealjs-header
# adds a presenter pointer to slides
quarto add --no-prompt royfrancis/quarto-revealjs-pointer
# adds collapsible code output
quarto add --no-prompt mcanouil/quarto-collapse-output
# adds Bootstrap accordion components
quarto add --no-prompt royfrancis/quarto-accordion
# adds Leaflet maps
quarto add --no-prompt royfrancis/quarto-leaflet
# adds team profile layouts
quarto add --no-prompt royfrancis/quarto-team
# adds Toast UI schedule components
quarto add --no-prompt royfrancis/quarto-toastuiThe template command creates a website project that you can modify as needed. After installing the extensions, its key top-level files and directories are:
.
├── 404.md
├── assets/
├── _extensions/
├── home_about.qmd
├── home_coc.qmd
├── home_contents.qmd
├── home_faq.qmd
├── home_precourse.qmd
├── home_schedule.qmd
├── home_syllabus.qmd
├── index.qmd
├── LICENSE
├── schedule.csv
├── _metadata.yml
├── _quarto.yml
├── reports/
└── slides/
Quarto provides a live preview while you edit.
Preview builds the entire project, so it may fail if any document is incomplete.
The template sets freeze: false by default. Enabling freeze stores computational output, which can speed up project renders and allow pages to render when the original computation environment or tools are unavailable.
A Quarto document can be rendered from the terminal as follows:
This generates output in the docs/ directory, as configured by project: output-dir in _quarto.yml. Global output defaults are defined under format in _quarto.yml; a document can override them in its YAML front matter. For example, format: html produces an HTML page, while format: revealjs produces a Reveal.js presentation.
Start by updating _quarto.yml, which contains the project and website settings. See the documentation for Quarto projects and websites.
output-dir: docssite-url to your intended destinationopen-graph: true enables Open Graph metadata, and website: image sets the default image used in social link previewsassets/css/styles.scss)toc: true)number-sections: true)code-overflow: wrap)date: last-modified); the home pages override this with date: "". Locally the date is the file modification time; on CI a fresh checkout resets file times, so every page shows the build dateimage-placeholder of the listing page (reports/index.qmd, slides/index.qmd) unless a page sets image: in its front matter; image: also becomes the page’s social preview, otherwise website: image is used. A page-level override resolves relative to that document’s own folder, not the project root, so reaching a project asset needs a depth-correct relative path such as ../../assets/images/example.webplightbox: auto)assets/css/slides.scss)incremental: false), override with .fragment class## to define slides (slide-level: 2)chalkboard: true)image:); the same folder-relative resolution described above for HTML reports applieshero:)title-slide-attributes: data-background-image:)header-logo-*); the header-logo-*-url values are used as-is with no automatic path resolution, so they must be written relative to where the presentation actually renders (../../home_contents.html for this template’s fixed slides/<name>/index.qmd depth)execute settings
eval: true), and their source code is displayed (echo: true) by defaultfreeze: false disables storage of computational output by default; set it to true or auto if needed_metadata.yml and use it across the project as {{< meta metadata >}}. This is used for map information._quarto.yml or locally in individual qmd files{{< meta quarto_version >}}) or date/time ({{< meta current_year >}}), enabled through custom lua (assets/custom.lua)quarto-collapse-output extension. This is documented herefontawesome extension. Use {{< fa icon-name >}} to insert an icon. See the extension documentationquarto-accordion extension. Define named accordion data under accordion in page front matter and render it with {{< accordion name >}}. See home_faq.qmd and the extension documentationleaflet extension. Add map information as metadata in _metadata.yml and use the shortcode {{< leaflet mapname >}} to include the map in any qmd file. Leaflet maps are documented hereteam extension. Define profiles under team in page front matter and render a named group with {{< team name >}}. See home_about.qmd and the extension documentationtoastui extension. Define options under toastui in page front matter and render a named schedule with {{< toastui schedule >}}. In this template, home_schedule.qmd loads schedule.csv; each calendarId in the CSV must match an ID under calendars. See the extension documentationq on slides to show the pointer and q again to hide itquarto remove <extension-id>, for example, quarto remove quarto-ext/fontawesomeformat: html: css in page front matter if neededYou can now add course content.
The starter template should render completely using Quarto alone. Add R, Python or Julia code chunks as needed.
home_*.qmd are site pages. If you add, remove, or rename one, update website: navbar in _quarto.yml as neededschedule.csv. It is recommended that events are 15mins or longer for better display.reports/ and slides/, respectivelyreports/index.qmd and slides/index.qmd are listing pages that discover those documents##) as the highest heading level#| eval: false, rather than `{r eval=FALSE}`.qmd files beginning with _, such as _content.qmd, are child documents and are not rendered alone{{< include _content.qmd >}}. Includes do not work in .ipynb notebooks. Includes are documented here._variables.yml and used as {{< var variable >}}. Dynamic variables are documented here._metadata.yml and used as {{< meta metadata >}}.qmd documents that use code. This helps with reproducibility and debugging. For R, use sessionInfo() or sessioninfo::session_info(). For Python, use import session_info; session_info.show()