horstoeko/zugferd-laravel
Laravel integration for the horstoeko/zugferd library, making it easy to create, read, and validate ZUGFeRD/Factur-X electronic invoices. Provides service provider, facade, and configuration to generate PDF/A-3 files with embedded XML in Laravel apps.
What this actually is. horstoeko/zugferd-laravel is a thin Laravel integration layer — a service provider, config file, and facade — over the mature horstoeko/zugferd PHP library. Almost all domain logic (ZUGFeRD 2.x / Factur-X / XRechnung profile handling, XML serialization, PDF/A-3 embedding, schema validation) lives in the upstream dependency. This distinction is the single most important thing to establish before scoring the package: the wrapper's low maturity score (0.365, 43 stars) reflects the glue, not the engine. Evaluate the engine separately.
Architecture fit. Good fit for any Laravel monolith or modular monolith that generates outbound invoices. The package assumes synchronous in-process generation and returns file artifacts (XML and/or PDF-A-3), which maps cleanly onto a job → storage → delivery pipeline. It does not provide document lifecycle management, numbering, delivery, or archiving — those remain your responsibilities. Treat it as an invoice-serialization library, not an e-invoicing platform.
Domain context (why this matters now). German B2B e-invoicing is mandated in phases (receive-capability from 2025, issue-capability phasing through 2028); France's Factur-X mandate is also phasing in. This is a compliance-driven, deadline-bound capability, not an optional feature. That raises the bar on correctness (a rejected invoice is a business interruption) and on longevity (you must be able to re-render and validate stored documents for the statutory retention period, typically 10 years in DE).
Integration feasibility. Low-to-moderate. Install via Composer, publish config, resolve the facade or inject the client. The hard work is not wiring — it is:
Technical risk.
horstoeko/zugferd directly. The facade is not load-bearing.Key questions to answer before adoption.
Stack fit. Strong for a standard Laravel stack (Composer, service container, config, filesystem disks, queues). It slots in as a domain service with no framework-level friction. If the wider application is not Laravel, skip the wrapper and use the underlying library — the wrapper buys you almost nothing outside the container/facade conveniences.
Migration path.
InvoiceDocumentService that owns profile selection, numbering, and storage — do not let callers touch the facade.Compatibility.
horstoeko/zugferd version explicitly and track its release notes; pin schema/ZIP dependency versions too.dom, libxml, zip, mbstring, plus whatever the PDF writer needs — often gd/imagick, iconv).Sequencing (recommended).
Maintenance. Two maintenance surfaces: the wrapper (small, rarely changes — low effort) and the upstream library plus its schema/validation dependencies (active, standards-driven — recurring effort). Budget an owner with e-invoicing domain literacy, not just a PHP developer. Expect at least annual work tied to schema and mandate changes, plus dependency security patches.
Support. Community-only, single-primary-maintainer dynamics. No vendor SLA. For a compliance-critical path this is acceptable only if you are prepared to fork and patch the upstream library, and can articulate how you would validate a patch independently (the KoSIT validator and veraPDF give you that ground truth). Escalate to a build-vs-buy review if the organization cannot tolerate this.
Scaling. CPU- and memory-bound on PDF assembly and validation. Throughput is governed by worker concurrency, not by the package. Size workers generously (PDF/A-3 generation can spike memory on large invoices with many line items), isolate the invoice queue from general workloads, and cap concurrency to avoid memory pressure. Storage grows monotonically under retention requirements — plan for 10-year archival with immutability and lifecycle policy from day one.
Failure modes to instrument.
Ramp-up. Moderate. A competent Laravel engineer is productive with the API in days; becoming reliably correct in e-invoicing takes weeks and requires learning profile semantics, validation tooling, and retention rules. Plan for that explicitly in estimation — the code is the easy part, the compliance semantics are not.
Overall TPM read. Technically viable and architecturally appropriate, with the caveat that the value and the risk both sit in the upstream library rather than the wrapper. The low package score is a proxy for ecosystem maturity, not for fitness. Proceed via a bounded validation spike, keep the wrapper non-load-bearing, and treat external conformance validation as a mandatory, permanently-staffed operational control rather than a launch-time checkbox.
How can I help you explore Laravel packages today?