The one-line difference
typst is a modern typesetting system — think LaTeX successor — with its own markup language and compiler. You write .typ source, run a compiler, get a PDF. makesPDF is a hosted REST API that takes markdown or a compact DSL and returns a deterministic, PDF/A-2A + PDF/UA-1 compliant PDF. Different audiences: typst is for authors who want a great writing surface; makesPDF is for backends and agents that want a render endpoint.
Feature matrix
| typst | makesPDF | |
|---|---|---|
| Shape | Compiler + markup language | Hosted REST API (/api/v1/*) |
| Authoring surface | Custom typst syntax (Rust-flavored) | Markdown, builder DSL, JSON |
| Runtime | Local CLI / typst.app web editor | Cloudflare Workers (we host) |
| Best for | Books, papers, technical docs, math | Invoices, receipts, reports, agent output |
| Math typesetting | First-class, excellent | Basic (markdown + Mermaid only) |
| Tagged PDF (PDF/UA-1) | Limited (in development) | Yes, by default |
| PDF/A archival | Limited | Yes (PDF/A-2A) |
| Determinism | Yes | Yes |
| Agent-first | No | Yes — skill file, MCP, x402 |
| Programmability | Local scripts in typst | HTTP API from any language |
| License | Apache-2.0 | Proprietary hosted; skill file MIT |
Same input, two outputs
A "Hello, Ada" report.
typst — write report.typ, compile:
#set page("a4", margin: 40pt)
#set text(font: "Inter", size: 12pt)
= Hello, Ada
Welcome to the report.
typst compile report.typ hello.pdf
makesPDF — one HTTP call:
curl -X POST https://makespdf.com/api/v1/md \
-H "Authorization: Bearer $MAKESPDF_API_KEY" \
-H "Content-Type: application/json" \
-d '{"markdown": "# Hello, Ada\n\nWelcome to the report."}' \
-o hello.pdf
These don't compete. typst wants you to write .typ. We want a backend or agent to POST data.
When typst is the right call
- You're writing a book, a paper, a thesis, or technical documentation. typst's typesetting and math support are excellent.
- You want a single source file under version control that compiles offline. That's literally typst.
- Your team is comfortable learning a new markup language for the quality payoff.
When makesPDF is the right call
- You have a backend that needs to emit PDFs from data (invoices, receipts, reports, statements). You don't want a typesetter; you want an HTTP endpoint.
- You're orchestrating an AI agent that generates documents on demand. typst is a non-trivial surface for an LLM to emit; markdown and our DSL are easy.
- Compliance is a hard requirement. PDF/A-2A + PDF/UA-1 by construction, validated against veraPDF, no remediation step.
- You need per-render billing (credits or x402 wallet) without running typst in your own infra.
Migration
These are usually different decisions, not migrations. If you're moving an existing typst-based pipeline to a hosted render API, your .typ source becomes a markdown template plus the builder DSL for precise layout. The math-heavy paths don't migrate cleanly — keep typst for those.