A puffin flies over the sea along the cliffs of Iceland, leaving a trail of printed pages behind it.

The full power of LaTeX for your agents.

With your letterhead and scientific-grade math, in under a second.

Any document

Set your letterhead and forget the rest.

Set your letterhead or brand identity once and generate every document without worrying about anything else, from a prescription to a scientific paper. Puffin compiled all six, with made-up companies and people.

  • Two-column scientific paper titled “Wing Loading and Flight Efficiency in Atlantic Puffins”, with an abstract, a power equation, a chart of power against speed, a results table and references.
    Scientific paperTwo columns, equations, a pgfplots chart, tables and references.
  • Invoice from Puffin Co. to Northwind Publishing with four line items, subtotal, sales tax and a total due of $1,114.08.
    InvoiceYour logo and colors, line items and totals that always add up.
  • Puffin Co. Q3 2026 financial summary with three KPIs, a bar chart of revenue and gross profit by quarter, and an income statement.
    Financial reportKPIs, a bar chart and an income statement with aligned figures.
  • Prescription from the fictional Harbor Light Clinic, signed by Dr. Elena Ward, with three medications and instructions for the patient Jonah Miller.
    Medical prescriptionA clinic letterhead, the patient's details and a signed footer.
  • Clinical chemistry lab report from the fictional Harbor Light Laboratory with eight results, reference ranges, range bars and two values flagged high.
    Lab reportResults against reference ranges, with out-of-range values flagged.
  • Certificate of Completion from Puffin Academy for Amelia Brooks, course “Typesetting Scientific Documents with LaTeX”, with a seal and signature lines.
    CertificateA landscape page with serif type, a seal and two signature lines.
  • Your brand, no extra work

    Letterhead, logo, typography and colors live in the template. Every document comes out equally polished, with no one laying it out.

  • High-precision math

    Equations, units and numbered references at the quality of a scientific publication, hard to reach with engines that convert HTML to PDF.

  • Charts and diagrams

    TikZ and pgfplots draw curves, schematics and diagrams inside the same document, as vectors.

  • A person can always review it

    The document is LaTeX that can be read, reviewed and fixed by hand. The human stays in the loop, even when an agent writes it.

Tell us which documents you send today and how they should look.

A flock of puffins flies low over the open sea, with cliffs in the distance.

Built for agents

When something breaks, the agent knows what to fix.

Puffin is built to work with AI agents. The agent writes LaTeX and Puffin compiles it. When something fails, instead of a log hundreds of lines long, it answers with the file, the line and a hint, so the agent can fix it without guessing.

MCP tools

  • compile_latex

    Compiles a LaTeX document and returns the PDF.

  • check_latex

    Checks a document without producing the PDF: errors and warnings.

  • list_templates

    Lists catalog templates and their options.

  • preview_template

    Renders a template with sample data, as PNG.

  • test_component

    Tests a component before using it.

  • compose_document

    Builds a document from blocks and a template.

The same operations exist over REST. An agent without MCP can do everything an agent with MCP can.

Real response from POST /v1/latex (HTTP 422) to an undefined command and an unclosed list:
{
  "error": "latex_error",
  "detail": "the document has LaTeX errors",
  "diagnostics": [
    {
      "severity": "error",
      "code": "undefined-command",
      "file": "prescription.tex",
      "line": 4,
      "message": "Undefined control sequence: \\dosis",
      "hint": "\\dosis does not exist: check its spelling or load the package that defines it."
    },
    {
      "severity": "error",
      "code": "mismatched-environment",
      "file": "prescription.tex",
      "line": 7,
      "message": "LaTeX Error: \\begin{itemize} on input line 5 ended by \\end{document}.",
      "hint": "The itemize environment you opened on line 5 was closed with \\end{document}. Close it with \\end{itemize}."
    }
  ]
}

API

One call, one PDF.

JSON in, PDF out, stateless. The prescription and pre-printed form templates keep the same contract as BlinkPDF, so you can switch services without touching the client.

POST /v1/latex
content-type: application/json

