Changelog

What changed, and when.

Every released version of the typst-render extension, and what each one changed.

0

0.21

0.21.0 (2026-08-02)

Breaking Changes
  • feat: output-directory now defaults to ./assets/typst-render, resolved relative to the document, instead of being unset. Compiled images are written into the project rather than kept only in the render cache under .quarto/, which a website does not copy to its output directory and therefore cannot serve once deployed. Set output-directory: "" to restore the previous behaviour.
  • fix: images named from a label or a block counter are written to a subdirectory of output-directory named after the document. Two documents in one directory both produced typst-block-1, so whichever rendered last overwrote the other’s image and one of the pages showed the wrong figure. An explicit output-filename is unaffected.
New Features
  • feat: inline {typst} expressions honour output-directory and output-source, writing typst-inline-<N> files alongside the images compiled from blocks.
  • feat: inline {typst} expressions accept the compilation options as attributes: format, dpi, background, foreground, cache, classes, preamble, and input, as in `{typst} $x$`{format="png" dpi="300"}.
  • feat: an inline expression with both a light and a dark colour is compiled for each mode in HTML output and emitted with Quarto’s light-content and dark-content classes, as blocks already were.
Bug Fixes
  • fix: an inline expression with output: asis was emitted as raw Typst for every writer, so it vanished from HTML, LaTeX, and DOCX output. Only Typst output passes it through now; the others compile an image, as they do for a block.
  • fix: an inline expression with output: asis is scoped in #[ ... ] and gets the colour bindings, the typst_define values, and the preamble that blocks get. A #let or #set inside it no longer leaks into the rest of the document, and the preamble is finally in scope.
  • fix: inline expressions honour eval and include. eval: false leaves the expression as inline code, and include: false compiles and writes the image without embedding it.
  • fix: inline expressions warn about the PDF-to-PNG fallback in HTML output and about dual colours under format: html, and a failed compilation now leaves a typst-render-error marker in the text instead of the original code.

0.20

0.20.1 (2026-08-01)

Documentation
  • docs: Add a documentation website under docs/, built on the atelier project type and published to https://m.canouil.dev/quarto-typst-render/, compiling its figures with the extension itself.
  • docs: Record that a document containing {typst} blocks needs engine: markdown, since Quarto’s engine detection otherwise selects Jupyter and the render fails for want of a kernel.
  • docs: Record that code-window claims {typst} blocks at pre-quarto and prevents this filter from ever seeing them.
  • docs: Trim README.md to a landing page pointing at the website.
  • docs: Add the Pages workflow, which renders docs/ on pull requests and deploys it from the release tag.
  • docs: Add the Quarto Extensions Updates workflow, scanning docs for the website’s own dependencies.

0.20.0 (2026-07-27)

Breaking Changes
  • chore: require Quarto >= 1.10.18, which bundles Typst 0.15. Native HTML output (format: html) and math: typst now work with the bundled Typst binary, so the QUARTO_TYPST environment variable is no longer needed for early access.

0.19

0.19.0 (2026-06-18)

New Features
  • feat: add a code-line-numbers option for echoed Typst source.

0.18

0.18.0 (2026-06-17)

New Features
  • feat: add a html value for format that renders {typst} blocks and inline expressions as native HTML for HTML-based output, using Typst 0.15 HTML export. Maths become accessible MathML and prose becomes selectable semantic HTML instead of an image. It requires a Typst >= 0.15 binary via QUARTO_TYPST and falls back to SVG otherwise; content that relies on layout must be wrapped in Typst’s html.frame.
  • feat: add a global math: typst option that renders every document equation ($...$ and $$...$$) as Typst math syntax rather than LaTeX. HTML output gets native MathML and Typst output passes the maths through unchanged, while Quarto equation numbering and @eq- cross-references keep working. Reference the extension by name without an at: stage so its filters run where they are needed.

0.17

0.17.0 (2026-05-31)

New Features
  • feat: add output-source option that writes the compiled Typst source (preamble plus colour bindings plus user code) next to each saved image, using the same stem with a .typ extension. Set globally or per block; requires output-directory or output-filename to take effect. Dual-mode renders write -light.typ and -dark.typ next to the image variants.
