Skip to content
HN On Hacker News ↗

0.15.0 - Typst Documentation

▲ 336 points 92 comments by schu 3w ago HN discussion ↗

Pangram verdict · v3.3

We believe that this document is fully human-written

0 %

AI likelihood · overall

Human
100% human-written 0% AI-generated
SEGMENTS · HUMAN 5 of 5
SEGMENTS · AI 0 of 5
WORD COUNT 1,519
PEAK AI % 1% · §2
Analyzed
Jun 15
backend: pangram/v3.3
Segments scanned
5 windows
avg 304 words each
Distribution
100 / 0%
human / AI fraction
Verdict
Human
Pangram v3.3

Article text · 1,519 words · 5 segments analyzed

Human AI-generated
§1 Human · 0%

Typst 0.15.0 (June 15, 2026)This section documents all changes to the Typst language and compiler between Typst 0.14.2 and 0.15.0. If you are migrating an existing document to Typst 0.15, make sure to check out the Migration guide. It walks you through changes you may need to make to your existing documents to ensure compatibility with Typst 0.15.HighlightsTypst now supports variable fontsHTML export now supports equations out of the box via MathMLWith the new, experimental bundle export target, a single Typst project can output multiple files (e.g. a multi-page website)A single document can now contain multiple bibliographiesTypst can now target multiple PDF standards at onceThe new within selector simplifies many introspection use casesThe new divider element represents a thematic break that templates can styleSpot colors enable use of custom pigments in offset printingWith the new file path type, project-relative paths can be passed to packagesThe new, more general typst eval CLI subcommand supersedes typst queryLayout convergence issues now result in detailed diagnosticsTwo long-standing list layout issues with marker alignment and centering were fixedParagraph handling in HTML export is improved, preventing unexpected paragraphs from appearingThis documentation now has a print versionLanguageSyntaxStylingText show rules now have tracebacks that include the matched text Fixed a crash with text show rules that match on multi-character symbols ScriptingLibraryFoundationsAdded file path type that is now accepted in all places where paths were previously only represented as strings A path constructed in one file can be used in another file, but will be resolved relative to its original fileLikewise, paths can be passed across package boundariesThe initial path type is very minimal, but additional features like file existence checks or directory walking are plannedCollectionsCalculationDate & time handlingConversionsThe panic function now displays strings as-is instead of showing their repr, making it more suitable for friendly, user-facing messages Changed repr of styles and locations to be more distinct ModelAdded divider element representing a thematic break that templates can style Bundle-related elementsBibliography

§2 Human · 1%

managementFootnotesNumberingThe par.first-line-indent property will now fold, meaning that partial dictionaries across different set rules or par calls are combined Added list.marker-align property for defining how to align list markers When omitted, it will default to the new baseline alignment (vertically), combined with end alignment (horizontally)TextAdded support for variable fonts The well-known variation axes ital, slnt, wght, wdth, and opsz are automatically set based on text weight, stretch, style, and sizeCustom variations can be configured via the new variations parameter of the text functionWhen using a variable font with Typst, the suffixes “Variable”, “Var”, and “VF” should be omitted as Typst trims them to unify static and variable fonts into a single family (Minor breaking change)Font featuresFixed that context text.font did not reflect the covers field Fixed uneven CJK-Latin spacing in justified paragraphs Fixed a bug where the lorem function would not produce the exact number of requested words Improved translations for Swedish , Portuguese , Czech , Latvian , Slovak , Polish , Vietnamese , Finnish , and Welsh Added font exception to avoid SimSun-ExtB being incorrectly merged with SimSun Updated New Computer Modern fonts to version 8.1.0 This update changes the default look of calligraphic letterforms in the math font; the previous style can be restored through show math.equation: set text(stylistic-set: 6)Updated Unicode components In particular, this fixed an issue with linebreaking of guillemetsMathLayoutText handlingThe class function now applies the class only to its direct body rather than recursively (Minor breaking change)More delimiter symbols (e.g. chevron.l) are now callable to produce an lr element (Minor breaking change)Fixed various bugs with rendering of mathematical expressions that look like function calls but in reality aren’t (e.g. $pi(1, 2)$, since pi is not a function) Fixed a bug with ordering of primes and nested attachments SymbolsAdded many new symbols and variants. View the codex 0.3.0 changelog for a full listing.

§3 Human · 0%

