Releases: typst/typst
Release list
Version 0.15.0 (June 15, 2026)
Read the announcement blog post
View changelog with links into the documentation on typst.app/docs
Highlights
- Typst now supports variable fonts
- HTML export now supports equations out of the box via MathML
- With 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 bibliographies
- Typst can now target multiple PDF standards at once
- The new
withinselector simplifies many introspection use cases - The new
dividerelement represents a thematic break that templates can style - Spot colors enable use of custom pigments in offset printing
- With the new file
pathtype, project-relative paths can be passed to packages - The new, more general
typst evalCLI subcommand supersedestypst query - Layout convergence issues now result in detailed diagnostics
- Two long-standing list layout issues with marker alignment and centering were fixed
- Paragraph handling in HTML export is improved, preventing unexpected paragraphs from appearing
- The Typst documentation now has a print version
Language
Syntax
- File paths (e.g. in imports or
imagefunction calls) may not contain backslashes anymore; instead forward slashes must be used (Breaking change) - Added hints for invalid characters in code mode
- Added hint when trying to use a unary operator directly in an embedded expression using a hash (e.g.
#-30deg) - Fixed potential stack overflow crashes by enforcing a maximum parsing depth
- Fixed incremental parsing of unclosed strings
Styling
- Text show rules now have tracebacks that include the matched text
- Fixed a crash with text show rules that match on multi-character symbols
Scripting
- Extended hint when built-in definitions are shadowed to set and show rules
- Added hint when trying to spread one or multiple dictionaries into an array
- Improved diagnostics for invalid method calls
- Improved hint for unknown variables in math that are available in
std - Fixed a misleading error message when trying to assign to a temporary return value
Library
Foundations
- Added file
pathtype 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 file
- Likewise, paths can be passed across package boundaries
- The initial path type is very minimal, but additional features like file existence checks or directory walking are planned
- Collections
- Added
mapandfilterfunctions on dictionaries and arguments - Named arguments on
argumentsvalues are now accessible with field access syntax - The
slicefunctions on strings and arrays will now error if passing both anendand acount(Minor breaking change) - Added
inclusiveparameter torangefunction
- Added
- Calculation
- Added
asinh,acosh,atanh, anderffunctions tocalcmodule - Added
int.minandint.maxconstants for the minimum and maximum representable integer, respectively - Fixed behavior of
quofor negative integers - Fixed potential overflows in
norm,abs,gcd, andlcm - Floating-point calculations are now consistently deterministic across platforms
- Added
- Date & time handling
- The
offsetparameter ofdatetime.todaynow accepts durations as an alternative to integers, allowing for sub-hour precision offsets - Addition and subtraction of datetimes and durations now retains precision instead of clamping to full days in some cases
- The
datetimeconstructor now emits more precise errors when components are missing
- The
- Conversions
- Added
baseparameter tointconstructor to configure in which base to parse a string - Fixed that the
baseparameter of thestrconstructor was accepted for non-integer values if its value was10(Minor breaking change) - Added hint when trying to construct a string with base 1
- Added
- The
panicfunction now displays strings as-is instead of showing theirrepr, making it more suitable for friendly, user-facing messages - Changed
reprof styles and locations to be more distinct
Model
- Added
dividerelement representing a thematic break that templates can style - Bundle-related elements
- The
documentelement can now be constructed to produce individual documents in bundle export - Added
pathandformatparameters todocumentelement - Added experimental
assetelement
- The
- Bibliography management
- A single document can now contain multiple bibliographies
- Added
targetparameter tobibliographyelement to configure which citation is picked up by which bibliography - Added
groupparameter tobibliographyelement to configure how numbers are shared/reset across bibliographies - Added support for numeric values for the
monthkey in.bibfiles - Added support for BibLaTeX name options in
.bibfiles - Added support for propagating non-numeric
volumefields in.bibfiles to bibliographies - Improved sorting in bibliographies to take into account language conventions
- Improved interoperability with CSL styles; for a full listing of changes, review the Hayagriva 0.10.0 changelog
- Added support for setting directors on videos without a parent in Hayagriva YAML files
- Improved handling of
Anthosentries in Hayagriva YAML files by treating them aschapters in CSL
- Footnotes
- The link of a
footnoteis now within the superscript instead of around it, improving PDF tagging and HTML output - The thickness of the default footnote separator is now specified in font-relative instead of absolute units
- The link of a
- Numbering
- Added
numberingsupport for Armenian numerals , Arabic Abjad numerals , and Tibetan numerals - Greek
numberingnow uses the modern Greek style
- Added
- The
par.first-line-indentproperty will now fold, meaning that partial dictionaries across different set rules orparcalls are combined - Added
list.marker-alignproperty for defining how to align list markers- When omitted, it will default to the new baseline alignment (vertically), combined with
endalignment (horizontally)
- When omitted, it will default to the new baseline alignment (vertically), combined with
Text
- Added support for variable fonts
- The well-known variation axes
ital,slnt,wght,wdth, andopszare automatically set based on textweight,stretch,style, andsize - Custom variations can be configured via the new
variationsparameter of thetextfunction - When 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)
- The well-known variation axes
- Font features
- The
text.alternatesparameter now accepts an integer in addition to a boolean to select stylistic alternates other than0and1 - Parsing of tag names in
text.featuresis now more strict (Minor breaking change)
- The
- Fixed that
context text.fontdid not reflect thecoversfield - Fixed uneven CJK-Latin spacing in justified paragraphs
- Fixed a bug where the
loremfunction 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)
- This update changes the default look of calligraphic letterforms in the math font; the previous style can be restored through
- Updated Unicode components
- In particular, this fixed an issue with linebreaking of guillemets
Math
- Layout
- Improved layout of under/over elements like
underbrace - Slightly improved spacing around
math.opelements - In which situations cramped styles (with tighter spacing) are applied is now fully consistent with TeX and MathML Core
- The
sizeparameter of thelrfunction now consistently applies to middle delimiters in the same way it does to outer delimiters - The
sizeparameter of thelrfunction now resolves relatively to the height of just the inner content; it does not take the delimiters into account anymore (Minor breaking change) - Glyph stretching is now always relative to the base glyph rather than a potentially already scaled version (e.g. due to display sizing) (Minor breaking change)
- Fixed left/right alignment not being applied correctly due to spacing next to alignment points
- The
binomelement now uses different OpenType constants for layout; though this does not lead to visible changes with most fonts - The default length and stroke width of
math.cancellines is now specified in font-relative instead of absolute units - Fixed potential misalignment in
casesfunction
- Improved layout of under/over elements like
- Text handling
- Improved handling of multi-character symbols in math
- Fixed that some glyphs did not stretch correctly in script sizes
- Fraction, root, and under/over lines now respect
text.stroke - Accents in math are now always rendered in front of their base if they overlap
- The
classfunction now applies the class only to its direct body rather than recursiv...
Version 0.15.0, Release Candidate 1 (June 9, 2026)
Version 0.14.2 (December 12, 2025)
View changelog with links into the documentation on typst.app/docs
Security
-
Updated the WebAssembly runtime used for executing plugins. The version used in Typst 0.14.0 and 0.14.1 suffers from a memory handling vulnerability. Based on our investigation, the vulnerability would be very hard to exploit in practice, but an exploit could theoretically be feasible. In any case, we recommend upgrading to Typst 0.14.2. This holds in particular for local users. In the web app, the bug is not critical as the browser offers an extra layer of protection.
Typst 0.13.1 and below are not affected by this vulnerability.
Technical details: The
wasmiWebAssembly runtime versions used in 0.14.0 and 0.14.1 have a use-after-free memory handling bug in certain memory growth situations. Specifically, the bug occurs when the plugin tries to grow its memory, but allocating the requested amount of memory fails. Based on our investigation, the bug is hard to trigger in practice as the WebAssembly linear memory is always limited to 4GB on a technical level and modern operating systems rarely fail to serve a 4GB memory allocation request (typically not even under RAM pressure). Once the bug is triggered, it would also still be very challenging to turn it into an actual exploit. Regardless, we recommend upgrading to Typst 0.14.2 for protection against a potential exploit.
Diagnostics
- Added a hint when
array.sortedfails because a pair of elements could not be compared. This hint aids with fixing bugs in user code that were surfaced by a change in internal sorting behavior in Typst 0.14.1.
Contributors
Thanks to everyone who contributed to this release: @Andrew15-5, @cady-b, @ecstrema, @saecki, @ultimatile.
Version 0.14.1 (December 3, 2025)
View changelog with links into the documentation on typst.app/docs
PDF export
- Fixed regression where links to labelled elements would sometimes not work correctly
- Fixed bug where PDF text attributes could be written incorrectly
- Fixed crash in link handling
- Fixed crash for zero-sized pages
- Fixed crash when a table
vlineorhlinehas an out-of-bounds index - Fixed crash in formatting of font-related PDF export errors
- Fixed crash when a
footnoteorplaceelement was queried and reinserted into the document - Fixed crash for PNGs with invalid metadata
- Fixed bug where text in SVGs with
fill-and-strokepaint order could be exported incorrectly - Fixed bug with layer isolation in SVGs where blending/masking is used
- Fixed that table headers could be tagged incorrectly in some scenarios
- Fixed issues where generated PDFs could differ between 32-bit and 64-bit systems
- Upgraded JPEG decoder used during PDF export for improved compatibility, fixing a case where a valid JPEG was rejected
- A PDF document information dictionary that would be empty is now fully omitted instead
- A rare crash in PDF tagging was turned into a compiler error
HTML export
- Fixed export of table headers and footers with gutter
- A
pageset rule in HTML export is now a warning instead of a hard error, in line with how unsupported elements are generally treated
Math
- Fixed regression where
arrow.l.rcould not be used as an accent anymore - Fixed that single-letter strings did not react to spaces around them like multi-letter strings do
- Fixed that spacing around
matandvecwith a fence delimiter was whitespace-dependent - Fixed height calculation for horizontally stretched glyphs
Model
- Fixed regression where Typst would error in heading numbering functions that don't handle the counter state
(0,). This can occur in the first layout iteration. Such errors are usually automatically caught by Typst, which was not the case here.
Text
- Fixed regression where Typst would synthesize superscripts for some fonts even when typographic glyphs were available
- Fixed regression where some oblique fonts would be classified as italic
Scripting
- Fixed crash due to violated invariants in
array.sorted - Fixed crashes due to overflow in
calc.rem,calc.rem-euclid,calc.div-euclid,calc.quo, andcalc.gcd - Upgraded WebAssembly runtime, fixing a bug that plugins could run into
Command Line Interface
- Compiling to standard output in combination with
--deps --deps-format=make(which results in an error) will not produce an empty Make dependency file as a side effect anymore
Development
- Increased minimum supported Rust version to 1.89
Contributors
Thanks to everyone who contributed to this release: @saecki, @YDX-2147483647, @Andrew15-5, @MDLC01, @mkorje, @PgBiel, @Ri-Nai, @T0mstone, @andylizi, @bountonw, @fidelity-michael, @isuffix, @iwkjosec, @pavelzw, @tjjfvi, @tovrstra.
Version 0.14.0 (October 24, 2025)
Read the announcement blog post
View changelog with links into the documentation on typst.app/docs
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
titleelement for displaying the document title - Added
frac.styleproperty 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!)
- 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.
- 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.
- Added
pdf.artifactfunction for marking content as not semantically meaningful - Added experimental
pdf.header-cell,pdf.data-cell, andpdf.table-summaryfunctions for enhancing accessibility of documents with complex tables. These functions are guarded by thea11y-extrasfeature. They do not have a final interface and will be removed in the future, either through integration into table functions or through full removal. - PDF heading bookmarks now contain the heading's numbering
- Attachments
- Renamed
pdf.embedtopdf.attach(the old name will remain as a deprecated alias until Typst 0.15) - The
mimeproperty ofpdf.attachis now checked for syntactical correctness (Minor breaking change) - Fixed parsing of the
dataargument ofpdf.attach - Attachments now smartly determine whether they should be compressed
- Renamed
- Text extraction (i.e. copy paste)
- Now works correctly even when multiple different characters result in the same glyph
- Spaces between words at which a natural line break occurred are now correctly retained for text extraction
- Fixed mapping of hyphenation artifacts to Unicode text
- Images
- CMYK images now work properly in PDF export
- Improved export of text in SVG images with a filter
- Improved compatibility of SVG images with Quartz rendering engine (the engine used in Apple Preview)
- Improved handling of SVG images with high group nesting depth
- Fixed a bug with text in patterns
- Fixed gradients with transparency
HTML export
- Added support for many more built-in elements (the Model category is now fully covered)
- The
imageelement - The
footnoteandfootnote.entryelement - The
outlineandoutline.entryelement - The
bibliographyelement - The
smartquoteelement - The
subandsuperelements - The
underline,overline,strike, andhighlightelements - The
smallcapselement - The
lowerandupperfunctions
- The
- Added typed HTML API (e.g.
html.div) with individually typed attributes- For example, to generate a
videoelement you can now write#html.video(width: 400, src: "sunrise.mp4")instead of#html.elem("video", attrs: (width: "400", src: "sunrise.mp4")). Note how thewidthattribute takes an integer instead of a string.
- For example, to generate a
- Added support for intra-doc
linktargets - The
rawelement- Added syntax highlighting support
- Block-level
rawelements now emit both a<code>and a<pre>tag - The language tag of
rawelements is now preserved as adata-langattribute on the<code>tag
- The
authorsandkeywordsproperties of thedocumentfunction now yield corresponding HTML<meta>tags - The
html.elemfunction now supports custom HTML element names - Improved encoding of
html.frame - Empty attributes are now encoded with shorthand syntax (e.g.
<div hidden></div>) - Zero-sized horizontal weak spacing (
h(0pt, weak: true)) does not cause a "was ignored during HTML export" warning anymore, so it can be used to destruct surrounding spaces without producing any output, as in paged export - Fixed encoding of
<pre>and<textarea>elements that start with a newline - Fixed encoding of raw text elements
- Fixed sizing of
html.frame - Fixed
measurein HTML export - Fixed nested
html.frames - Fixed that a
boxwithout a body was ignored in HTML export - Fixed encoding of whitespace in HTML
SVG export
- Added support for COLR-flavored color glyphs
- Reduced amount of
<g>grouping elements that are generated
PNG export
- Fixed crash when text size is negative
Visualize
- Added support for using PDFs as images using the new
hayrolibrary. 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!) - Added support for WebP images
- Various minor improvements for SVG images (see the resvg 0.44 and 0.45 changelogs)
- SVG images can now refer to external image files
- Clip paths are now properly anti-aliased
- Fixed gradients on curves where the last segment is
curve.line - Fixed stroke cap handling of shapes with partial strokes
- Fixed corner radius handling of shapes with partial strokes
- Fixed crash when sampling across two coinciding gradient stops
Layout
- Added opt-in support for character-level justification in addition to word-level justification, configured via the new
par.justification-limitsproperty. This is an impactful microtypographical technique that can significantly improve the appearance of justified text. - Fixed wrong linebreak opportunities related to object replacement characters
- 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
- Fixed crash with set rule for column or rowspan on a grid cell
- Fixed CJK-Latin-spacing at manual line breaks and at sub- and superscript boundaries
Math
- Added
frac.styleproperty with new options for skewed and inline fractions - Added
math.equation.altproperty for setting an alternative description for an equation - Text handling
- A single equation can now use multiple fonts
- Glyph layout in math now uses proper text shaping, leading to better handling of more complex Unicode features
- Generated characters in an equation (e.g. the
√produced bysqrt) can now be targeted by text show rules - Added
scrfunction for roundhand script font style - Added
dotlessparameter toaccent(typically for rendering a dotless accented i or j) - Script-style glyphs are now preferred at reduced math sizes
- Fixed
text.strokein math - Broken glyph assemblies are now prevented even when font data is incorrect
- Layout
- Fixed a bug with vertical accent positioning
- Fixed positioning of bottom accents
- Fixed a bug with layout of roots
- Improved layout of
vecandcases, making it consistent withmat - Removed linebreak opportunity before closing bracket in inline math
- An
augmentline can now exist at the start and end of a matrix, not only in between columns and rows - Shorthands and multi-character numbers do not bind more tightly than fractions anymore in cases like
$x>=(y)/z$(Minor breaking change) - Named arguments passed to symbols used as function now raise an error instead of being silently ignored (Minor breaking change)
- The
midelement does not force the"large"math class upon its contents anymore and instead defaults to"relation" - Fixed error in math parsing when
..isn't followed by anything - Fixed the default math class of ⅋, ⎰, ⟅, ⎱, ⟆, ⟇, and ،
Thanks to @mkorje for his work on math!
Model
- Tables
- Added support for multiple headers and subheaders in tables
- Table headers now force a rowbreak, i.e. an incomplete row before a header will not be filled with cells after the header
- Fixed a bug where headers and footers could accidentally expand to contain non-header cells
- Added
titleelement for displaying the document title - Added
figure.altproperty for setting an alternative description for a figure - Link hit boxes for text are now vertically a bit larger to avoid issues with automatic link detection in PDF viewers
- The
linkfunction will now produce an erro...
Version 0.14.0, Release Candidate 2 (October 17, 2025)
Changes since Release Candidate 1:
-
PDF export
- Avoided bugs of some PDF viewers (e.g. Apple Preview) with links when possible (#7146)
- Fixed encoding of text attributes in PDF tagging in some circumstances (#7092)
- Fixed that Tagged PDF output could emit empty paragraphs (#7130)
- Fixed crash in PDF export on empty table (#7126)
- Fixed crash in PDF export when multiple captions appear inside a figure (#7177)
- Improved the hint for setting the document title (#7149)
- Improved the error message for empty heading titles in PDF/UA export (#7171)
-
HTML export
- The HTML export error about footnotes in combination with a custom
<head>or<body>can now be silenced with a custom footnote show rule (#7145) - Fixed crash with footnote references in HTML export (#7158)
- Fixed encoding of CSS relative values in HTML export (#7096)
- Fixed encoding of the placeholder HTML for
typst watch(#7108)
- The HTML export error about footnotes in combination with a custom
-
Text & Layout
-
Math
-
Introspection
- Fixed regression related to introspection of elements in grids that span multiple pages (#7124)
-
Development
- Fixed warning in cargo release builds due to a yanked package (#7141)
-
Various docs fixes and improvements
Version 0.14.0, Release Candidate 1 (October 10, 2025)
Version 0.13.1 (March 7, 2025)
View changelog with links into the documentation on typst.app/docs
Command Line Interface
- Fixed high CPU usage for
typst watchon Linux. Depending on the project size, CPU usage would spike for varying amounts of time. This bug appeared with 0.13.0 due to a behavioral change in the inotify file watching backend.
HTML export
- Fixed export of tables with gutters
- Fixed usage of
<html>and<body>element within context - Fixed querying of metadata next to
<html>and<body>element
Visualization
- Fixed curves with multiple non-closed components
Introspection
- Fixed a regression where labelled symbols could not be queried by label
Deprecations
- Fixed false positives in deprecation warnings for type/str comparisons
Contributors
Thanks to everyone who contributed to this release: @7ijme, @Andrew15-5, @Emm54321, @F2011, @MDLC01, @PgBiel, @SharzyL, @aodenis.
Version 0.13.0 (February 19, 2025)
Read the announcement blog post
View changelog with links into the documentation on typst.app/docs
Highlights
- There is now a distinction between proper paragraphs and just inline-level content. This is important for future work on accessibility and means that first line indent can now be enabled for all paragraphs instead of just consecutive ones.
- The
outlinehas a better out-of-the-box look and is more customizable - The new
curvefunction (that supersedes thepathfunction) provides a simpler and more flexible interface for creating Bézier curves - The
imagefunction now supports raw pixel raster formats for generating images from within Typst - Functions that accept file paths now also accept raw bytes, for full flexibility
- WebAssembly plugins are more flexible and automatically run multi-threaded
- Fixed a long-standing bug where single-letter strings in math (
$"a"$) would be displayed in italics - You can now specify which charset should be covered by which font family
- The
pdf.embedfunction lets you embed arbitrary files in the exported PDF - HTML export is currently under active development. The feature is still very incomplete, but already available for experimentation behind a feature flag.
Model
- There is now a distinction between proper paragraphs and just inline-level content (Breaking change)
- All text at the root of a document is wrapped in paragraphs. Meanwhile, text in a container (like a block) is only wrapped in a paragraph if the container holds any block-level content. If all of the content is inline-level, no paragraph is created.
- In the laid-out document, it's not immediately visible whether text became part of a paragraph. However, it is still important for accessibility, HTML export, and for properties like
first-line-indent. - Show rules on
parnow only affect proper paragraphs - The
first-line-indentandhanging-indentproperties also only affect proper paragraphs - Creating a
par[..]with body content that is not fully inline-level will result in a warning - The default show rules of various built-in elements like lists, quotes, etc. were adjusted to ensure they produce/don't produce paragraphs as appropriate
- Removed support for booleans and content in
outline.indent
- The
outlinefunction was fully reworked to improve its out-of-the-box behavior (Breaking change)- Outline entries are now blocks and are thus affected by block spacing
- The
autoindentation mode now aligns numberings and titles outline-wide for a grid-like look - Automatic indentation now also indents entries without a numbering
- Titles wrapping over multiple lines now have hanging indent
- The page number won't appear alone on its own line anymore
- The link now spans the full entry instead of just the title and page number
- The default spacing between outline leader dots was increased
- The
fillparameter was moved fromoutlinetooutline.entryand can thus be configured through show-set rules - Removed
bodyandpagefields from outline entry - Added
indented,prefix,inner,body, andpagemethods on outline entries to simplify writing of show rules
- Added configuration to
par.first-line-indentfor indenting all paragraphs instead of just consecutive ones - Added
formparameter toreffunction. Setting the form to"page"will produce a page reference instead of a textual one. - Added
document.descriptionfield, which results in corresponding PDF and HTML metadata - Added
enum.reversedparameter - Added support for Greek numbering
- When the
linkfunction wraps around a container like a block, it will now generate only one link for the whole block instead of individual links for all the visible leaf elements. This significantly reduces PDF file sizes when combininglinkandrepeat. - The
linkfunction will now only strip one prefix (likemailto:ortel:) instead of multiple - The link function now suppresses hyphenation via a built-in show-set rule rather than through its default show rule
- Displaying the page counter without a specified numbering will now take the page numbering into account
Visualization
- Added new
curvefunction that supersedes thepathfunction and provides a simpler and more flexible interface. Thepathfunction is now deprecated. - The
imagefunction now supports raw pixel raster formats. This can be used to generate images from within Typst without the need for encoding in an image exchange format. - Added
image.scalingparameter for configuring how an image is scaled by PNG export and PDF viewers (smooth or pixelated) - Added
image.iccparameter for providing or overriding the ICC profile of an image - Renamed
patterntotiling. The namepatternremains as a deprecated alias. - Added
gradient.center,gradient.radius,gradient.focal-center, andgradient.focal-radiusmethods - Fixed interaction of clipping and outset on
boxandblock - Fixed panic with
pathof infinite length - Fixed non-solid (e.g. tiling) text fills in clipped blocks
- Fixed a crash for images with a DPI value of zero
- Fixed floating-point error in
gradient.repeat - Auto-detection of image formats from a raw buffer now has support for SVGs
Scripting
- Functions that accept file paths now also accept raw bytes
image,cbor,csv,json,toml,xml, andyamlnow support a path string or bytes and their.decodevariants are deprecatedplugin,bibliography,bibliography.style,cite.style,raw.theme, andraw.syntaxesnow accept bytes in addition to path strings. These did not have.decodevariants, so this adds new flexibility.- The
pathargument/field ofimageandbibliographywas renamed tosourceandsources, respectively (Minor breaking change)
- Improved WebAssembly plugins
- The
plugintype is replaced by apluginfunction that returns a module containing normal Typst functions. This module can be used with import syntax. (Breaking change) - Plugins now automatically run in multiple threads without any changes by plugin authors
- A new
plugin.transitionAPI is introduced which allows plugins to run impure initialization in a way that doesn't break Typst's purity guarantees
- The
- The variable name bound by a bare import (no renaming, no import list) is now determined statically and dynamic imports without
asrenaming (e.g.import "ot" + "her.typ") are a hard error (Breaking change) - Values of the
argumentstype can now be added with+and joined in curly-braced code blocks - Functions in an element function's scope can now be called with method syntax, bringing elements and types closer (in anticipation of a future full unification of the two). Currently, this is only useful for
outline.entryas no other element function defines methods. - Added
calc.normfunction - Added support for 32-bit floats in
float.from-bytesandfloat.to-bytes - The
decimalconstructor now also accepts decimal values - Improved
reprof symbols, arguments, and types - Duplicate symbol variants and modifiers are now a hard error (Breaking change)
Math
- Fixed a bug where single letter strings in math (
$"a"$) would be displayed in italics - Math function calls can now have hyphenated named arguments and support argument spreading
- Better looking accents thanks to support for the
flac(Flattened Accent Forms) anddtls(Dotless Forms) OpenType features - Added
lcmtext operator - The
boldfunction now works with ϝ and Ϝ - The
italicfunction now works with ħ - Fixed a bug where the extent of a math equation was wrongly affected by internal metadata
- Fixed interaction of
lrand context expressions - Fixed weak spacing being unconditionally ignored in
lr - Fixed sub/superscripts sometimes being in the wrong position with
lr - Fixed multi-line annotations (e.g. overbrace) changing the math baseline
- Fixed merging of attachments when the base is a nested equation
- Fixed resolving of contextual (em-based) text sizes within math
- Fixed spacing around up tacks (⊥)
Bibliography
- Prose and author-only citations now use editor names if the author names are unavailable
- Some non-standard but widely used BibLaTeX
editortypes likeproducer,writer,scriptwriter, andnone(defined by widespread stylebiblatex-chicagoto mean performers withinmusicandvideoentries) are now recognized - CSL styles can now render affixes around the bibliography
- For BibTeX entries with
eprinttype = {pubmed}, the PubMed ID will now be correctly processed - Whitespace handling for strings delimiting initialized names has been improved
- Uppercase spelling after apostrophes used as quotation marks is now possible
- Fixed bugs around the handling of CSL delimiting characters
- Fixed a problem with parsing multibyte characters in page ranges that could prevent Hayagriva from parsing some BibTeX page ranges
- Updated CSL APA style
- Updated CSL locales for Finnish, Swiss German, Austrian German, German, and Arabic
Text
- Added support for specifying which charset should be covered by which font family
- Added
allparameter tosmallcapsfunction that also enables small capitals on uppercase letters - Added basic i18n for Basque and Bulgarian
- Justification does not affect raw blocks anymore
- CJK-Latin-spacing does not affect raw text anymore
- Fixed wrong language codes being used for Greek and Ukrainian
- Fixed default quotes for Croatian and Bulgarian
- Fixed crash in RTL text handling
- Added support for
rawsyntax highlighting for a few new languages: CFML, NSIS, and WGSL - New font metadata exception for New Computer Modern Sans Math
- Updated bu...