Darko Gjorgjijoski 773670c18f feat(pdf): archival PDF/A output and document properties (#732)
Generated files carried no document properties at all, so an archive of them
showed a column of blank titles and no author. Title, Subject, Author and
Creator are now written from the document number and company, on both drivers:
dompdf via addInfo(), Gotenberg via metadata().

dompdf needed more than the API call. It reads Title from the <title> element
during render(), which happens after addInfo(), so metadata set through the API
alone was silently overwritten by whatever the template put there and the two
drivers disagreed about what the file was called. The title is written into the
markup as well, escaped.

Also adds an archival format setting for Gotenberg: off, PDF/A-1b, -2b or -3b.
PDF/A-3 is what the EU e-invoicing formats expect. Verified against a stock
gotenberg:8 -- LibreOffice inside the image does the conversion and the output
carries the right pdfaid:part in its XMP -- so no extra components are needed.

A fixed list rather than free text, because the SDK forwards whatever it is
given and an unsupported value would surface only as an HTTP error from the
service at render time. Empty is a real choice meaning an ordinary PDF, so it
overrides an env default rather than falling through it.

Gotenberg only: dompdf cannot produce PDF/A.

Claude-Session: https://claude.ai/code/session_01QmECndmNZwzN65Zz9P87dF
2026-08-01 14:37:22 +02:00
2021-06-18 15:23:56 +05:30
2025-08-31 03:04:31 +02:00
2024-07-28 17:44:22 -07:00
2024-07-28 17:24:57 +02:00
2024-01-28 19:47:46 +01:00
2024-03-27 11:00:36 +01:00
2021-12-02 21:01:04 +05:30
2024-06-05 11:33:52 +02:00
2026-04-07 20:14:02 +02:00
2024-01-29 04:46:01 -06:00
2026-04-06 17:59:15 +02:00

Introduction

InvoiceShelf is an open-source web app that helps you track expenses, record payments, and create professional invoices and estimates. It is self-hosted, multi-tenant, and built for individuals and small businesses that want to keep their books on their own infrastructure.

The web application is built with Laravel and Vue 3.

To get started using Docker Compose, follow the Installation guide.

Table of Contents

  1. Documentation
  2. System Requirements
  3. Download
  4. Discord
  5. Roadmap
  6. Translate
  7. License

Documentation

System Requirements

  • PHP 8.4+ is required (since v2.2.0, when InvoiceShelf moved to Laravel 13).
  • Database: MySQL, MariaDB, PostgreSQL, or SQLite.
  • Before updating from inside the app, verify your server meets the target version's PHP and extension requirements.
  • The in-app updater verifies requirements and refuses to proceed if they are not met.

Download

Discord

Join the discussion on the InvoiceShelf Discord: Invite Link

Roadmap

Rough roadmap of things to come, not in any specific order:

  • Automatic Update
  • Email Configuration
  • Installation Wizard
  • Address Customisation & Default Notes
  • Edit Email before Sending Invoice
  • Available as a Docker image
  • Performance Improvements
  • Customer View Page
  • Custom Fields on Invoices & Estimates
  • Multiple Companies
  • Recurring Invoices
  • Customer Portal
  • Decoupled system settings from company settings (v3.0)
  • Proper multi-tenancy system (v3.0)
  • Company member invitations with custom roles (v3.0)
  • Dark mode (v3.0)
  • Full TypeScript refactor of the frontend (v3.0)
  • Improved backend architecture (v3.0)
  • Security hardening (v3.0)
  • Reworked installation wizard (v3.0)
  • Module Directory (v3.0)
  • Rewritten Payments module (v3.0)
  • Accept Payments (Stripe integration)
  • Improved template system for invoices and estimates

Translate

Help us translate InvoiceShelf into your language: https://crowdin.com/project/invoiceshelf

Star History

Star History Chart

License

InvoiceShelf is released under the GNU Affero General Public License v3.0. See LICENSE for the full text.

Description
No description provided
Readme AGPL-3.0 83 MiB
Languages
PHP 59.9%
Vue 36.1%
Blade 3.2%
Shell 0.6%
Dockerfile 0.1%