Bug Fixes
  • fix: prevent colour double-wrap when a per-block background or foreground value is already a Typst-native constructor such as rgb("#fff") or hsl("..."). The previous logic wrapped any string starting with rgb( or hsl(, producing invalid rgb("rgb("#fff")") literals. CSS functional notation (rgb(255, 0, 0), hsl(120, 50%, 50%)) without quoted arguments is still wrapped so Typst’s string-form rgb() constructor can parse it.
Documentation
  • docs: explain in the PPTX-inline warning why inline Typst is unsupported (Pandoc cannot embed images inside text runs in PPTX slides) while block-level {typst} blocks continue to work.

0.16

0.16.0 (2026-05-27)

New Features
  • feat: support Quarto code annotations on echoed Typst source. With echo: true, // <N> markers on Typst source lines plus a following numbered list render as linked code annotations, composing with code-fold. Other echo values (false, fenced) strip the markers and ignore annotations.

0.15

0.15.0 (2026-05-25)

New Features
  • feat: add code-fold and code-summary options for echoed Typst source. For HTML-based output, code-fold: true (or show to render expanded) collapses only the echoed code in a <details> block, with code-summary setting the disclosure text (defaults to Code, rendered as Markdown). The rendered output stays outside the fold, and the options are ignored for non-HTML formats.

0.14

0.14.0 (2026-05-24)

New Features
  • feat: compilation failure warnings and error blocks now name the failing unit, using its label when set, otherwise an auto identifier (typst-block-N for blocks, typst-inline-N for inline expressions) where N is stable per unit.
Refactoring
  • refactor: drop the redundant Error running .../typst (error code N) log line on compilation failure; the Typst CLI already prints its diagnostic to the terminal.

0.13

0.13.4 (2026-05-23)

  • fix: the default Typst compilation root is now the document’s own directory instead of the Quarto project directory, so document-relative paths such as csv("data/energy_cleaned.csv") resolve against the document. A relative root resolves against the document directory; a leading / still means the project root.

0.13.3 (2026-05-23)

  • fix: include: false now compiles the block and writes output files (matching Quarto semantics) while embedding nothing in the document, instead of skipping compilation entirely. Use eval: false to skip computation.

0.13.2 (2026-05-23)

Bug Fixes
  • fix: the alt (and <prefix>-alt) cell option was not propagated to the rendered image when the block carried a cross-reference label. The alt text lived only in the image caption inlines, which Quarto’s figure pipeline discards once the image is wrapped in a FloatRefTarget. The alt text is now also emitted as a fig-alt attribute on the image, so it reaches the <img alt> (HTML), \includegraphics[alt=...] (LaTeX), and image(alt: ...) (Typst) outputs.

0.13.1 (2026-05-14)

  • no user-facing changes.

0.13.0 (2026-05-14)

New Features
  • feat: add typst_define() helpers (R and Python) that push named values from a knitr or jupyter session into every {typst} cell of the document. Defined values are exposed as a single dict named typst_define accessible as #typst_define.<name>. Supports scalars, strings, booleans, arrays, nested objects, R data frames (column-wise), pandas/polars DataFrames (column-wise), and numpy arrays. Helpers ship under _extensions/typst-render/_resources/. The data chunk that calls typst_define() must use the chunk option output: asis so the emitted metadata block is not wrapped in a cell-output <div>.
  • feat: the R helper registers a passthrough knitr engine for typst on source so ```{typst} chunks in knitr documents no longer emit “Unknown language engine” warnings and pass through cleanly to the typst-render filter.

0.12

0.12.2 (2026-05-11)

Bug Fixes
  • fix: inline Typst expressions written with the backtick text-prefix syntax (`{typst} ...`) were not compiled to images; the matcher looked for a literal {typst} prefix instead of {typst}, so the expression was always emitted verbatim.

0.12.1 (2026-05-07)

Bug Fixes
  • fix: strip the surrounding braces from the echoed code block class so echo: true produces a typst class (instead of {typst}) and echo: fenced produces a ```{typst} wrapper (instead of ```{typst}), restoring syntax highlighting on the echoed source.

0.12.0 (2026-04-22)

New Features
  • feat: the cache is now invalidated when any global or per-block rendering option changes, including font-path, package-path, and root which previously only affected the Typst CLI invocation and were invisible to the cache key.
  • feat: the cache is now invalidated when any locally-imported Typst file changes; #import and #include paths are scanned from the compiled source (code and inlined preamble) and their contents are included in the cache hash, recursively.
  • feat: document colours are exposed to Typst library and package code via sys.inputs (typst-render-foreground, typst-render-background) and as #let bindings (_typst_render_foreground, _typst_render_background), allowing imported theme functions to adapt to the document’s colour scheme. Only hex colours are exposed via sys.inputs; all colour formats are available via the #let bindings.
Removed
  • revert: library fingerprint (scanning lib.typ and src/ under the project root) introduced in 0.11.0 has been replaced by generic import tracking via #import/#include scanning.
Breaking Changes
  • refactor: replace cache: clean with a dedicated cache-refresh boolean option (default false). Set cache-refresh: true to remove stale cache files after each render.
  • refactor: cache: false no longer deletes existing cache files on startup; it now only skips cache lookup and write for the current render.

0.11

0.11.0 (2026-04-21)

New Features
  • feat: add library fingerprint to cache key so edits to .typ source files under the project root invalidate stale rendered images.
  • feat: expose document colours to Typst library theme functions via sys.inputs (typst-render-foreground, typst-render-background), allowing imported files to adapt to the document theme.

0.10

0.10.1 (2026-04-18)

Bug Fixes
  • fix: prevent double-wrapping of resolved brand colours when background: auto or foreground: auto is set globally with a _brand.yml.

0.10.0 (2026-04-15)

New Features
  • feat: add output-directory and output-filename options to save compiled images to user-specified locations.

0.9

0.9.3 (2026-04-15)

Bug Fixes
  • fix: update the Typst language declaration to use curly braces (‘{typst}’) for CodeBlock.

0.9.2 (2026-04-15)

Bug Fixes
  • fix: resolve cache image paths relative to document directory for subdirectory rendering.

0.9.1 (2026-04-09)

Bug Fixes
  • fix: Use numeric type for dpi option instead of string.

0.9.0 (2026-03-23)

Refactoring
  • refactor: Replace monolithic utils.lua with focused modules (string.lua, logging.lua, metadata.lua, pandoc-helpers.lua, html.lua, paths.lua, colour.lua).

0.8

0.8.0 (2026-03-18)

  • feat: add foreground option to set text fill colour for rendered images.
  • feat: add brand/theme-aware colour support for foreground and background. Both options now accept Typst colour literals, CSS hex strings (auto-converted), auto (reads from _brand.yml), or a {light, dark} map for theme-aware rendering. HTML/Reveal.js outputs render both variants using Quarto’s .light-content/.dark-content classes; other formats use brand-mode to select one variant.
  • feat: add align option for horizontal image alignment (left, center, right, default).
  • feat: support multiple preamble files via a list of strings or .typ paths.
  • feat: surface Typst stderr in compilation error output for easier debugging.
  • fix: prevent nil-defaulted options (format, file, input, classes, label, align, etc.) from leaking as HTML attributes on output images.
  • fix: resolve table-valued colours for inline code to avoid runtime crashes with dual-mode global config.
  • fix: escape image path in inline HTML image src attribute.
  • fix: warn when global input option is not a YAML map.
  • fix: warn when comment-pipe options appear after code instead of silently ignoring them.
  • refactor: remove redundant get_extension_config call.
  • docs: annotate global-only options in schema descriptions.

0.7

0.7.0 (2026-03-12)

  • feat: add alt text accessibility for block and inline rendered images. Block images fall back to caption, then truncated source code, instead of empty alt text. Inline images use the Typst source code as alt text instead of a generic string. Users can provide explicit alt text on inline code via `{typst} ..`{alt="..."}.

0.6

0.6.1 (2026-03-11)

  • fix: support inline Typst rendering in DOCX output with proper text-height sizing.
  • fix: skip inline Typst for PowerPoint output with a warning (Pandoc limitation).
  • fix: add generic pandoc.Image fallback for inline Typst in non-HTML formats.

0.6.0 (2026-03-11)

  • feat: add inline Typst rendering support for `{typst} ...` expressions, compiled to images sized to match surrounding text.
  • feat!: compile to image by default for Typst output (breaking change). The output option now accepts true, false, or asis. Use output: asis for native Typst passthrough (previously the default).

0.5

0.5.0 (2026-03-10)

  • feat: add root option to set the Typst compilation root directory (--root).
  • feat: add font-path option to specify additional font directories (--font-path).
  • feat: add input option to pass key-value pairs to Typst via --input (accessible via sys.inputs).
  • feat: add package-path option to specify a local Typst package directory (--package-path).
  • feat: font-path now accepts a list of paths for multiple font directories.
  • feat: add cache: clean mode to remove stale cache files after each render.
  • feat: add multi-page output support with pages and layout-ncol options.
  • refactor: use per-document cache subdirectories under .quarto/typst-render/<doc-stem>/.
  • refactor: use stdin instead of temporary files for Typst compilation.

0.4

0.4.0 (2026-03-09)

  • feat: add classes option for CSS classes on output image elements.
  • feat: add img-fluid class by default for responsive images in HTML output.
  • feat: forward unknown code-cell options as HTML attributes on the output image element.

0.3

0.3.0 (2026-03-09)

New Features
  • feat: add output-location support for Reveal.js presentations (fragment, slide, column, column-fragment).
  • feat: adopt Quarto “/” path convention for project-root-relative file paths (#13).
  • feat: add include and output options to control block visibility and compilation.
  • feat: add prefix-aware option resolution (cap, alt, align) to code-cell module.
Refactoring
  • refactor: move cross-referencing logic (ref_type, resolve_caption, resolve_alt, wrap_crossref) to code-cell module.
  • refactor: use quarto.format.* API for output format detection (#4).
  • refactor: use pandoc.path.join() for path construction (#5).
  • refactor: use quarto.utils.string_to_inlines() for caption parsing (#6).
  • refactor: simplify resolve_typst_bin() by removing pcall wrapper (#7).
  • refactor: inline format validation and remove validation module dependency (#8).
  • refactor: use pandoc.utils.stringify directly (#9).
  • refactor: remove unused validation module (#11).

0.2

0.2.0 (2026-03-08)

  • refactor: use explicit --format flag for typst compile command.

0.1

0.1.0 (2026-03-08)

  • feat: initialise typst-render extension.
Back to top