ClawSkills logoClawSkills

Compile LaTex & Typst into PDF with TypeTex

Compile Typst and LaTeX documents to PDF via API. Send source code, get back a PDF.

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

More Products