RSSAmplifier

Blog

Mickaël CANOUIL

Posts on Quarto extensions and filters, Typst templates, R packages, and the tooling that keeps technical writing reproducible.

mickael.canouil.frRSS feed ↗20 posts

Latest posts

Gribouille 0.6.0: Wrangling Data and Breaks That Land on Round Numbers

Skip to main content Gribouille 0.6.0 is about the data before the plot, the numbers along the axis, and documentation. A set of wrangling verbs brings grouped aggregation, reshaping, and joining to the row-store data model, so the preparation stays in the document. Automatic breaks now come from the extended Wilkinson search, which puts ticks on rounder numbers closer to the data, and four…

Stop Duplicating Your Quarto Source

Skip to main content One Quarto source can produce a web page, a PDF, and a slide deck. The trouble starts when the three outputs need slightly different things, and the usual fix is to write the same content twice. 1 The Problem I write training material as one index.qmd per module. Each module produces a handout, an exercise booklet, and a slide deck, in HTML, in PDF through Typst, and in…

Gribouille 0.5.0: Native Density, and Scales Keyed by Aesthetic

Skip to main content Another Gribouille release. Gribouille 0.5.0 is all about density but not just that. Kernel density estimation runs natively now, in pure Typst, so densities, violins, two-dimensional densities, and ridgeline plots all draw without leaving the document. The LOESS smoother lands in the same pass. In addition to density, the one thing to watch when you upgrade is the scale…

Serving a Shiny App and Its Docs from One Process

Skip to main content A colleague asked how to embed great-docs -generated documentation inside a Shiny for Python app and serve both from a single process. I built a minimal demo to find out, and shared it a few weeks ago on LinkedIn and Bluesky , but I thought it deserved a proper write-up, so here it is. When a Shiny app and its package documentation live as two separate services, you get two…

R Package Architecture: Shiny, Quarto, targets, and S7

Skip to main content My recent posts have all been about Quarto and Typst. This one is different: it is about R ( yet, still a bit about Quarto too ). My day job is to conduct statistical analysis of omics data, and most of it is spent writing R code through packages, Shiny apps, and scripts. These are used by everyone from data scientists to clinicians who never open a terminal. This post is…

Gribouille 0.4.0: Temporal Scales, Any-Glyph Markers, and a Finer Grid

Skip to main content Another Gribouille release. Gribouille 0.4.0 is mostly about time and detail. Scales now read dates and times from plain ISO strings, so you no longer convert to epoch days by hand. The shape aesthetic accepts any character, so a letter or an emoji can be the point marker. The panel grid splits into a major and minor cascade, with minor gridlines drawn by default. And labs()…

Gribouille 0.3.0: Finer Guide Control and a Themed Compose

Skip to main content Another week, another Gribouille release. Gribouille 0.3.0 is narrower in scope than 0.2 , but it brings some wanted controls. The headline is guide control: a single argument now hides axis ticks and legends without touching the theme. Alongside that, compose() gains a theme: parameter, defer() replaces plot(..., defer: true) , geom-area() stacks by default, and annotate()…

Why Quarto Stuck: Four Years from a Biostatistician’s Desk

Skip to main content After four years of using Quarto every day, I want to explain why it stuck as my go-to for reports, slides, websites, and books. Before Quarto, that work was spread across R Markdown, bookdown , xaringan , and distill . Quarto folded all of that into one command line tool, and I have not looked back since the early days before v1. Note At a Glance Four years of daily Quarto…

Gribouille 0.2.0 and 0.2.1: Composing Plots and a Sturdier Core

Skip to main content 1 Introduction Gribouille shipped its first version a fortnight ago. This is the first feature update: 0.2.0 landed first, and 0.2.1 followed shortly after with align-panels and two more fixes, so this post covers the 0.2 update as a whole. It has two faces. On the surface, compose() learned to number, nest, title, share a legend across panels, and line those panels up across…

Build LinkedIn Carousels with Typst: the slide Layout

Skip to main content Introduction Since January 2026 I have made the carousels for my LinkedIn posts with Typst. It has worked well, so here is how I do it. A LinkedIn carousel is not a special thing. It is a multi-page document that the feed turns into swipeable cards, and you upload it as a single PDF. So if you can make a multi-page PDF, you can make a carousel. Typst is a fine tool for exactly…

