Skip to content
/ typst Public

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

License

Notifications You must be signed in to change notification settings

typst/typst

Repository files navigation

Typst

Documentation Typst App Discord Server Apache-2 License Jobs at Typst

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 ourcollaborative online editorfor free. It is currently in public beta.

Example

Agentle introductionto Typst is available in our documentation. However, if you want to see the power of Typst encapsulated in one image, here it is:

Example

Let's dissect what's going on:

  • We useset rulesto configure element properties like the size of pages or the numbering of headings. By setting the page height toauto,it scales to fit the content. Set rules accommodate the most common configurations. If you need full control, you can also useshow rulesto completely redefine the appearance of an element.

  • We insert a heading with the= Headingsyntax. One equals sign creates a top level heading, two create a subheading and so on. Typst has more lightweight markup like this, see thesyntaxreference for a full list.

  • Mathematical equationsare 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 floorandsqrt.Andphi.altapplies thealtmodifier to thephito select a particular symbol variant.

  • Now, we get to somescripting.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.
#setpage(width:10cm,height:auto)
#setheading(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$

#letcount=8
#letnums=range(1,count+1)
#letfib(n)=(
ifn<=2{1}
else{fib(n-1)+fib(n-2) }
)

The first#countnumbers of the sequence are:

#align(center, table(
columns: count,
..nums.map(n =>$F_#n$),
..nums.map(n => str(fib(n))),
))

Installation

Typst's CLI is available from different sources:

  • You can get sources and pre-built binaries for the latest release of Typst from thereleases page.Download the archive for your platform and place it in a directory that is in yourPATH.To stay up to date with future releases, you can simply runtypst update.

  • You can install Typst through different package managers. Note that the versions in the package managers might lag behind the latest release.

    • Linux: ViewTypst on Repology
    • macOS:brew install typst
    • Windows:winget install --id Typst.Typst
  • If you have aRusttoolchain installed, you can install

    • the latest released Typst version with cargo install --locked typst-cli
    • a development version with cargo install --git https://github /typst/typst --locked typst-cli
  • Nix users can

    • use thetypstpackage withnix-shell -p typst
    • build and run a development version with nix run github:typst/typst -- --version.
  • Docker users can run a prebuilt image with docker run -it ghcr.io/typst/typst:latest.

Usage

Once you have installed Typst, you can use it like this:

#Creates `file.pdf` in working directory.
typst compile file.typ

#Creates PDF file at the desired path.
typst compile path/to/source.typ path/to/output.pdf

You can also watch source files and automatically recompile on changes. This is faster than compiling from scratch each time because Typst has incremental compilation.

#Watches source files and recompiles on changes.
typst watch file.typ

Typst further allows you to add custom font paths for your project and list all of the fonts it discovered:

#Adds additional directories to search for fonts.
typst compile --font-path path/to/fonts file.typ

#Lists all of the discovered fonts in the system and the given directory.
typst fonts --font-path path/to/fonts

#Or via environment variable (Linux syntax).
TYPST_FONT_PATHS=path/to/fonts typst fonts

For other CLI subcommands and options, see below:

#Prints available subcommands and options.
typsthelp

#Prints detailed usage of a subcommand.
typsthelpwatch

If you prefer an integrated IDE-like experience with autocompletion and instant preview, you can also check out theTypst web app,which is currently in public beta.

Community

The main place where the community gathers is ourDiscord server. Feel free to join there to ask questions, help out others, share cool things you created with Typst, or just to chat.

Aside from that there are a few places where you can find things built by the community:

If you had a bad experience in our community, pleasereach out to us.

Contributing

We would love to see contributions from the community. If you experience bugs, feel free to open an issue. If you would like to implement a new feature or bug fix, please follow the steps outlined in thecontribution guide.

To build Typst yourself, first ensure that you have the latest stable Rustinstalled. Then, clone this repository and build the CLI with the following commands:

git clone https://github /typst/typst
cdtypst
cargo build --release

The optimized binary will be stored intarget/release/.

Another good way to contribute is bysharing packageswith the community.

Pronunciation and Spelling

IPA: /taɪpst/. "Ty" like inTypesetting and "pst" like in Hipster. When writing about Typst, capitalize its name as a proper noun, with a capital "T".

Design Principles

All of Typst has been designed with three key goals in mind: Power, simplicity, and performance. We think it's time for a system that matches the power of LaTeX, is easy to learn and use, all while being fast enough to realize instant preview. To achieve these goals, we follow three core design principles:

  • Simplicity through Consistency: If you know how to do one thing in Typst, you should be able to transfer that knowledge to other things. If there are multiple ways to do the same thing, one of them should be at a different level of abstraction than the other. E.g. it's okay that= Introductionand#heading[Introduction]do the same thing because the former is just syntax sugar for the latter.

  • Power through Composability: There are two ways to make something flexible: Have a knob for everything or have a few knobs that you can combine in many ways. Typst is designed with the second way in mind. We provide systems that you can compose in ways we've never even thought of. TeX is also in the second category, but it's a bit low-level and therefore people use LaTeX instead. But there, we don't really have that much composability. Instead, there's a package for everything (\usepackage{knob}).

  • Performance through Incrementality: All Typst language features must accommodate for incremental compilation. Luckily we havecomemo,a system for incremental compilation which does most of the hard work in the background.