Docs

PDF Generator

The PDF Generator primitive renders a typst-source template using the entity's payload as the substitution context, writes the resulting PDF to storage, and attaches the new file id to a field on the entity. It runs asynchronously so the originating transition is never blocked by typst compilation.

Configuration

FieldTypeDescription
templatestringFull typst source. Use {{entity.field}} substitutions to interpolate payload values.
attach_to_fieldstringThe entity field that receives the resulting file_id.
filename_templatestringFilename template, also Mustache-style (e.g. quote-{{quote_number}}.pdf).

Example: Render a quote PDF when a Quote is sent

[[bindings]]
primitive = "fastyoke.pdf-generator"
trigger = { kind = "on_transition", board = "Quote", event = "send_quote" }
config = {
  template = """
    #set page(\"us-letter\")
    = Quote {{quote_number}}
    Customer: {{customer_name}}
    Total: ${{total}}
  """,
  attach_to_field = "quote_pdf",
  filename_template = "quote-{{quote_number}}.pdf"
}

When the send_quote transition commits, the engine renders the typst source against the Quote's payload, uploads the PDF to tenant-scoped storage, and writes the resulting file_id to Quote.quote_pdf.

When to use it

  • Customer-facing documents that need precise typography (quotes, invoices, statements).
  • Compliance artifacts produced as a side effect of a transition (signed agreements, audit reports).
  • Anything else where the same template fills with per-entity values.

What it can't do

  • Render synchronously and surface the PDF in the transition response. The render is asynchronous to keep transitions fast — the field is populated when the render finishes.
  • Reach over typst's sandbox. Templates have no host-system access and no network access.
  • Exceed your tenant's daily render cap. The same anti-abuse cap that covers Forms typst renders applies here.
  • Attach the PDF to email automatically. Pair PDF Generator with Notifier and reference the attached file_id.