Gribouille: a Grammar of Graphics for Typst

Skip to main content 1 Introduction Typst has grown from a curious newcomer to a credible alternative for scientific writing, reports, and slide decks. What it still lacked, until today, was a real grammar of graphics: a way to declare a figure with the same vocabulary you would reach for in ggplot2 , then have it draw, lay out, and align with the rest of the document. Gribouille (French for…

Quarto Reveal.js Extensions to Sharpen Your Slides

Skip to main content 1 Introduction Reveal.js is a flexible slide engine, but a few rough edges show up again and again when writing slides in Quarto. List fragments need a marker on every item, code annotations stay static, long talks repeat the same heading on continuation slides, and tabsets need a mouse click to advance. Each of the four small extensions below closes one of those gaps, and…

Branded Figures and Tables in R and Python with Quarto

Skip to main content Important Quarto Version This post was written and tested with Quarto CLI 1.9.37 . Some APIs or behaviours may differ in earlier stable releases. Quarto’s brand feature is a convenient way to keep a document’s look consistent across formats: define your colours, fonts, and logos once in a _brand.yml file, and everything from the navbar to the code blocks picks them up…

Building Quarto Typst Templates: Advanced Patterns (Part 2)

Skip to main content Important Quarto Version This tutorial was written and tested with Quarto CLI 1.9.29 (pre-release) . Some APIs, template syntax, or extension behaviours may differ in earlier stable releases. Tip TL;DR This tutorial covers advanced patterns for production-quality Quarto Typst extensions. Read Part 1 first for the foundational concepts. Handler factories : eliminate boilerplate…

Building Quarto Typst Templates: The Lua-Typst Bridge (Part 1)

Skip to main content Important Quarto Version This tutorial was written and tested with Quarto CLI 1.9.23 (pre-release) . Some APIs, template syntax, or extension behaviours may differ in earlier stable releases. Tip TL;DR This tutorial introduces the dual-layer architecture for building Quarto Typst extensions: Lua filters intercept markdown elements at parse time, Typst functions render styled…

Document-Type Dispatching in Quarto Typst Extensions

Skip to main content 1 The Problem: Multiple Document Types When building a Quarto Typst extension, you may want to support multiple document types: reports, letters, CVs. Each type has distinct layouts, headers, and styling requirements. While Quarto extensions can contribute multiple variants of the same base format 1 , this approach requires either sharing metadata across all contributed…

Quarto Wizard 2.0.0: Native Extension Management and Batch Operations

Skip to main content Quarto Wizard 2.0.0 is here with a major architectural overhaul and new features for managing your Quarto extensions. Quarto Wizard 2.0.0 is now available! Upgrade today from the VS Code marketplace or Open VSX Registry . From 1.0.0 to 2.0.0 Version 1.0.0 was not around for long. As I worked on improving Quarto Wizard and enabling features beyond what the Quarto CLI offers,…

Quarto Extensions Updater: Automating Extension Maintenance with GitHub Actions

Skip to main content Managing dependencies is a cornerstone of modern software development, and Dependabot has long been the gold standard for automating dependency updates in GitHub repositories. But what about Quarto extensions? I’m thrilled to introduce Quarto Extensions Updater 1.0.0 , a GitHub Action that brings Dependabot-style automation to Quarto extension management. If you maintain…

Optimising VS Code and Positron for Quarto: Essential Settings for Better Editing

Skip to main content After years of working with Quarto in both VS Code and Positron, I’ve refined a set of editor settings that significantly improve my document editing experience. These configurations address common pain points like div folding, Git diff readability, and workspace performance. The path to effortless editing is paved with thoughtful settings . Whether you’re just starting with…

Lua Best Practices for Quarto Extensions: Building Maintainable and Robust Extensions

Skip to main content Quarto extensions represent one of the most powerful aspects of the publishing platform, allowing developers to extend core functionality far beyond what’s possible with configuration alone. Through extensions, you can add custom shortcodes for embedding interactive content, create filters that transform document structure, develop entirely new output formats, and integrate…