LayoutBaseline information is now retained in many more parts of the layout engine (Breaking change)In particular, text contained in a box with an inset is now aligned with the text surrounding the boxThis also fixes a bug where wrapping an inline equation in a box would shift its baselineSimilarly, using a block in an equation will keep the baseline intactLast but not least, the marker/number and item of a list or enum are now properly baseline-aligned with the first line of the item even if the item is vertically larger than a normal line Centering something in a list now centers based on the full available width rather than based on the maximum width of other list content Page layoutParagraph layoutAdded support for spacing that is both weak and fractional VisualizeAdded support for spot colors (also called separation colors) TilingsGradientsFixed various bugs with rectangle strokes in combination with radii Fixed a potential deadlock with font fallback in SVGs Various improvements to SVG image handling (see the resvg 0.46 and 0.47 changelogs); in particular:Added support for SVGs without top-level xmlns attributeAdded support for variable fonts in SVG using the font-variation-settings CSS propertyVarious improvements to PDF image handling (see the commits between d0b540f and 3483462 on hayro); in particular:Added support for JPEG2000 (JPXDecode) and JBIG2 (JBIG2Decode) imagesImproved parsing robustness for non-compliant filesAdded support for blend modesIntrospectionData LoadingExportBundleAdded new, experimental bundle export target With bundle export, you can emit multiple output files from a single Typst projectBundles can contain any combination of HTML pages, PDFs, PNGs, SVGs, and arbitrary assetsHTMLMathematical equations are now automatically exported to MathML (thanks to @mkorje) MathML defines how to render an equation, but also preserves its semanticsIf you’ve previously relied on show rules that use html.frame to render equations to SVG, try MathML output.

§4 Human · 0%

Switching to it will improve the accessibility of your document (though rendering will be somewhat less consistent across browsers).The box and block elements’ purpose is now aligned with paged export (Breaking change)box is used to bring block-level content inlineblock ensures inline-level content becomes block-levelDepending on the contained content, this may be achieved by setting the CSS display property or by wrapping in an additional <span> or <div>.The rules of how paragraphs are grouped in HTML have been adjusted to fix cases where paragraphs would appear unexpectedly (Breaking change)The list of HTML elements that can be grouped into paragraphs was tweaked (it now includes all phrasing content with the exception of elements that default to display: none)This default can be controlled by wrapping an element in a box or block as appropriateHTML elements that cannot be part of paragraphs (like a <div>) do not immediately force adjacent inline-level Typst content to be wrapped in a paragraph; rather, they are considered neutral for paragraph groupingParagraph creation is only forced by block-level Typst elements (as opposed to HTML elements). Built-in block-level elements like headings or images wrap the HTML elements they create in block elements to force adjacent inline content into paragraphs. Package authors should do the same to ensure paragraph creation is consistent between HTML and paged export.The target function can now be used without the html feature flag (the rest of HTML export remains feature-flagged) DOM structure and built-in show rulesSerializationHTML is now minified by default; use the --pretty CLI flag or the checkbox in the web app to pretty-print it HTML elementsWhitespace handlingPDFSVGPNGCommand Line InterfaceToolingDeprecationsRemovalsThe path element, use curve instead (Breaking change)The pattern type, use tiling instead (Breaking change)The pdf.embed element, use pdf.attach instead (Breaking change)The scoped functions

§5 Human · 0%

cbor.decode, csv.decode, json.decode, toml.decode, xml.decode, yaml.decode, and image.decode; directly pass bytes to the top-level functions instead (Breaking change)Various previously deprecated symbols, see the removals section in the dedicated changelog for a full listing (Breaking change)DevelopmentMigration guideThis section walks you through changes you may need to make to your existing documents to ensure compatibility with Typst 0.15.Typst 0.15 removes definitions from the Typst standard library that were already deprecated in previous Typst versions. If you are still relying on those, also refer to the Typst 0.14 and Typst 0.13 migration guides.BaselinesTypst now retains baseline information in more parts of the layout engine (most importantly for boxes, blocks, list items, and equations). This may lead to silent layout shifts. These are generally improvements, but if you’ve previously counter-acted bad-looking output through explicit adjustments, you may need to revisit those.In particular, Typst will now set the baseline of a box to the baseline of its first line of content and use it to align the box with its surrounding text. This yields better-looking output out of the box.// Typst 0.15+ Lorem #box(inset: 0.3em, stroke: 1pt)[ipsum] dolor.

// Typst 0.14 and below Lorem #box(inset: 0.3em, stroke: 1pt)[ipsum] dolor. File pathsIf you are using Typst on Windows, you may have used backslashes in your file paths. This syntax is not supported anymore. Consistent use of forward slashes ensures your document compiles on all supported platforms.// Typst 0.15+ ✅ #include "chapters/introduction.typ"

// Typst 0.14 and below ❌ #include "chapters\\introduction.typ"Moreover, the Typst CLI does not support non-Unicode input paths anymore. Such paths are exceedingly rare today.Math glyph stretchingIn mathematical typesetting, glyphs frequently need to be stretched to the size of some part of an equation. This primarily applies to brackets, but also accents, arrows, and more. In Typst, this happens implicitly through matched delimiters or explicitly through the lr and stretch functions.