About typst/typst
typst/typst is an open-source project on GitHub, mainly written in Rust. A markup-based typesetting system that is powerful and easy to learn. It currently holds 56,140 stars and 1,719 forks with 0 open issues, and was last pushed on an unknown date (repository created unknown).
Project Overview
Git Homed tracks it on the Today's Trending board, currently at rank #98 with 23 new stars today.
GitHub Repository Details
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
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
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
= Headingsyntax. One equals sign creates a top
- [Mathematical equations][math] are enclosed in dollar signs. By adding extra
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
$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.
#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 <= 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))),
))
Installation
Typst's CLI is available from different sources:- You can get sources and pre-built binaries for the latest release of Typst
PATH. To stay up to date with future
releases, you can simply run typst update.
- You can install Typst through different package managers. Note that the
- Linux:
- View [Typst on Repology][repology]
- View [Typst's Snap][snap]
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst - If you have a [Rust][rust] 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
- Nix users can
- use the
typstpackage withnix-shell -p typst - build and run the Typst flake with
nix run github:typst/typst-flake -- --version.
- Docker users can run a prebuilt image with
docker run ghcr.io/typst/typst:latest --help.
Usage
Once you have installed Typst, you can use it like this:# Creates file.pdf in working directory.
typst compile file.typ
Creates a 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.
typst help
Prints detailed usage of a subcommand.
typst help watch
If you prefer an integrated IDE-like experience with autocompletion and instant preview, you can also check out our [free web app][app]. Alternatively, there is a community-created language server called Tinymist which is integrated into various editor extensions.
Community
The main places where the community gathers are our [Forum][forum] and our [Discord server][discord]. The Forum is a great place to ask questions, help others, and share cool things you created with Typst. The Discord server is more suitable for quicker questions, discussions about contributing, or just to chat. We'd be happy to see you there![Typst Universe][universe] is where the community shares templates and packages. If you want to share your own creations, you can submit them to our [package repository][packages].
If you had a bad experience in our community, please [reach out to us][contact].
Contributing
We 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 the [contribution guide][contributing].To build Typst yourself, first ensure that you have the [latest stable Rust][rust] installed. Then, clone this repository and build the CLI with the following commands:
git clone https://github.com/typst/typst
cd typst
cargo build --release
The optimized binary will be stored in target/release/.
Another good way to contribute is by [sharing packages][packages] with the community.
Pronunciation and Spelling
IPA: /taɪpst/. "Ty" like in Typesetting 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:
= Introduction and #heading[Introduction] do the same thing
because the former is just syntax sugar for the latter.
- Power through Composability:
\usepackage{knob}).
- Performance through Incrementality:
comemo], a system for incremental compilation which does
most of the hard work in the background.
Acknowledgements
We'd like to thank everyone who is supporting Typst's development, be it via [GitHub sponsors] or elsewhere. In particular, special thanks[^1] go to:
- Posit for financing a full-time
- NLnet for supporting work on Typst via multiple grants
- Work on HTML export
- Work on PDF accessibility
- Science & Startups for having financed
- Zerodha for their
[^1]: This list only includes contributions for our open-source work that exceed or are expected to exceed €10K.
[docs]: https://typst.app/docs/
[app]: https://typst.app/
[discord]: https://discord.gg/2uDybryKPe
[forum]: https://forum.typst.app/
[universe]: https://typst.app/universe/
[tutorial]: https://typst.app/docs/tutorial/
[show]: https://typst.app/docs/reference/styling/#show-rules
[math]: https://typst.app/docs/reference/math/
[syntax]: https://typst.app/docs/reference/syntax/
[scripting]: https://typst.app/docs/reference/scripting/
[rust]: https://rustup.rs/
[releases]: https://github.com/typst/typst/releases/
[repology]: https://repology.org/project/typst/versions
[contact]: https://typst.app/contact
[architecture]: https://github.com/typst/typst/blob/main/docs/dev/architecture.md
[contributing]: https://github.com/typst/typst/blob/main/CONTRIBUTING.md
[packages]: https://github.com/typst/packages/
[comemo]: https://github.com/typst/comemo/
[snap]: https://snapcraft.io/typst
[GitHub sponsors]: https://github.com/sponsors/typst/