typst /typst

A markup-based typesetting system that is powerful and easy to learn.

★ 57,085⑂ 1,791
RustCreated 2019-09-24typst.app
57,085
stars
+19
1,791
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

Typst is a new markup-based typesetting system that is designed to be as powerful
as LaTeX while being much easier to learn and use. Typst has:

- Built-in markup for the most common formatting tasks
- Flexible functions for everything else
- A tightly integrated scripting system
- Math typesetting, bibliography management, and more
- Fast compile times thanks to incremental compilation
- Friendly error messages in case something goes wrong

This repository contains the Typst compiler and its CLI, which is everything you
need to compile Typst documents locally. For the best writing experience,
consider signing up to our [collaborative online editor][app] for free.

 Example
A [gentle introduction][tutorial] to Typst is available in our documentation.
However, if you want to see the power of Typst encapsulated in one image, here
it is:

 



Let's dissect what's going on:

- We use _set rules_ to configure element properties like the size of pages or
  the numbering of headings. By setting the page height to auto, it scales to
  fit the content. Set rules accommodate the most common configurations. If you
  need full control, you can also use [show rules][show] to completely redefine
  the appearance of an element.

- We insert a heading with the = Heading syntax. One equals sign creates a top
  level heading, two create a subheading and so on. Typst has more lightweight
  markup like this; see the [syntax] reference for a full list.

- [Mathematical equations][math] are enclosed in dollar signs. By adding extra
  spaces around the contents of an equation, we can put it into a separate block.
  Multi-letter identifiers are interpreted as Typst definitions and functions
  unless put into quotes. This way, we don't need backslashes for things like
  floor and sqrt. And phi.alt applies the alt modifier to the phi to
  select a particular symbol variant.

- Now, we get to some [scripting]. To input code into a Typst document, we can
  write a hash followed by an expression. We define two variables and a
  recursive function to compute the n-th fibonacci number. Then, we display the
  results in a center-aligned table. The table function takes its cells
  row-by-row. Therefore, we first pass the formulas $F_1$ to $F_8$ and then
  the computed fibonacci numbers. We apply the spreading operator (..) to both
  because they are arrays and we want to pass the arrays' items as individual
  arguments.


  Text version of the code example.

  typst
  set page(width: 10cm, height: auto)
  set heading(numbering: "1.")

  = Fibonacci sequence
  The Fibonacci sequence is defined through the
  recurrence relation $F_n = F_(n-1) + F_(n-2)$.
  It can also be expressed in _closed form:_

  $ F_n = round(1 / sqrt(5) phi.alt^n), quad
    phi.alt = (1 + sqrt(5)) / 2 $

  let count = 8
  let nums = range(1, count + 1)
  let fib(n) = (
    if n  $F_n$),
    ..nums.map(n = str(fib(n))),
  ))
  


 Installation
Typst's CLI is available from different sources:

- You can get 

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON