Info
This site is generated using the static site generator developed by the Typst Community. Please adjust the text content of this banner according to your usage requirements. At Typst GmbH's request, when publishing documentation, you must clearly indicate that it is non-official and display the version of Typst being documented. For details, refer to Issue #874 on typst/typst.
TypstDocumentEnglish
v0.dev.2025-10-13

Version 0.14.0

Highlights

  • Typst now produces accessible PDFs out of the box, with opt-in support for stricter checks and conformance to PDF/UA-1
  • Typst now supports all PDF/A standards
  • PDFs can now be used as images (thanks to @LaurenzV)
  • Added support for character-level justification (can significantly improve the appearance of justified text)
  • Added support for many more built-in elements in HTML export
  • Added typed HTML API (e.g. html.div) with individually typed attributes
  • Added support for multiple headers and subheaders in tables
  • Added title element for displaying the document title
  • Added frac.style property for producing skewed and inline fractions

PDF export

PDF export was fully rewritten to use the new krilla library, fixing various bugs and enabling many improvements. Known fixes are listed below, but there will likely be other changes in how the output behaves. If you spot any regressions, please report them on GitHub. (Thanks to @LaurenzV for creating krilla!) #5420

  • Typst now produces accessible PDFs out of the box. Such documents are suitable for consumption in a wide range of circumstances. That not only includes consumption by people with permanent or temporary disabilities, but also by those with different devices or preferences.
    • Typst PDFs are now tagged by default. Tags are rich metadata that PDF viewers can use to make the document consumable in other ways than visually (e.g., through a screen reader).
    • In addition, Typst can now emit documents conforming to the PDF/UA-1 standard. (PDF/UA-2 is not yet supported, but planned.)
    • There is an increasing amount of existing and upcoming legislation requiring documents to be accessible, for instance, the European Accessibility Act and the Americans with Disabilities Act.
    • For more details on all of this, read the new Accessibility Guide.
  • Typst now supports all PDF/A standards: PDF/A-1b, PDF/A-1a, PDF/A-2b, PDF/A-2u, PDF/A-2a, PDF/A-3b, PDF/A-3u, PDF/A-3a, PDF/A-4, PDF/A-4f, and PDF/A-4e. See the expanded PDF/A documentation for guidance on how to select a suitable standard. #5420 #7038
  • Typst now supports the PDF versions 1.4, 1.5, 1.6, and 2.0 in addition to PDF 1.7. See the relevant section of the PDF documentation for details. #5420
  • Added pdf.artifact function for marking content as not semantically meaningful #6619
  • Added experimental pdf.header-cell, pdf.data-cell, and pdf.table-summary functions for enhancing accessibility of documents with complex tables. These functions are guarded by the a11y-extras feature. They do not have a final interface and will be removed in the future, either through integration into table functions or through full removal. #6619
  • PDF heading bookmarks now contain the heading's numbering #6622
  • Attachments
    • Renamed pdf.embed to pdf.attach (the old name will remain as a deprecated alias until Typst 0.15) #6705
    • The mime property of pdf.attach is now checked for syntactical correctness (Minor breaking change)
    • Fixed parsing of the data argument of pdf.attach #6435
    • Attachments now smartly determine whether they should be compressed #6256
  • Text extraction (i.e. copy paste)
    • Now works correctly even when multiple different characters result in the same glyph #5420
    • Spaces between words at which a natural line break occurred are now correctly retained for text extraction #6866
    • Fixed mapping of hyphenation artifacts to Unicode text #6799
  • Images
    • CMYK images now work properly in PDF export #5420
    • Improved export of text in SVG images with a filter #5420
    • Improved compatibility of SVG images with Quartz rendering engine (the engine used in Apple Preview) #5420
    • Improved handling of SVG images with high group nesting depth #5420
  • Fixed a bug with text in patterns #5420
  • Fixed gradients with transparency #5420

HTML export

