mothermachine

Browse / Invoicing and finance

Inkvoice

One-container invoicing for freelancers: Stripe and PayPal, expenses, German e-invoicing, REST API.

AdaptableOperable Business appWeb app Deterministic TypeScript API License: MIT

Inkvoice is a Bun + Hono + React invoicing app in a single ~50 MB container with SQLite: invoices, quotes, recurring billing, online card payments, expenses, multi-currency reports and an opt-in ZUGFeRD/XRechnung/PEPPOL module for Germany. Deployment is an env table; day-to-day settings and Mustache templates are in-app. A REST API under /api/v1 mirrors the UI. MIT; a managed Cloud exists.

Use it when
  • I am a freelancer who wants invoices and card payments on a €5 VPS with my data in one SQLite file
  • I invoice German businesses and need XRechnung or ZUGFeRD without a per-seat subscription
Gotchas
  • COOKIE_SECURE defaults to true, so logins silently fail on plain HTTP unless you set it to false
  • Keep the 512 MB memory cap or Bun grows its heap
  • API tokens with scopes exist in routes/api-tokens.ts but the docs only describe JWT login
  • Real-software signal is thin: 21 stars, 8 forks, issues from four people; kept on the Show HN thread, Dokploy template and hosted Cloud

Last activity Sep 2, 2026. Fit: adaptable 3, operable 2.

Editions

Self-hosted · Free open source

  • Clonegit clone https://github.com/pigontech/inkvoice
  • ImageContainer
  • DeployDeploy

Inkvoice Cloud · Free closed source

For agents: JSON · Markdown

Adaptable: what is yours to change

Make it yours

Config only28 things to edit

Set JWT_SECRET and ADMIN_PASS and you are running; add SMTP to send invoices, Stripe or PayPal keys to take payments, OIDC for SSO, and a peppol.sh key for e-invoice transport. Currency, locale, numbering, logo and email and PDF templates (Mustache) are edited in Settings, not files. That is the whole surface for a freelancer or small team.

Env vars
ADMIN_USER ADMIN_PASS JWT_SECRET DATABASE_PATH PORT PUBLIC_BASE_URL COOKIE_SECURE ENABLE_HSTS SMTP_HOST SMTP_PORT SMTP_USER SMTP_PASS SMTP_FROM STRIPE_SECRET_KEY STRIPE_PUBLISHABLE_KEY STRIPE_WEBHOOK_SECRET PAYPAL_CLIENT_ID PAYPAL_SECRET PAYPAL_WEBHOOK_ID PAYPAL_ENV OIDC_ISSUER_URL OIDC_CLIENT_ID OIDC_CLIENT_SECRET PEPPOL_SH_API_KEY PEPPOL_SH_WEBHOOK_SECRET DEMO_MODE
Config files
.env docker-compose.yml
Prompt files
none
Accounts you need
Stripe or PayPal (optional)SMTP provider (to email invoices)peppol.sh (PEPPOL transport, optional)OIDC provider (SSO, optional)

Source

Operable: what an agent can drive

Interface

OfficialAPIpublished by the builderlocal

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
docs.inkvoice.app/api/

Reach

Complete coverage. 10 of 10 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Invoice lifecycle: draft, send, paid, void, duplicateReachabledocs/api/invoices.md; /api/v1/invoices
Quotes and conversion to invoicesReachabledocs/api/quotes.md; /api/v1/quotes
Recurring invoicesReachablepackages/backend/src/routes/recurring.ts; not in the docs index
Online payments with Stripe and PayPalReachablepublic /api/v1/public/invoices/:shareToken/pay; keys from STRIPE_* and PAYPAL_* env
Expense trackingReachablepackages/backend/src/routes/expenses.ts; not in the docs index
German e-invoicing and PEPPOL send/receiveReachablepackages/backend/src/routes/einvoice.ts; docs/features/e-invoicing.md
Reports and CSV exportReachabledocs/api/reports.md; routes/export.ts
Customers and productsReachabledocs/api/customers.md, products.md
Invoice and email templatesReachabledocs/api/templates.md; docs/TEMPLATE_VARIABLES.md
Users and rolesReachableroutes/users.ts; multi-user with role-based permissions

Code stack

Languages
TypeScript
Frameworks
BunHonoReact 19ViteTailwindshadcn/ui
Package manager
bun
Database
SQLite
Hosting target
Docker (ghcr.io/pigontech/inkvoice)Dokploy templateCoolify
Built
Mixed (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorsingle Docker container serving API and SPA (README Tech Stack)95%
executionModelno model at runtime95%
operabilityREST API documented at docs.inkvoice.app/api by the Builder; docs/api/*.md in repo85%
effortREADME Configuration table and .env.example name every variable; Settings page holds runtime knobs90%
editionsREADME: MIT source, Inkvoice Cloud managed; no Cloud price found60%
activeGitHub pushedAt 2026-09-02; Show HN 2026-08-11; release tag 0.1.0–
reach80%

Open questions

  • Inkvoice Cloud pricing (site and cloud pages rendered without content for the fetcher)
  • Whether API tokens are documented anywhere for agents, or JWT login is the intended path
  • Gate 3 borderline; Curator to confirm

Sources