Version 0.4.0 (May 20, 2023)
Footnotes
- Implemented support for footnotes
 - The 
footnotefunction inserts a footnote - The 
footnote.entryfunction can be used to customize the footnote listing - The 
"chicago-notes"citation style is now available 
Documentation
- Added a Guide for LaTeX users
 - Now shows default values for optional arguments
 - Added richer outlines in "On this Page"
 - Added initial support for search keywords: "Table of Contents" will now find the outline function. Suggestions for more keywords are welcome!
 - Fixed issue with search result ranking
 - Fixed many more small issues
 
Math
- Breaking change: Alignment points (
&) in equations now alternate between left and right alignment - Added support for writing roots with Unicode: For example, 
$root(x+y)$can now also be written as$√(x+y)$ - Fixed uneven vertical 
attachmentalignment - Fixed spacing on decorated elements (e.g., spacing around a canceled operator)
 - Fixed styling for stretchable symbols
 - Added 
tack.r.double,tack.l.double,dotless.ianddotless.jsymbols - Fixed show rules on symbols (e.g. 
show sym.tack: set text(blue)) - Fixed missing rename from 
ast.optoastthat should have been in the previous release 
Scripting
- Added function scopes: A function can now hold related definitions in its own
scope, similar to a module. The new 
assert.eqfunction, for instance, is part of theassertfunction's scope. Note that function scopes are currently only available for built-in functions. - Added 
assert.eqandassert.nefunctions for simpler equality and inequality assertions with more helpful error messages - Exposed list, enum, and term list items in their respective functions' scope
 - The 
atmethods on strings, arrays, dictionaries, and content now support specifying a default value - Added support for passing a function to 
replacethat is called with each match. - Fixed replacement strings: They are now inserted completely verbatim instead of supporting the previous (unintended) magic dollar syntax for capture groups
 - Fixed bug with trailing placeholders in destructuring patterns
 - Fixed bug with underscore in parameter destructuring
 - Fixed crash with nested patterns and when hovering over an invalid pattern
 - Better error messages when casting to an integer or float fails
 
Text and Layout
- Implemented sophisticated CJK punctuation adjustment
 - Disabled overhang for CJK punctuation
 - Added basic translations for Traditional Chinese
 - Fixed alignment of text inside raw blocks (centering a raw block, e.g. through a figure, will now keep the text itself left-aligned)
 - Added support for passing a array instead of a function to configure table cell alignment and fill per column
 - Fixed automatic figure 
kinddetection - Made alignment of enum numbers configurable, defaulting
to 
end - Figures can now be made breakable with a show-set rule for blocks in figure
 - Initial fix for smart quotes in RTL languages
 
Export
- Fixed ligatures in PDF export: They are now copyable and searchable
 - Exported PDFs now embed ICC profiles for images that have them
 - Fixed export of strokes with zero thickness
 
Web app
- Projects can now contain folders
 - Added upload by drag-and-drop into the file panel
 - Files from the file panel can now be dragged into the editor to insert them into a Typst file
 - You can now copy-paste images and other files from your computer directly into the editor
 - Added a button to resend confirmation email
 - Added an option to invert preview colors in dark mode
 - Added tips to the loading screen and the Help menu. Feel free to propose more!
 - Added syntax highlighting for YAML files
 - Allowed middle mouse button click on many buttons to navigate into a new tab
 - Allowed more project names
 - Fixed overridden Vim mode keybindings
 - Fixed many bugs regarding file upload and more
 
Miscellaneous Improvements
- Improved performance of counters, state, and queries
 - Improved incremental parsing for more efficient recompilations
 - Added support for 
.yamlextension in addition to.ymlfor bibliographies - The CLI now emits escape codes only if the output is a TTY
 - For users of the 
typstcrate: TheDocumentis nowSyncagain and theWorlddoesn't have to be'staticanymore