SVG export

  • Added support for COLR-flavored color glyphs #6693
  • Reduced amount of <g> grouping elements that are generated #6247

PNG export

Visualize

  • Added support for using PDFs as images using the new hayro library. PDFs will be embedded directly in PDF export, rasterized in PNG export, and turned into SVGs in SVG and HTML export. (Thanks to @LaurenzV for creating hayro!) #6623
  • Added support for WebP images #6311
  • Various minor improvements for SVG images (see the resvg 0.44 and 0.45 changelogs)
  • SVG images can now refer to external image files #6794
  • Clip paths are now properly anti-aliased #6570
  • Fixed gradients on curves where the last segment is curve.line #6647
  • Fixed stroke cap handling of shapes with partial strokes #5688
  • Fixed corner radius handling of shapes with partial strokes #6976
  • Fixed crash when sampling across two coinciding gradient stops #6166

Layout

  • Added opt-in support for character-level justification in addition to word-level justification, configured via the new par.justification-limits property. This is an impactful microtypographical technique that can significantly improve the appearance of justified text. #6161
  • Fixed wrong linebreak opportunities related to object replacement characters #6251
  • Fixed an issue where a breakable block would still produce an empty segment even if nothing fit into the first segment, leading to various undesirable behaviors in combination with fills, strokes, and stickiness #6335
  • Fixed crash with set rule for column or rowspan on a grid cell #6401
  • Fixed CJK-Latin-spacing at manual line breaks #6700

Math

  • Added frac.style property with new options for skewed and inline fractions #6672
  • Added math.equation.alt property for setting an alternative description for an equation #6619
  • Text handling
    • A single equation can now use multiple fonts #6365
    • Glyph layout in math now uses proper text shaping, leading to better handling of more complex Unicode features #6336
    • Generated characters in an equation (e.g. the produced by sqrt) can now be targeted by text show rules #6365
    • Added scr function for roundhand script font style #6309
    • Added dotless parameter to accent (typically for rendering a dotless accented i or j) #5939
    • Script-style glyphs are now preferred at reduced math sizes #6320
    • Fixed text.stroke in math #6243
    • Broken glyph assemblies are now prevented even when font data is incorrect #6688
  • Layout
    • Fixed a bug with vertical accent positioning #5941
    • Fixed positioning of bottom accents #6187
    • Fixed a bug with layout of roots #6021
    • Improved layout of vec and cases, making it consistent with mat #5934
    • Removed linebreak opportunity before closing bracket in inline math #6216
    • Tweaked sizing of stretchables (e.g. brackets and arrows) #6377
  • An augment line can now exist at the start and end of a matrix, not only in between columns and rows #5806
  • Shorthands and multi-character numbers do not bind more tightly than fractions anymore in cases like $x>=(y)/z$ #5925 #5996 (Minor breaking change)
  • Named arguments passed to symbols used as function now raise an error instead of being silently ignored #6192 (Minor breaking change)
  • The mid element does not force the "large" math class upon its contents anymore and instead defaults to "relation" #5980
  • Fixed the default math class of ⅋, ⎰, ⟅, ⎱, ⟆, ⟇, and ، #5949 #6537

Thanks to @mkorje for his work on math!

Model

  • Tables
    • Added support for multiple headers and subheaders in tables #6168
    • Table headers now force a rowbreak, i.e. an incomplete row before a header will not be filled with cells after the header #6687
    • Fixed a bug where headers and footers could accidentally expand to contain non-header cells #5919
  • Added title element for displaying the document title #5618
  • Added figure.alt property for setting an alternative description for a figure #6619
  • Link hit boxes for text are now vertically a bit larger to avoid issues with automatic link detection in PDF viewers #6252
  • The link function will now produce an error when passed an empty string as a URL #7049 (Minor breaking change)
  • The value of the number argument of enum.item now takes auto instead of none for automatic numbering #6609 (Minor breaking change)
  • Improved spacing of nested tight lists #6242
  • Fixed that quotes: false was ignored for inline-level quotes #5991
  • Fixed hanging indent for centered, numbered headings #6839
  • Fixed footnote.entry show rules breaking links from footnote to entry #6912
  • Hebrew numbering does not add Geresh and Gershayim anymore #6122

