Changelog
Generated from CHANGELOG.md in the project repository. Never maintained twice.
Unreleased
- changedPages: the project site uses the current shared theme (0.12.12).
0.6.2
31 October 2026
- addedE-invoices: VAT codes
IntraCommunity(category K, exemption codeVATEX-EU-IC) andExport(category G,VATEX-EU-G) for CII and UBL. An intra-Community supply needs the buyer's VAT ID, a delivery date or period and the newmetadata.delivery_country_code(BT-80, written to both formats, with optionaldelivery_cityanddelivery_postal_code, which XRechnung requires once a country is given); an export needs none of these. Defaults can be overridden withvat_rate.exemption_reason_code.
0.6.1
31 October 2026
- addedProfiles: A document profile can offer
xrechnung-3.0orpeppol-bis-3.0as itsoutput_profile.validate-documentthen reports the fieldstypstgen e-invoicerequires, with their JSON paths (OUTPUT-REQUIRED), from the same check; the XML itself is still written bye-invoice. - changedWebsite: the start page has a section on invoices with a real
typstgen e-invoicerun, and counts all nine MCP tools. - changedWebsite: on phones the header shows every link without sideways scrolling, and links in the invoice section are underlined.
- changedDocs: the CLI reference covers
prepare-invoice,e-invoiceand the document-profile commands, the AI agents guide lists every MCP tool, and the README starts with what typstgen does and how it works.
0.6.0
30 October 2026
- addedE-invoices:
typstgen e-invoice,zugferd::ubl_xml_from_docgenand the MCP toole_invoicewrite XRechnung 3.0 and Peppol BIS Billing 3.0 as UBL 2.1 from the same invoice model as the CII XML. Electronic addresses, buyer and order references, seller telephone and payment means codes are read from the invoice JSON; schema and Schematron validation are reported asnot_run. - addedInvoices: Configurations support US presentation choices and additive sales-tax components, with separate taxable bases and rounded amounts. Sales-tax invoices are excluded from CII export.
- addedInvoices:
prepare-invoiceand the matching Rust/MCP API build canonical invoice values from user-owned tax and presentation configuration without requiring a national catalog. - addedProfiles: Data-driven document profile listing, selection and invoice validation are shared by the Rust library, CLI and MCP, with field diagnostics and separate external-validation states.
- addedZUGFeRD: VAT code
Kleinunternehmeris accepted as an alias forExempt(category E), as used by older invoice JSON files. It still needsexemption_reasonorexemption_reason_code. - changedZUGFeRD:
company.contact.nameis written as the seller contact (BT-41) in the CII XML. - changedDocs: docgen is discontinued. Its templates live on as the Typst package
business-templatesin typst-business-templates, and help texts call the invoice data "business-templates invoice JSON". - changedWebsite: the start page shows a real compile run (a letter that compiles, a missing import that fails with exit code 1) next to the PDF it wrote, and how typstgen works as a diagram.
- changedWebsite: on the start page the introduction follows the title directly, beside the install tabs; the badges moved below the compile run.
- changedDocs: the installation guide covers the MCP setup and lists every Cargo feature, and the templates guide shows the import lookup order as a diagram.
- fixedProfiles: Explicit invoice payment-account details also supply the PDF footer's bank name, instead of retaining the company default bank name when an account is overridden.
- fixedZUGFeRD: Line amounts and tax amounts round directly to cents without a second rounding through four fractional digits, preserving correct results at sub-cent boundaries.
- fixedZUGFeRD: Invalid calendar dates, conflicting currencies and stated tax-group values that disagree with the normalized invoice are rejected before CII generation.
- fixedProfiles: Malformed/conflicting optional dates and unsupported invoice discounts block the rendering view; seller diagnostics point to the company input fields.
- securityDependencies: Updated rustls, rustls-webpki and webpki-roots to patched versions, Tokio to 1.53.3 and the withdrawn yoke-derive version to 0.8.4; no RustSec vulnerabilities remain in the lockfile.
0.5.0
13 October 2026
- breaking
archive::Reporthas a new public fieldnotes; struct literals need it. - added
verifyaccepts a PDF signed after recording: when the stored PDF starts with the recorded bytes and the appended incremental updates carry a signature, the document passes with a note. Revisions appended without a signature fail.archive::Reporthas a new public fieldnotes. - addedGuide Signing: sign with pyHanko (PAdES, RFC 3161 timestamp), keep PDF/A and ZUGFeRD valid, and when a signature matters in Germany. The archiving guide shows how to timestamp
archive.jsonwithopenssl ts.
0.4.1
12 October 2026
- changedThe Typst world (fonts, template roots, packages,
datetime.today()) now comes from the new [embedded-typst](https://crates.io/crates/embedded-typst) crate, shared with renderreport. No change in behaviour.
0.4.0
11 October 2026
- breaking
Confighas three new public fields; struct literals need..Config::default(). - breaking
Outputhas a new public fieldpages;CompileOptionshaszugferd_xml(with thezugferdfeature), so struct literals need..CompileOptions::default(). - added
typstgen mcp: a Model Context Protocol server over stdio with the toolscheck,preview,compileandlist_templates, restricted to a workspace directory (--root). Errors are returned to the agent aspath:line:columnlines so it can fix them itself.mcpfeature, on by default. - added
render_pngrenders one page as PNG (pngfeature) andError::PageOutOfRange. - added
Output::pages: the number of pages of the compiled document. - addedZUGFeRD / Factur-X e-invoices (EN 16931,
zugferdfeature, on by default):--zugferd invoice.json --company company.jsonbuilds the CII XML from docgen invoice data, checks it, embeds it asfactur-x.xmlin a PDF/A-3 and adds the Factur-X XMP schema. Library:zugferd::xml_from_docgen,CompileOptions::zugferd_xml,Error::Zugferd. MCP:zugferdparameter ofcompile. - addedArchive manifests (
archivefeature, on by default):compile --manifest archive.jsonrecords the options and the SHA-256 of the PDF, of every file Typst read and of every font file loaded;typstgen verifychecks that the PDFs are unchanged and rebuild byte for byte. Library:archive::{compile_and_record, verify, Job, Report},Error::Archive.verify --rebuild-onlyskips the stored PDFs for CI checkouts. - addedGuide "Checks and CI": pinned fonts and packages, a local verify script and a tag-triggered GitHub Actions workflow.
- addedExample
examples/thesis.typ: a seminar paper built on a local package (examples/packages/local/thesis/0.1.0) with BibTeX citations, compiled as PDF/A-2b. - addedTypst packages:
#import "@preview/…"and@local/…resolve from the same package data and cache directories as the typst CLI. Missing@previewpackages are downloaded from Typst Universe (downloadfeature, on by default, pure-Rust TLS). Newtypstgen.tomlkeyspackage_path,package_cache_pathanddownload_packages. Native builds only. - addedTests for citations and
#bibliography(BibTeX) under PDF/A-2b.
0.3.0
24 September 2026
- added
compile_with_optionsandCompileOptions: values forsys.inputs, PDF standards (PDF version, PDF/A, PDF/UA-1), a fixed creation timestamp (also used bydatetime.today()), page ranges and untagged output.PdfStandardandPageRangeparse the names thetypstCLI uses. - addedCLI flags
--input KEY=VALUE,--pdf-standard,--creation-timestamp(falls back toSOURCE_DATE_EPOCH),--pagesand--no-pdf-tags. - addedThe Wasm request accepts
inputs,pdf_standards,creation_timestamp,pagesandpdf_tags.
0.2.0
24 September 2026
- breaking
Config::resolve_template_pathandError::TemplatePathNotFoundare removed; useConfig::template_roots, which returns every existing template directory. - breakingMinimum supported Rust version is now 1.92 (required by Typst 0.15).
- added
compile_with_warningsreturns the PDF together with Typst's warnings; the CLI prints them to stderr. - addedErrors and warnings name the file, line and column.
- changedTypst 0.15 (was 0.13).
- changedTemplate directories are optional: documents without imports compile without any.
- changedEvery existing entry of
template_pathsis searched per import, in order, instead of only the first existing one. Entries that are not directories are skipped. - changedFonts found on disk are loaded only when a document uses them, and each face of a font collection is registered once.
- fixed
datetime.today()returns a date instead of a date and time, and honoursoffset. - securityquick-xml 0.38 (RUSTSEC-2026-0194, RUSTSEC-2026-0195) is still pulled in through Typst's bibliography support; no fixed version is available yet. Do not compile untrusted documents.
0.1.0
1 August 2026
- added
typstgen compile, the Rust library and the Wasm export, with template paths fromtypstgen.tomland Typst's bundled fonts.