🥽 Typst 0.14 just entered its final testing period – Your help is wanted

Hey folks!

With almost eight months since the last major release, we are excited to publish a Release Candidate for Typst 0.14 today.

Highlights

Typst 0.14 comes with new features around PDF, HTML, typesetting, scripting, and more. Here are just a few of the highlights:

  • Typst now produces accessible PDFs out of the box. This guarantees Universal Access, including for users of screen readers. We have added comprehensive documentation to help you produce accessible files throughout the reference and in our new Accessibility Guide. Try the PDF/UA-1 export with extra checks and let us know about your experience with the docs! This feature accomodates recent and pending regulation, including the European Accessibility Act (EAA) and the new DOJ guidance for Title II of the Americans with Disabilities Act (ADA), applying from April 2026.

  • Typst now supports all PDF/A standards, including PDF/A-4 for PDF 2.0 and all accessible conformance levels.

  • PDFs can now be used as images (across all export formats!), closing our 2nd most upvoted issue. Huge thanks @LaurenzV for making this possible.

  • You can now enable character-level justification to reduce the number of hyphens and improve the appearance of justified text. This microtypographical feature is not available in LaTeX, so we invite you to discover how you can make your documents more beautiful with this feature!

  • Many more built-in elements, including the whole Model category, are now supported by HTML export. HTML export remains experimental, but with these changes, it now reflects the complete semantic meaning of your document without requiring any custom show rules.

  • In addition to using html.elem, you can now manually create all HTML elements using the new typed API (e.g. #html.time(datetime: datetime.today()) instead of #html.elem("time", attrs: (datetime: datetime.today().display())). The typed HTML functions support all attributes the HTML spec defines as named arguments and accepts the appropriate native Typst data types.

  • Tables can now have multiple, hierarchical headers.

  • There is now a title element for displaying the document title. By default, this element will print the value of document.tile. This element allows users and template authors to style their templates more flexibly and create more accessible documents.

  • The new frac.style property produces skewed and inline fractions in mathematical equations.

This is where you come in…

Now we need your help to ensure that Typst 0.14 is compatible with the widest possible range of documents, packages, and templates in use today. Please check if the update has an impact on your work: As a web app user, you can open the settings panel of a project and choose “Typst 0.14 Testing” as your compiler version. For local testing, pre-built binaries are available in the GitHub release. Rust users can install Typst 0.14.0-rc.1 from Cargo. You can find the documentation for the Release Candidate on https://staging.typst.app/docs/.

If you are a regular user, you should check whether there are any unexpected bugs in your document that are not covered by the breaking changes in the changelog. We want to call out that the names of two popular citation styles changed in this release:

Style in Typst 0.13.0 Style in Typst 0.14.0-rc.1
chicago-fullnotes chicago-notes
modern-humanities-research-association modern-humanities-research-association-notes

The old style names will now raise a deprecation warning. Furthermore, if you used pdf.embed before, update your document to use pdf.attach instead. We have renamed this function to clarify terminology: Many PDF viewers render attached files not dissimilar to attachments in an email client, with a paperclip icon. Given that this release introduces PDF images, the term embedding has become too ambiguous.

If you are a template author, you should make sure that your template works with the new PDF standards introduced in Typst 0.14. Try to export your template in PDF/UA-1 and all PDF/A standards. This can be a good guide to test:

  • Start with PDF/UA-1 as it catches the most issues
  • PDF/A-1 is stricter than PDF/A-2 and A-3, which are stricter than PDF/A-4
  • The PDF/A conformance level A is stricter than level U, which is stricter than level B
  • PDF/UA-1 accessibility checks are stricter than accessibility checks in Level A of PDF/A-1-3

Ensure all your images have alternative descriptions, you correctly use Typst’s semantic elements, you place no links in artifacts, and none of your show rules break PDF tag nesting. Consider using the new title element where appropriate. You can use sys.version to check which Typst version you are running under if you want to submit an update now. Typst Universe will start to accept packages and templates that run exclusively on Typst 0.14 after its public release.

Likewise, if you operate the Typst CLI in an automatted production use case, be aware that the --make-deps CLI flag has been renamed in favor of --deps with --deps-format. If you use the official Docker container, improve your security posture by running as the pre-defined user typst instead of as root.

If you find any issues, you should report them to us as an issue on GitHub or in the feedback feature in the app, accessible everywhere from the Help menu.

We expect the final release of Typst 0.14 in the coming week or two, depending on the amount of feedback we get.

Thank you again for your contributions, packages, feedback, posts, and more which made this release possible! Together, let’s make Typst 0.14 the best version yet.

36 Likes


arrow is deference?

3 Likes

This is awesome news - I particularly love that we can now include PDF graphics.

One question: How do I style the title in a backwards-compatible way? I tried this:

if sys.version.at(1) >= 14 {
    show std.title: set text(15pt)
    show std.title: set par(leading:0.5em)
}

But the show rules only apply to the if block.

This should work, though I’m not sure how useful it is since the title element doesn’t exist in previous versions:

#set document(title: "The title")

#show std.title: it => {
  if sys.version.at(1) >= 14 {
    set text(15pt)
    set par(leading:0.5em)
    it
  } else {
    it
  }
}