Bibliography

Text

  • The sub and super functions now use the subs and sups OpenType font features instead of special Unicode characters for typographic scripts, fixing semantical, sizing, and positioning issues #5777
  • The raw element
    • Tweaked default syntax-highlighting color scheme of raw text to make the colors more accessible #6754
    • JSON keys and string values now use different colors in the default raw syntax highlighting theme #6873
    • Fixed a crash when a raw syntax contains an unescaped trailing backslash #6883
    • Fixed tab indentation in raw text with CRLF line terminators #6961
  • Translations
  • An empty font list is not allowed anymore in text.font #6049 (Minor breaking change)
  • Added a warning when using a variable font as those are not currently supported #6425
  • Fixed usage of the same font with different coverage settings #6604
  • Fixed hyphens not showing up when hyphenating at specific positions (where invisible metadata exists) #6807
  • Fixed styling of repeated hyphens in languages with hyphen repetition #6798
  • Last resort font fallback does not consider default ignorable characters anymore during font selection #6805
  • Updated New Computer Modern fonts to version 7.0.4 #6376
  • Updated data and shaper to Unicode 16.0.0 #5407

Scripting

  • The in operator can now be used to check whether a definition is present in a module #6498
  • Added default parameter to array.first, array.last #5970, array.join #6932, str.first, and str.last #6554 methods
  • Added by parameter to array.sorted for sorting with a comparison function #5627
  • Added str.normalize function for Unicode normalization #5631
  • Added from, to, and sign methods to direction type #5893
  • Labels cannot be empty anymore #6332 (Minor breaking change)
  • The WebAssembly runtime used by the plugin system was updated and now supports SIMD #6997
  • Numberings and counters now use 64-bit numbers instead of platform-dependant numbers for consistency across platforms #6026
  • Improved consistency of how large numbers are handled in data loading functions #6836
  • The toml function is now guaranteed to return a dictionary and toml.encode must receive a dictionary (it already errored before when passed something else, but the new function signature makes the error clearer) #6743
  • Serialization of bytes in human-readable formats now uses repr #6743
  • Fixed slicing of last N elements of an array using the count parameter #6838
  • Fixed crash when the expression wrapped in a context expression is an anonymous function #6975
  • Fixed equality check between raw.line elements #6560
  • Fixed repr of labels being potentially syntactically invalid #6456
  • Fixed repr of functions modified through with #6773

Introspection

  • The following elements are newly locatable (i.e. they can be discovered with query, locate, etc. without having a label): par, table, enum, list, terms, title, figure.caption, footnote.entry, outline.entry, image, emph, strong, link, cite, raw, underline, overline, strike, and highlight #6619
  • Fixed issues with logical order in bidirectional text #5887 #6796
  • Fixed logical order of cells in right-to-left grid #6232
  • Fixed logical order of metadata at the starts and ends of paragraphs #6881 #6909
  • Fixed introspection positions of inline elements at the very start of a paragraph (previously the Y position of an element at the very start would differ from one in the middle of the first line) #6881

Styling

  • Fixed rare infinite loop in show rule application #6259

Performance

  • Optimized incremental compilation with a new algorithm that, in particular, eliminates cases of very slow compilation with heavy context usage #6683

