- Notifications
You must be signed in to change notification settings - Fork1.1k
A new markup-based typesetting system that is powerful and easy to learn.
License
typst/typst
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Typst is a new markup-based typesetting system that is designed to be as powerfulas 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 youneed to compile Typst documents locally. For the best writing experience,consider signing up to ourcollaborative online editor for free.
Agentle introduction to Typst is available in our documentation.However, if you want to see the power of Typst encapsulated in one image, hereit is:
Let's dissect what's going on:
We useset rules to configure element properties like the size of pages orthe numbering of headings. By setting the page height to
auto
, it scales tofit the content. Set rules accommodate the most common configurations. If youneed full control, you can also useshow rules to completely redefinethe appearance of an element.We insert a heading with the
= Heading
syntax. One equals sign creates a toplevel heading, two create a subheading and so on. Typst has more lightweightmarkup like this, see thesyntax reference for a full list.Mathematical equations are enclosed in dollar signs. By adding extraspaces around the contents of an equation, we can put it into a separate block.Multi-letter identifiers are interpreted as Typst definitions and functionsunless put into quotes. This way, we don't need backslashes for things like
floor
andsqrt
. Andphi.alt
applies thealt
modifier to thephi
toselect a particular symbol variant.Now, we get to somescripting. To input code into a Typst document, we canwrite a hash followed by an expression. We define two variables and arecursive function to compute the n-th fibonacci number. Then, we display theresults in a center-aligned table. The table function takes its cellsrow-by-row. Therefore, we first pass the formulas
$F_1$
to$F_8$
and thenthe computed fibonacci numbers. We apply the spreading operator (..
) to bothbecause they are arrays and we want to pass the arrays' items as individualarguments.
Text version of the code example.
#setpage(width:10cm,height:auto)#setheading(numbering:"1.")=Fibonacci sequenceThe Fibonacci sequence is defined through therecurrence 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#count numbers of the sequence are:#align(center, table( columns: count, ..nums.map(n =>$F_#n$), ..nums.map(n => str(fib(n))),))
Typst's CLI is available from different sources:
You can get sources and pre-built binaries for the latest release of Typstfrom thereleases page. Download the archive for your platform andplace it in a directory that is in your
PATH
. To stay up to date with futurereleases, you can simply runtypst update
.You can install Typst through different package managers. Note that theversions in the package managers might lag behind the latest release.
- Linux:
- ViewTypst on Repology
- ViewTypst's Snap
- macOS:
brew install typst
- Windows:
winget install --id Typst.Typst
- Linux:
If you have aRust toolchain installed, you can install
- the latest released Typst version with
cargo install --locked typst-cli
- a development version with
cargo install --git https://github.com/typst/typst --locked typst-cli
- the latest released Typst version with
Nix users can
- use the
typst
package withnix-shell -p typst
- build and run a development version with
nix run github:typst/typst -- --version
.
- use the
Docker users can run a prebuilt image with
docker run ghcr.io/typst/typst:latest --help
.
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 isfaster than compiling from scratch each time because Typst has incrementalcompilation.
# 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 allof 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.typsthelp watch
If you prefer an integrated IDE-like experience with autocompletion and instantpreview, you can also check outTypst's free web app.
The main place where the community gathers is ourDiscord server.Feel free to join there to ask questions, help out others, share cool thingsyou created with Typst, or just to chat.
Aside from that there are a few places where you can find things built bythe community:
- The officialpackage list
- TheAwesome Typst repository
If you had a bad experience in our community, pleasereach out to us.
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 bugfix, please follow the steps outlined in thecontribution guide.
To build Typst yourself, first ensure that you have thelatest stable Rust installed. Then, clone this repository and build theCLI with the following commands:
git clone https://github.com/typst/typstcd typstcargo build --release
The optimized binary will be stored intarget/release/
.
Another good way to contribute is bysharing packages with thecommunity.
IPA: /taɪpst/. "Ty" like inTypesetting and "pst" like in Hipster. Whenwriting about Typst, capitalize its name as a proper noun, with a capital "T".
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 thepower of LaTeX, is easy to learn and use, all while being fast enough to realizeinstant 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 thatknowledge 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
= Introduction
and#heading[Introduction]
do the same thingbecause 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 orhave a few knobs that you can combine in many ways. Typst is designed with thesecond way in mind. We provide systems that you can compose in ways we'venever even thought of. TeX is also in the second category, but it's a bitlow-level and therefore people use LaTeX instead. But there, we don't reallyhave 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 have
comemo
, a system for incremental compilation which doesmost of the hard work in the background.
About
A new markup-based typesetting system that is powerful and easy to learn.