minimalist web-based invoice generator

09f5695 fix: always enable "wallpaper" latex package

26 days ago

1d4d017 style: apply black

27 days ago


paninvoice is a minimalistic web-based invoice generator.

It supports the following workflow for generating an invoice:

  1. Type some invoice details into a web form (customer details, order items).
  2. Preview the generated invoice (as a PDF).
  3. Send the invoice to the customer (optional) and to your own email address.
    • Your email inbox serves as your archive for sales invoices.

It lacks (by design) the following features:

  • no storage
    • Nothing (not even the invoices) are stored on the server. The invoices are sent to you (and maybe your customer) by email. That's it.
  • no invoice ID (e.g. 2021-12345) is generated - you need to pick each invoice ID manually
    • For example you can find the most recently used invoice ID in your email inbox (where all previous invoices were sent) and increment the number by one.
  • no complicated tax handling
    • You may configure exactly one tax level (e.g. 19%), which will be used for all invoice items.



Just run the local development server with the example template:

make run CONFIG_FILENAME="example/paninvoice.yaml"

Now you can visit the web interface with your browser: http://localhost:5000/

In order to use paninvoice for your own invoices, you should customize the content of the example configuration and the example template according to your taste.


The web interface is as simple as possible:

example invoice

The rendered PDF is ready for printing (and even snail-mailing):

example invoice

The rendered invoice can be customized by adding a background image (e.g. for a logo) and a signature image.


It is recommended to run paninvoice via uwsgi.

Take a look at the example configuration file (uwsgi.ini) and adjust it according to your needs.

Probably you should restrict access to the web interface to authorized users only.

Run make translate once, in order to compile the translation catalogues.

#Technical details

  1. paninvoice feeds the input data (customer details and order items) into the markdown-formatted template (invoice.tmpl).
  2. The result is send to pandoc as content input.
  3. In addition pandoc uses the LaTeX template letter-template.tex (provided by paninvoice).
  4. pandoc generates a PDF file based on these inputs.


paninvoice is licensed under the APGL v3 or later.