https://github.com/messense/typst-py
Python binding to typst
https://github.com/messense/typst-py
typst
Last synced: about 1 month ago
JSON representation
Python binding to typst
- Host: GitHub
- URL: https://github.com/messense/typst-py
- Owner: messense
- License: apache-2.0
- Created: 2023-04-02T15:20:04.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-03-28T00:11:19.000Z (about 2 months ago)
- Last Synced: 2025-04-01T09:32:51.278Z (about 1 month ago)
- Topics: typst
- Language: Rust
- Homepage:
- Size: 9.09 MB
- Stars: 165
- Watchers: 4
- Forks: 13
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-typst - typst-py - Python binding to typst (Integrations & Tools / Programming)
- awesome-typst-cn - typst-py - based typesetting system that is powerful and easy to learn. (编程 / 杂项)
README
# typst-py

[](https://pypi.org/project/typst)Python binding to [typst](https://github.com/typst/typst),
a new markup-based typesetting system that is powerful and easy to learn.## Installation
```bash
pip install typst
```## Usage
```python
import typst# Compile `hello.typ` to PDF and save as `hello.pdf`
typst.compile("hello.typ", output="hello.pdf")# Compile `hello.typ` to PNG and save as `hello.png`
typst.compile("hello.typ", output="hello.png", format="png", ppi=144.0)# Or pass `hello.typ` content as bytes
with open("hello.typ", "rb") as f:
typst.compile(f.read(), output="hello.pdf")# Or return PDF content as bytes
pdf_bytes = typst.compile("hello.typ")# Also for svg
svg_bytes = typst.compile("hello.typ", format="svg")# For multi-page export (the template is the same as the typst cli)
images = typst.compile("hello.typ", output="hello{n}.png", format="png")# Or use Compiler class to avoid reinitialization
compiler = typst.Compiler("hello.typ")
compiler.compile(format="png", ppi=144.0)# Query something
import jsonvalues = json.loads(typst.query("hello.typ", "", field="value", one=True))
```## Passing values
You can pass values to the compiled Typst file with the `sys_inputs` argument. For example:
```python
import json
import typstpersons = [{"name": "John", "age": 35}, {"name": "Xoliswa", "age": 45}]
sys_inputs = {"persons": json.dumps(persons)}typst.compile(input="main.typ", output="ages.pdf", sys_inputs=sys_inputs)
```The following example shows how the passed data can be used in a Typst file.
```
#let persons = json(bytes(sys.inputs.persons))#for person in persons [
#person.name is #person.age years old. \
]
```## License
This work is released under the Apache-2.0 license. A copy of the license is provided in the [LICENSE](./LICENSE) file.