Skip to content

Everything an e-invoice needs.

Create, calculate, validate, design, read. Open source for every PHP 8.3 project, with a native Laravel integration.

PHP or Laravel

Quittio comes in separate packages. The core and a country pack are all you need for valid e-invoices, in any project with PHP 8.3. Laravel is the comfort layer on top.

  • PHP 8.3

    quittio/core

    Data model, calculation, every format, validation and reading incoming invoices. No dependency on Laravel.

  • PHP 8.3

    quittio/country-de

    Country pack for Germany: mandatory fields under the VAT Act, tax presets, XRechnung, DIN 5008 and the base rate.

  • Laravel 13, optional

    quittio/laravel

    The comfort layer: facade, config file, Blade, queue, events, mail, Artisan commands and test fakes.

  • Laravel 13

    quittio/managed

    Quittio Managed: numbering, archive, cancellations and delivery in your database. Ships with version 1.0.0. The only part where Laravel is required.

In Laravel, quittio/quittio installs the core, the integration and the German country pack at once. Without Laravel, quittio/core and quittio/country-de are enough, step by step in the guide Create e-invoices with plain PHP, no Laravel needed.

Austria, Belgium, Switzerland and France have country packs of their own (quittio/country-at, -be, -ch and -fr), which you install separately. They follow the law as of October 2026 but have not been reviewed by a tax adviser yet.

only withLaravelFeatures with this mark need quittio/laravel. Everything else on this page also runs in plain PHP.

A data model that does the maths

You provide quantities, prices, discounts and tax categories. Quittio calculates totals, VAT and rounding according to EN 16931. Gross prices from shops are converted so the customer pays exactly the displayed amount.

In the documentation
  • EN 16931 data model with all business terms
  • Rounding according to BR-CO-10 to BR-CO-17
  • Gross price mode for shops
  • Reverse charge, small businesses, intra-community supplies
  • Also IGIC (Canary Islands), IPSI (Ceuta and Melilla) and split payment (Italy); IGIC and IPSI are named as such in the VAT rows

Validation on seven levels

Errors show up at render time, not at your customer. L1 to L4 and L7 run in PHP, L5 and L6 with the official KoSIT and veraPDF validators, locally, in Docker or in CI. The PHP rules report errors with readable messages before any XML is written; the official validator, which checks the written XML, stays the authority.

In the documentation
  • L1 Structure: Data formats, country and currency codes, decimals
  • L2 Mandatory fields: Mandatory and allowed fields of the chosen profile
  • L3 Business rules: EN 16931 (BR-…), XRechnung with extension and CVD, Peppol BIS 3.0 and German VAT Act (DE-USTG-…)
  • L4 XSD: XML against the schema (CII D16B, UBL 2.1)
  • L5 KoSIT: Official Schematron rules in the KoSIT validator
  • L6 veraPDF: PDF/A-3b conformance of the PDF
  • L7 Plausibility: IBAN, BIC, VAT ID, Leitweg-ID, optional VIES
  • Peppol BIS 3.0 in PHP: every Peppol rule that invoice data can break. The national rules (e.g. for Norway, Denmark, Sweden) are checked by the official validator only.
  • XRechnung extension (BR-DEX) and XRechnung CVD (BR-DE-CVD) in PHP, as in the official validator configuration
  • Switch single PHP rules off or change their severity, official rules only explicitly

PDF and design

Your invoice, your design, one data model. Logo, colours and texts via configuration, override single partials or use your own template. A mandatory field guard makes sure PDF and XML show the same data.

In the documentation
  • Three design levels
  • DIN 5008 letter layout with fold and punch marks
  • Carry-over across pages
  • EPC GiroCode and Swiss QR bill
  • Watermarks, translations, HTML output
  • Typed nodes for your own templates: IDEs and PHPStan know every value, published templates keep working
  • PDF/A-3b with embedded XML, checked with veraPDF in Quittio’s CI
  • Preview route in the browser only withLaravel

Reading incoming invoices

Since 2025 every business in Germany must be able to receive e-invoices. Quittio reads CII, UBL and ZUGFeRD, checks them and compares stated with calculated amounts.

In the documentation
  • CII, UBL, ZUGFeRD 1.0 and 2.x, Factur-X, XRechnung
  • Findings with rule codes
  • Reading and checking on the command line only withLaravel
  • Protected against XXE, billion laughs and zip bombs

More documents

From quote to payment reminder with the same builder and templates. A quote becomes an invoice with one call.

In the documentation
  • Quotes and order confirmations
  • Delivery notes without prices
  • Proforma invoices
  • Payment reminders with default interest (base rate or fixed rate)
  • Account statements

Laravel and testing

Quittio feels like Laravel: a facade, a config file, events, queue and mail. For tests there is a fake, assertions, factories and ready-made scenarios. Without Laravel, you use the core directly with Quittio::create().

In the documentation
  • Facade, storage, queue, events, mail, Blade only withLaravel
  • Artisan commands for schemas, code lists and base rate only withLaravel
  • Quittio::fake() and assertions only withLaravel
  • Factories and scenarios, also without Laravel

Country packs

Everything country-specific lives in country packs; the core stays country-neutral. A tax adviser confirmed the pack for Germany in October 2026. The packs for Austria, Belgium, Switzerland and France are installed separately; they follow the law as of October 2026 but have not been reviewed by a tax adviser yet.

In the documentation
  • Mandatory fields under sec. 14 UStG
  • Tax presets with legal texts, VAT rates by supply date
  • XRechnung 3.0, extension and CVD (Clean Vehicles Directive) with their rules
  • DIN 5008 and the German base rate
  • Settings under quittio.countries.de, add base rates without a new release only withLaravel
  • Austria: mandatory fields of the UStG 1994, CIUS-AT-NAT and CIUS-AT-GOV, writing and reading ebInterface 6.1
  • Belgium: mandatory fields of Royal Decree No. 1, Peppol BIS for domestic invoices between businesses, language regions
  • Switzerland: MWSTG requirements, QR bill with payment part and receipt, rounding to 5 Rappen
  • France: mentions of the CGI and the Code de commerce, SIREN and SIRET, Factur-X for domestic invoices; no connection to approved platforms and no e-reporting

AI assistants

So that your assistant writes code for the current version: every docs page is available as Markdown, plus llms.txt and an MCP server. For Laravel Boost, Quittio ships guidelines and a skill.

In the documentation
  • llms.txt and llms-full.txt
  • MCP server with search_docs, get_page, list_pages
  • Claude Code, Cursor, VS Code, Claude Desktop
  • Guidelines and a skill for Laravel Boost

More than generating files?

If your app issues invoices and has to keep them, Quittio Managed handles numbering, archive, cancellations and delivery.