Skip to content

v0.2.0

Latest

Choose a tag to compare

@bariscelik bariscelik released this 25 Aug 10:15
· 77 commits to main since this release

Two months and 115 commits since the first tagged release. The headline: Inkvoice now does EU e-invoicing, plus SSO and a lot more billing depth.

EU e-invoicing

Germany (E-Rechnung), an opt-in module that stays off by default, so if you don't need it you never see it:

  • EN 16931 compliant output: ZUGFeRD 2.2 hybrid PDF, XRechnung (UBL) and PEPPOL BIS
  • E-invoice inbox: import, parse and process incoming XRechnung / ZUGFeRD files
  • Auto-attach the e-invoice to outgoing invoice emails, per invoice or globally

France (Factur-X), ahead of the September 1, 2026 mandate:

  • SIREN / SIRET customer fields, with an Annuaire reachability check
  • French buyer IDs emitted in Factur-X
  • Franchise en base VAT exemption (art. 293 B CGI)
  • Network-aware transport selection, plus a warning when a French buyer has no SIREN

PEPPOL transport, provider agnostic:

  • Send invoices and credit notes over the PEPPOL network (a peppol.sh driver ships with bring-your-own credentials)
  • Receive inbound PEPPOL documents straight into the e-invoice inbox
  • Delivery state machine with retries and a per-attempt audit trail
  • Register your business as a PEPPOL receiver, with conflict detection so you can't accidentally take over an access point

SSO / OIDC

  • Sign in with any OIDC provider: discovery, id_token validation, JWKS caching
  • JIT provisioning, so accounts are created on first sign-in
  • SSO button and error handling on the login page
  • Hardened: signed state cookie, issuer normalization, and an SSO-bound account can never be rebound through a verified email

Billing and invoicing

  • Instalments: convert a quote straight into an instalment invoice
  • Skonto: early-payment cash discounts
  • Late fees: applied automatically to overdue invoices
  • Customer credit: record payments as credit, with alerts when a customer is in credit
  • Consolidation: merge several draft invoices into one, grouped per source on the PDF
  • Tags: free-form tags on invoices and customers
  • Configurable quote and credit note number patterns
  • Payment breakdown rendered on the invoice PDF

Security

  • JWT_SECRET is now required in docker-compose.yml, with no shipped default (see upgrade notes)
  • Payment gateways now require webhook credentials before they can be enabled
  • nodemailer bumped to 9.0.5 (GHSA-p6gq-j5cr-w38f)

Fixes

  • Number sequences now pick numerically, look up by rendered prefix, skip foreign matches that share a prefix, and reject patterns with no sequence token
  • The e-invoice PDF routes through the currency fallback and keeps its number formatting
  • Quote currency uses the same dropdown as invoices
  • Demo mode: the seeded admin account is protected from lockout

Upgrade notes

Database migrations 18 through 26 run automatically on boot. Back up data/invoice.db before you upgrade.

Breaking: docker-compose.yml no longer ships a fallback JWT_SECRET. Compose will refuse to start until you set one:

JWT_SECRET=$(openssl rand -base64 48)

That is deliberate. Any secret shipped in a public repo is public knowledge, so if you were running on the old default, rotating it is the whole point. Changing it signs out every existing session.

Also removed: the dead CHROME_PATH setting. Drop it from your environment if you had it set.

Run it

docker pull ghcr.io/pigontech/inkvoice:0.2.0

Full instructions for Docker Compose, Dokploy and Coolify are in the README. Live demo, no signup needed: demo.inkvoice.app with demo / demo.

MIT licensed.