Home

Awesome

Typst formatter

typstfmt is a formatter for Typst code.

It only formats inputs that are valid Typst code. It aims to make the code consistent.

Install

Cargo

cargo install --git https://github.com/jeffa5/typstfmt

Nix

The flake provides an overlay which you can use with nixpkgs.

pre-commit

Add this to your .pre-commit-config.yaml:

  - repo: https://github.com/jeffa5/typstfmt
    rev: ''  # Use the sha / tag you want to point at
    hooks:
      - id: typstfmt

Run

# format stdin
typstfmt
# format typst files in current directory
typstfmt *.typ

Nix

nix run github:jeffa5/typstfmt

Configuration

You can configure some aspects of the formatting with a typstfmt.toml file in the current directory, or specify its location with the --config-path flag.

The default configuration is:

indent = 2 # spaces
spacing = true # whether to manage spacing

Development

Fuzzing

List some fuzz targets:

cargo fuzz list

Then run one, e.g. for crash_proof:

cargo fuzz run crash_proof

Testing against the package repo

The typst packages repo is a submodule (typst-packages). We can run the formatter against it to check the formatting and for erroneous outputs with:

cargo run -- typst-packages --check

And try to format them all (useful for manual diffing):

cargo run -- typst-packages

Acknowledgements

typstfmt is a rewrite of typst-fmt which aims to retain all original text whilst also be able to be flexible in its configuration. I tried writing some rules for that formatter before beginning the redesign present here.