Quittio
E-invoicing for Laravel. Quittio creates, validates, reads and renders electronic invoices based on the European standard EN 16931 – ZUGFeRD/Factur-X, XRechnung, UBL and Peppol BIS from one data model.
Get started Formats and profiles
Germany is the first market; everything country-specific lives in country packs, so the core stays country-neutral.
Status: version 0.1.0 in preparation. Not released yet; APIs may still change, and the legal wording of the country packs must be confirmed by a tax adviser.
Packages
| Package | Purpose |
|---|---|
quittio/core |
Country-neutral core: EN 16931 data model, calculation, profiles, CII and UBL writers/readers, ZUGFeRD/Factur-X PDF/A-3, validation. Usable without Laravel. |
quittio/laravel |
Laravel integration: facade, configuration, Blade templates, commands, testing helpers. |
quittio/country-de |
Country pack for Germany: UStG mandatory fields, tax presets, XRechnung profiles and BR-DE rules, DIN 5008 letter layouts. |
quittio/quittio |
Everything in one package: core, Laravel integration and the country pack Germany. |
quittio/managed |
Managed layer (commercial licence): issuer profiles, drafts, gapless numbering, archive with hashes, cancellations and corrections, mail delivery, audit log, retention. |
Requirements
- PHP 8.3 or newer with
ctype,dom,gd,libxml,mbstring,xmlwriter,zlib;intlrecommended,zipforquittio:schemas:download - Laravel 13 (only for
quittio/laravel) - Optional: Java 17+ for the KoSIT validator, veraPDF or Docker for PDF/A checks,
opis/json-schemafor JSON input validation
Supported formats
| Format | Content |
|---|---|
zugferd / factur-x |
PDF/A-3 with embedded CII XML (profiles MINIMUM to EXTENDED, XRECHNUNG) |
xrechnung-cii, xrechnung-ubl |
XRechnung 3.0 as plain XML |
cii, ubl |
Plain CII or UBL 2.1 XML in any profile |
peppol |
UBL according to Peppol BIS Billing 3.0 |
pdf, html, json |
PDF without XML, HTML preview, normalised data model |
Quick example
use Quittio\Core\Builder\InvoiceBuilder;
use Quittio\Core\Enums\{InvoiceTypeCode, PaymentMeansCode, UnitCode};
use Quittio\Country\DE\Tax\VatPreset;
use Quittio\Laravel\Facades\Quittio;
$invoice = InvoiceBuilder::make()
->number('RE-2026-0042')
->issueDate('2026-10-03')
->type(InvoiceTypeCode::CommercialInvoice)
->currency('EUR')
->seller(fn ($s) => $s
->name('Muster GmbH')
->vatId('DE123456789')
->address('Hauptstraße 1', '12345', 'Musterstadt', 'DE')
->contact('Max Muster', '+49 123 456789', 'rechnung@muster.de')
->electronicAddress('rechnung@muster.de', 'EM'))
->buyer(fn ($b) => $b
->name('Kunde AG')
->address('Bahnhofstraße 5', '54321', 'Beispielstadt', 'DE')
->electronicAddress('ap@kunde.de', 'EM'))
->deliveryDate('2026-09-30')
->line(fn ($l) => $l
->name('Web development')
->quantity(24, UnitCode::Hour)
->netPrice('95.00')
->vat(VatPreset::Standard19))
->paymentTerms(fn ($t) => $t->dueInDays(14))
->payment(PaymentMeansCode::SepaCreditTransfer, iban: 'DE02120300000000202051')
->build();
$result = Quittio::make($invoice)->format('zugferd')->render();
$result->pdf(); // PDF/A-3 with embedded factur-x.xml
$result->xml(); // CII XML
Documentation
| Topic | Content |
|---|---|
| Getting started | Installation, building and rendering invoices, cancellations, use without Laravel, JSON |
| Building invoices | Every builder method, parties, lines, VAT, payment, calculation, cancellations in the core, data model |
| Formats and profiles | Output formats, automatic format choice, embedded files and XMP |
| Validation | Levels L1 to L7, KoSIT and veraPDF, BMF error classes |
| Templates and design | Design levels, view model, mandatory field guard, letter layouts, logos |
| Quotes and other documents | Quotes, order confirmations, delivery notes, proforma invoices, reminders, statements |
| Reading incoming invoices | XML and PDF input, findings, limits |
| Laravel integration | Facade, rendering API, storage, queue, events, mail, Blade templates, preview |
| Configuration | Every key of config/quittio.php |
| Country packs | What a pack provides, the German pack, tax presets and rules |
| Managed layer | Issuer profiles, customers, numbering, archive, cancellations and corrections, delivery, audit log, immutability, retention |
| Testing | Fake, assertions, factories, scenarios |
| Artisan commands | All commands and publish tags |
| Field reference | Every field of the data model with BT, cardinality and XML paths (generated) |
Licence
Open core: quittio/core, quittio/laravel, quittio/country-de and quittio/quittio are released under the MIT licence. The Managed layer quittio/managed is commercially licensed.