Compile LaTex & Typst into PDF with TypeTex
v1.5.0Compile Typst and LaTeX documents to PDF via API. Send source code, get back a PDF.
Security Scan
OpenClaw
Benign
high confidencePurpose & Capability
Name/description match the provided SKILL.md, examples, and OpenAPI: all show a public HTTP API that accepts source and returns a base64 PDF. No unrelated binaries or credentials are requested.
Instruction Scope
Instructions are narrowly scoped to POSTing document content (and optional auxiliary files, including base64-encoded binaries) to the documented endpoints and saving the returned PDF. Important privacy note: users must send full document contents (and any included files) to the external service — compilation logs (for LaTeX failures) may also be returned. The instructions do not ask the agent to read unrelated system files or secrets.
Install Mechanism
No install spec — instruction-only skill and example scripts only use Python requests. Nothing will be written to disk by an installer and no external archives are fetched by the skill itself.
Credentials
No environment variables, credentials, or config paths are requested. The lack of required secrets is consistent with the skill's stated 'no authentication required' API.
Persistence & Privilege
always is false and the skill does not request elevated or persistent system privileges. disable-model-invocation is false (normal), so an agent could call the API autonomously — acceptable given the skill's narrow scope.
Assessment
This skill is internally consistent, but it sends the full contents of any document and any auxiliary files to a public remote service. Before using it with sensitive documents, verify the service owner and privacy/security policy (the OpenAPI contact points at typetex.app vs the server host on modal.run suggest a third-party host), and avoid sending secrets or private data. If you need offline or private compilation, use a local compiler (Typst/Tectonic) instead. As a quick test, try compiling a non-sensitive sample document first to confirm expected behavior.Like a lobster shell, security has layers — review code before you run it.
latest
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:
{
"content": "#set page(paper: \"a4\")\n\n= Hello World\n\nThis is a Typst document.",
"main_filename": "main.typ",
"auxiliary_files": {}
}
Response (Success):
{
"success": true,
"pdf_base64": "JVBERi0xLjQK..."
}
Response (Failure):
{
"success": false,
"error": "error: file not found: missing.typ"
}
Compile LaTeX
POST /public/compile/latex
Content-Type: application/json
Request Body:
{
"content": "\\documentclass{article}\n\\begin{document}\nHello World\n\\end{document}",
"main_filename": "main.tex",
"auxiliary_files": {}
}
Response (Success):
{
"success": true,
"pdf_base64": "JVBERi0xLjQK..."
}
Response (Failure):
{
"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
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
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)
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:
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
# 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: falseerror: Human-readable error messagelog_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
- Always check
successbefore accessingpdf_base64 - Parse errors to provide helpful feedback to users
- Use minimal documents when testing - complex documents take longer
- Cache results if compiling the same content multiple times
- Include all dependencies in
auxiliary_filesfor multi-file projects
Related Resources
- Typst Documentation
- LaTeX Wikibook
- TypeTex - Full document editor with AI assistance
Comments
Loading comments...