Command Line Interface

  • Added typst info subcommand for emitting build and environment information #6761
  • Added typst completions subcommand for retrieving shell completions #6568
  • Added TYPST_IGNORE_SYSTEM_FONTS environment variable #6092
  • Added --ignore-embedded-fonts flag and TYPST_IGNORE_EMBEDDED_FONTS environment variable for disabling the use of fonts embedded into the Typst binary #7037
  • Added --no-pdf-tags flag for disabling the automatic generation of accessibility tags. These are emitted when no particular standard like PDF/UA-1 is selected to provide a baseline of accessibility. #6619
  • Added --target parameter to typst query #6405
  • Added --deps and --deps-format parameters for emitting a list of files compilation depends on. Supports the three formats json, zero, and make. #7022
  • Deprecated the --make-deps flag in favor of --deps with --deps-format make #7022
  • On Linux, the font search will now fall back to known font directories if none were loaded via Fontconfig. RazrFalcon/fontdb#71
  • The CLI will now warn when trying to watch the standard input #6381
  • Fixed race condition when two separate Typst CLI processes concurrently try to install a package #5979
  • Fixed incremental SVG export not writing output SVGs on changes that only affect the page (e.g. changing page.fill) #6810
  • Fixed a rare potential crash when stack space couldn't be grown as expected #6969

Tooling and Diagnostics

  • Errors in many kinds of external text files (e.g., bibliographies, JSON files, etc.) are now annotated within these files instead of at the positions where the files are loaded from a Typst file #6308
  • Warnings originating from within eval are now correctly emitted #6100
  • Diagnostic messages and hints
    • Improved error messages related to parsing of numbers #5969
    • The error message for an unsuitable CSL style now mentions the name of the style #6306
    • Added hints to various deprecated items with the removal timeline #6617
    • Added hint for the error message when an X/Y pair is expected #6476
    • Added hint for a label that appears in both the document and the bibliography #6457
    • Added additional hint for show rule recursion depth error #5856
    • Fixed inconsistent formatting of code points and strings in error messages #6487
  • Autocompletion
    • Labels will now be deduplicated in completions #6516
    • Math font autocompletions are now based on the presence of an OpenType MATH table instead of the word "Math" in the name #6316
    • Autocompletion immediately after a comma in a parameter list is now supported for explicitly triggered completions (e.g. via Ctrl/Cmd+Space) #6550
    • Citation style aliases are now displayed as autocompletions #6696
    • Fixed autocompletion false positives with cursor after parameter list #6475
    • Fixed autocompletion after partial identifier in math #6415
    • Fixed which definitions are suggested in math #6415
    • Fixed inapplicable method autocompletions being listed #5824
  • Tooltips
    • Fixed tooltip for scoped functions (e.g. calc.round) #6234
    • Fixed tooltip and details for figure references #6580
    • Expression tooltips now use × instead of x to indicate a repeated value #6163
  • Fixed jump from click (jumping to the source panel with a click in the preview) in presence of transformations and clipping #6037

Symbols

  • Added many new symbols and variants; many more than could be listed here. View the dedicated changelog for a full listing.
  • Code points that have a symbol and emoji presentation now have the correct variation selector attached depending on whether they appear in sym or emoji. That said, they still don't render consistently in Typst due to how font fallback works. typst/codex#114
  • The symbol function can now be used to create symbols that comprise not just one character, but one full grapheme cluster #6489

Deprecations

  • The name pdf.embed in favor of the new name pdf.attach #6705
  • The "chicago-fullnotes" bibliography style in favor of "chicago-notes" #6920
  • The "modern-humanities-research-association" bibliography style in favor of "modern-humanities-research-association-notes" #6994
  • The --make-deps CLI flag in favor of --deps with --deps-format make #7022
  • Various symbols, see the deprecation section in the dedicated changelog for a full listing

Development

  • The Default impl for Library had to be removed for crate splitting and trait coherence reasons, but you can get a drop-in replacement via use typst::LibraryExt #6576
  • The PdfOptions struct has a new tagged field, which defaults to true #6619 #7046
  • Fixed a potential panic in World::font implementations. Downstream World implementations might need to apply the same fix. #6117
  • Increased minimum supported Rust version to 1.88 #6637
  • The Docker container now has the optional non-root user typst #7058
Open official docs

Search