{
  "main": "note.tex",
  "files": {
    "note.tex": "\\documentclass{article}\\begin{document}Hello\\end{document}"
  }
}

→ 200 OK · application/pdf
  • POST /v1/templates/sandwich-document/render

    Prescription, note or visit summary: header, Markdown body and signed footer.

  • POST /v1/templates/layout-document/render

    Pre-printed form: text and images in fixed areas of the page.

  • POST /v1/latex

    Your own LaTeX, with strict mode and check-only mode.

  • POST /v1/documents/compose

    A document built from blocks: sections, Markdown and components.

  • GET /v1/templates · /v1/components

    Catalog with typed options, examples and previews.

Early access comes with your API key and the server address.

Puffins on top of a sea cliff, each one at the entrance of its own burrow.

Security

LaTeX is a programming language. We treat it like one.

A LaTeX document can try to read files on the server. Puffin runs it as untrusted code, even when it comes from one of its own templates.

  • Every document in its own cage

    pdfTeX runs under Landlock and a seccomp filter: it reads only TeX and the templates, writes only to its own folder, with no network and no other programs.

  • Nothing is stored

    No database and no storage. Each document's folder is deleted after the response, and images do not stay in memory.

  • Checked at startup

    Before serving, the server tries to escape its own cage. If something that should fail does not, it composes nothing.

  • No surprises in the PDF

    A PDF made from your own LaTeX is rejected if it carries JavaScript, actions that launch programs, or attachments.

  • Bounded

    Time, memory, output size and file count are capped. An infinite loop gets cut off; a traffic spike gets “retry” instead of waiting.

Numbers

~0.4 s
per prescription, on Render's smallest instance (half a CPU)
~0.6 s
for a 7-page medical record
47 KB
for a prescription with logo and signature
1
pdfTeX pass, even with «Page N of M»

Measured on October 25, 2026, server time, with test data.

FAQ

Questions, answered.

What is Puffin?

Puffin is a LaTeX engine that compiles real LaTeX (pdfTeX) into PDF through a REST API and an MCP server. You set your letterhead once in a template and generate every document from it, from a prescription or an invoice to a scientific paper.

How do AI agents use Puffin?

The agent writes LaTeX and Puffin compiles it. Over MCP it can call compile_latex, check_latex, list_templates, preview_template, test_component and compose_document. The same operations exist over REST, so an agent without MCP can do everything an agent with MCP can.

What happens when a LaTeX document fails to compile?

Instead of a log hundreds of lines long, Puffin answers with HTTP 422 and structured diagnostics: the file, the line and a hint, so an agent can fix the document without guessing.

Why LaTeX instead of converting HTML to PDF?

LaTeX typesets equations, units and numbered references at the quality of a scientific publication, and draws charts and diagrams with TikZ and pgfplots as vectors. The source stays readable, so a person can review and fix a document even when an agent wrote it.

Does Puffin store my documents?

No. Puffin is stateless: it has no database and no storage. Each document's folder is deleted after the response, and every document compiles under Landlock and a seccomp filter, with no network and no other programs.

How fast is Puffin?

Measured on October 25, 2026, on the server with test data: about 0.4 s per prescription on Render's smallest instance (half a CPU) and about 0.6 s for a 7-page medical record. A prescription with logo and signature weighs 47 KB.

Can I switch from BlinkPDF to Puffin?

For prescriptions, notes, visit summaries and pre-printed forms, yes: those templates keep the same contract as BlinkPDF, so you can switch services without touching the client. Fillable PDF forms are not part of Puffin.

How do I get early access?

We're opening Puffin to a small group of teams. Press “Request early access” and tell us what documents you want to generate, roughly how many per month, and whether you'll call Puffin from your own code (REST) or from an AI agent (MCP). Early access comes with your API key and the server address.

Sunset over the Atlantic: a flock of puffins flies toward the horizon along the cliffs.

Serious documents, without fighting LaTeX.

We're opening Puffin to a small group of teams. Tell us what you need, whether it's branded documents, science or your agents, and we'll set you up.