Introduction
# Typst & LaTeX Compiler
Compile Typst (.typ) and LaTeX (.tex) documents to PDF using the TypeTex compilation API.
## API Endpoint
**Base URL:** `https://studio-intrinsic--typetex-compile-app.modal.run`
## Endpoints
### Compile Typst
``` POST /public/compile/typst Content-Type: application/json ```
**Request Body:** ```json { "content": "#set page(paper: \"a4\")\n\n= Hello World\n\nThis is a Typst document.", "main_filename": "main.typ", "auxiliary_files": {} } ```
**Response (Success):** ```json { "success": true, "pdf_base64": "JVBERi0xLjQK..." } ```
**Response (Failure):** ```json { "success": false, "error": "error: file not found: missing.typ" } ```
### Compile LaTeX
``` POST /public/compile/latex Content-Type: application/json ```
**Request Body:** ```json { "content": "\\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}", "main_filename": "main.tex", "auxiliary_files": {} } ```
**Response (Success):** ```json { "success": true, "pdf_base64": "JVBERi0xLjQK..." } ```
**Response (Failure):** ```json { "success": false, "error": "! LaTeX Error: Missing \\begin{document}.", "log_output": "This is pdfTeX..." } ```
### Health Check
``` GET /public/compile/health ```
Returns `{"status": "ok", "service": "public-compile"}` if the service is running.
## Usage Examples
### Simple Typst Document
```python import requests import base64
response = requests.post( "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst", json={ "content": """ #set page(paper: "a4", margin: 2cm) #set text(font: "New Computer Modern", size: 11pt)
= My Document
This is a paragraph with *bold* and _italic_ text.
== Section 1
- Item 1 - Item 2 - Item 3 """, "main_filename": "main.typ" } )
result = response.json() if result["success"]: pdf_bytes = base64.b64decode(result["pdf_base64"]) with open("output.pdf", "wb") as f: f.write(pdf_bytes) print("PDF saved to output.pdf") else: print(f"Compilation failed: {result['error']}") ```
### Simple LaTeX Document
```python import requests import base64
response = requests.post( "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/latex", json={ "content": r""" \documentclass[11pt]{article} \usepackage[margin=1in]{geometry} \usepackage{amsmath}
\title{My Document} \author{Author Name}
\begin{document} \maketitle
\section{Introduction}
This is a LaTeX document with math: $E = mc^2$
\end{document} """, "main_filename": "main.tex" } )
result = response.json() if result["success"]: pdf_bytes = base64.b64decode(result["pdf_base64"]) with open("output.pdf", "wb") as f: f.write(pdf_bytes) else: print(f"Compilation failed: {result['error']}") if result.get("log_output"): print(f"Log: {result['log_output']}") ```
### Multi-File Project (Typst)
```python import requests import base64
response = requests.post( "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst", json={ "content": """ #import "template.typ": *
#show: project.with(title: "My Report")
= Introduction
#include "chapter1.typ" """, "main_filename": "main.typ", "auxiliary_files": { "template.typ": """ #let project(title: none, body) = { set page(paper: "a4") set text(font: "New Computer Modern")
align(center)[ #text(size: 24pt, weight: "bold")[#title] ]
body } """, "chapter1.typ": """ == Chapter 1
This is the first chapter. """ } } )
result = response.json() if result["success"]: pdf_bytes = base64.b64decode(result["pdf_base64"]) with open("report.pdf", "wb") as f: f.write(pdf_bytes) ```
### Including Images
For binary files like images, base64-encode them:
```python import requests import base64
# Read and encode an image with open("figure.png", "rb") as f: image_base64 = base64.b64encode(f.read()).decode("utf-8")
response = requests.post( "https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst", json={ "content": """ #set page(paper: "a4")
= Document with Image
#figure( image("figure.png", width: 80%), caption: [A sample figure] ) """, "main_filename": "main.typ", "auxiliary_files": { "figure.png": image_base64 } } ) ```
### Using curl
```bash # Typst compilation curl -X POST https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/typst \ -H "Content-Type: application/json" \ -d '{ "content": "#set page(paper: \"a4\")\n\n= Hello World\n\nThis is Typst.", "main_filename": "main.typ" }' | jq -r '.pdf_base64' | base64 -d > output.pdf
# LaTeX compilation curl -X POST https://studio-intrinsic--typetex-compile-app.modal.run/public/compile/latex \ -H "Content-Type: application/json" \ -d '{ "content": "\\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}", "main_filename": "main.tex" }' | jq -r '.pdf_base64' | base64 -d > output.pdf ```
## Supported Features
### Typst - Full Typst language support - Multi-file projects with imports - Images (PNG, JPG, SVG) - Custom fonts (New Computer Modern, etc.) - Math equations - Tables and figures - Bibliography (using Hayagriva format)
### LaTeX - Full TeX Live distribution via Tectonic - Multi-file projects (\input, \include) - BibTeX/BibLaTeX bibliography - Custom style files (.sty, .cls) - All standard packages (amsmath, graphicx, etc.) - TikZ/PGFPlots graphics - Images (PNG, JPG, PDF, EPS)
## Error Handling
When compilation fails, the response includes: - `success: false` - `error`: Human-readable error message - `log_output` (LaTeX only): Full compilation log for debugging
Common errors: - **Syntax errors**: Check your source code for typos - **Missing files**: Ensure all imported/included files are in `auxiliary_files` - **Package not found**: Most common packages are available; contact support for additions - **Timeout**: Complex documents may timeout after 60 seconds
## Rate Limits
- No authentication required - Please be respectful of shared resources - For high-volume usage, contact support
## Tips for Agents
1. **Always check `success`** before accessing `pdf_base64` 2. **Parse errors** to provide helpful feedback to users 3. **Use minimal documents** when testing - complex documents take longer 4. **Cache results** if compiling the same content multiple times 5. **Include all dependencies** in `auxiliary_files` for multi-file projects
## Related Resources
- [Typst Documentation](https://typst.app/docs/) - [LaTeX Wikibook](https://en.wikibooks.org/wiki/LaTeX) - [TypeTex](https://typetex.app) - Full document editor with AI assistance