A professional, DIN 5008 compliant invoice template for Typst with automatic calculations, EPC-QR-Code (GiroCode), and ZUGFeRD e-invoicing support.
Typst
53
178 commits
updated Sep 22, 2026
Modern Invoice Template for Typst
A professional, compliant, and automated invoice template for Typst with integrated ZUGFeRD e-invoicing support. This package follows the German DIN 5008 standard (Form A & B) and automates calculations, VAT handling, and payment details.
![]()
locale API to inject custom translations for any language.#line-items, #item, #group, and #bundle—inspired by CeTZ, keeping your document clutter-free.For comprehensive guides, API references, theming instructions, and advanced examples, please visit our official documentation:
👉 Read the Full Documentation Here
Import the package at the top of your Typst file:
#import "@preview/invoice-pro:0.4.2": *
Here is an example of how to create an invoice using the new v0.3.0 API:
#import "@preview/invoice-pro:0.4.2": *
#show: invoice.with(
theme: themes.DIN-5008(form: "A"), // or form: "B"
locale: locale.en-de,
sender: (
name: "Your Company / Name",
address: "1 Example Street",
city: "12345 Example City",
tax-nr: "123/456/789",
),
recipient: (
name: "Customer Name",
address: "5 Customer Street",
city: "98765 Customer City",
),
invoice-nr: "2026-01",
)
// Add Invoice Items inside a scoped block
#line-items[
#item(
[Consulting & Concept],
price: 85.00,
quantity: 5,
unit: "hrs"
)
#item(
[Web Design Layout (Flat Rate)],
price: 1200.00,
)
#item(
[Stock Licenses (Images)],
price: 25.00,
quantity: 4,
)
#discount([Project Discount (Regular Customer)], amount: 10%)
]
// Payment Terms
#payment-goal(days: 14)
// Bank Details with QR Code
#bank-details(
bank: "Example Bank",
iban: "DE07100202005821158846",
bic: "EXAMPLEBICX",
)
#signature()
With the major refactoring introduced in version 0.2.0, the package structure is solidifying. Here is the current stability status of the various API components:
invoice arguments): Mostly Stable. The core invoice configuration is established. Future updates to the header will be non-breaking and will primarily consist of adding new optional fields.#line-items, #group, #bundle, #item): Stable. The new block-based data model is considered almost finished and safe to use.
unit argument in #item, #group, and #bundle supports dictionary inputs (e.g., (display: "Std.", code: "HUR")) to comply with the standardized unit formats and codes required for ZUGFeRD e-invoicing.theme): Under Construction. The theming engine is still evolving and will most likely experience breaking changes in the next updates as we refine customization capabilities.locale): Under Construction. The localization and internationalization systems are actively being worked on and are subject to change.This project uses Nix to provide a reproducible, sandboxed development environment. You do not need to install Typst, linters, or formatters globally—the flake provides everything.
You can instantly compile a .typ file using the latest unreleased version of this template directly from GitHub, without entering a development shell:
nix run github:leonieziechmann/invoice-pro -- my-invoice.typ
# Or locally from the repository root:
nix run .#default -- my-invoice.typ
nix develop
# or if you use direnv:
direnv allow
This activates a shell containing typst, typstyle, markdownlint, and prettier.
.typst-data). You can import the package in your test files immediately without manual installation:#import "@preview/invoice-pro:0.4.2": *
check-pr
I am actively working on improving this template. Here is what's planned for future releases:
Have an idea? Feel free to open an issue or pull request!
This template relies on these amazing packages:
letter-pro for the DIN layout.sepay for EPC-QR-Code generation.ibanator for IBAN formatting.loom for reactive document rendering.Acknowledgements:
MIT
Typst
97.7%
Nix
1.3%
A professional, DIN 5008 compliant invoice template for Typst with automatic calculations, EPC-QR-Code (GiroCode), and ZUGFeRD e-invoicing support.
Typst
53
178 commits
updated Sep 22, 2026
Modern Invoice Template for Typst
A professional, compliant, and automated invoice template for Typst with integrated ZUGFeRD e-invoicing support. This package follows the German DIN 5008 standard (Form A & B) and automates calculations, VAT handling, and payment details.
![]()
locale API to inject custom translations for any language.#line-items, #item, #group, and #bundle—inspired by CeTZ, keeping your document clutter-free.For comprehensive guides, API references, theming instructions, and advanced examples, please visit our official documentation:
👉 Read the Full Documentation Here
Import the package at the top of your Typst file:
#import "@preview/invoice-pro:0.4.2": *
Here is an example of how to create an invoice using the new v0.3.0 API:
#import "@preview/invoice-pro:0.4.2": *
#show: invoice.with(
theme: themes.DIN-5008(form: "A"), // or form: "B"
locale: locale.en-de,
sender: (
name: "Your Company / Name",
address: "1 Example Street",
city: "12345 Example City",
tax-nr: "123/456/789",
),
recipient: (
name: "Customer Name",
address: "5 Customer Street",
city: "98765 Customer City",
),
invoice-nr: "2026-01",
)
// Add Invoice Items inside a scoped block
#line-items[
#item(
[Consulting & Concept],
price: 85.00,
quantity: 5,
unit: "hrs"
)
#item(
[Web Design Layout (Flat Rate)],
price: 1200.00,
)
#item(
[Stock Licenses (Images)],
price: 25.00,
quantity: 4,
)
#discount([Project Discount (Regular Customer)], amount: 10%)
]
// Payment Terms
#payment-goal(days: 14)
// Bank Details with QR Code
#bank-details(
bank: "Example Bank",
iban: "DE07100202005821158846",
bic: "EXAMPLEBICX",
)
#signature()
With the major refactoring introduced in version 0.2.0, the package structure is solidifying. Here is the current stability status of the various API components:
invoice arguments): Mostly Stable. The core invoice configuration is established. Future updates to the header will be non-breaking and will primarily consist of adding new optional fields.#line-items, #group, #bundle, #item): Stable. The new block-based data model is considered almost finished and safe to use.
unit argument in #item, #group, and #bundle supports dictionary inputs (e.g., (display: "Std.", code: "HUR")) to comply with the standardized unit formats and codes required for ZUGFeRD e-invoicing.theme): Under Construction. The theming engine is still evolving and will most likely experience breaking changes in the next updates as we refine customization capabilities.locale): Under Construction. The localization and internationalization systems are actively being worked on and are subject to change.This project uses Nix to provide a reproducible, sandboxed development environment. You do not need to install Typst, linters, or formatters globally—the flake provides everything.
You can instantly compile a .typ file using the latest unreleased version of this template directly from GitHub, without entering a development shell:
nix run github:leonieziechmann/invoice-pro -- my-invoice.typ
# Or locally from the repository root:
nix run .#default -- my-invoice.typ
nix develop
# or if you use direnv:
direnv allow
This activates a shell containing typst, typstyle, markdownlint, and prettier.
.typst-data). You can import the package in your test files immediately without manual installation:#import "@preview/invoice-pro:0.4.2": *
check-pr
I am actively working on improving this template. Here is what's planned for future releases:
Have an idea? Feel free to open an issue or pull request!
This template relies on these amazing packages:
letter-pro for the DIN layout.sepay for EPC-QR-Code generation.ibanator for IBAN formatting.loom for reactive document rendering.Acknowledgements:
MIT
Typst
97.7%
Nix
1.3%