#title()

I agree.

Though for versions, you should use version comparison for it to be reliable.

sys.version >= version(0, 14, 0)

Which is surprisingly missing from the docs… Document version type comparison by Andrew15-5 · Pull Request #7152 · typst/typst · GitHub

There is also backtrack – Typst Universe.

3 Likes

That doesn’t work. In v0.13.1, you’ll get the following error.

error: module `global` does not contain `title`

The following compiles with both v0.13.1 and v0.14.0-rc.1.

#show: body => if … {
  show title: …
  body
} else {
  body
}
2 Likes

That’s a smart idea. Thanks!

Typst 0.14 Release Candidate 2 now available

We have just published a second release candidate for Typst 0.14. It’s available on GitHub and crates.io and the “0.14.0 Testing” version in the web app has been updated as well. A list of the changes compared to the first release candidate is available on GitHub.

Thanks to everyone who has been testing the first release candidate over the past week, we’ve been able to iron out quite a few issues with the release. If you reported issues with the first release candidate, we’d appreciate if you could validate that these are now fixed. And if you didn’t have issues, we’d still appreciate you testing the second release candidate to avoid any new bugs from slipping in.

If all goes well, we plan to put out the full release next week!

8 Likes

In Natural Language – Accessibility – Typst Documentation:

In order for screen readers to pronounce your document correctly and translation software to work properly, you must indicate in which natural language your document is written. Use the rule #set text(lang: "..") at the very start of your document or your template’s capability to set a language.

Does this apply to HTML? <html lang="…"> is level A in WebAIM’s WCAG 2.0 Checklist, but it looks like it’s impossible to set lang for <html> unless I recreate the whole <html><head>…</head><body>…</body></html>?
If this is meaned to be supported, I can create an issue.

Update: I created `#set text(lang: …)` should affect `<html lang="…">` to conform WCAG 2.1 level A · Issue #7203 · typst/typst · GitHub.

Many thanks for this release !
I’m particularly interested in the pdf PDF/A supports : is the PDF/A-4F standard supported for video inclusion for example ?
Thanks !

Yes, PDF/A-4f is supported. You can attach a video to the file. It will not play inline. Instead, PDF viewers supporting the feature will render the video file as one of the attachments to this PDF, often behind a paper clip button. The user experience is not unlike email attachments: Users may need to open the video in another app.

The same can be accomplished with Typst 0.13 and PDF/A-3b by using the pdf.embed function (renamed to pdf.attach in 0.14)

If that helps, we were able to render 50+ reports using a Typst template for John Hopkins (typst 0.14.0-rc.1 (97896a60), didn’t try latest release candidate yet).

Everything looks good, and accessibility got much better too. Some things make the reports not pass PDF/A check, but it’s important to note that this might be our fault and not Typst itself:

  • we use Quarto (built-on Pandoc) that does things under the hood we don’t control
  • the Typst template we made might not follow all best practices according to Typst accessibility guide.

It’s open source: GitHub - claritydatastudio/state-immunization-reports

Hope that helps!

Edit: latest version of the Typst template can be found here (not merged in main yet).

3 Likes

Many thanks @reknih for this detailed and helpful answer !