mrkeyoor.com_
Tue 01 Sept 17:42 UTC
Self-Hostedevaluationupdated 26 Aug 2026

invoice-builder review

Invoice Builder is an offline desktop and self-hosted web application for creating invoices and quotes, tracking payment state, and exporting PDF or European e-invoice files. It stores data in a local SQLite file or PostgreSQL instead of requiring an account or subscription.

+55stars / 7d
Verdict

Our Invoice Builder setup used 1,054 MB and built in 10 seconds, but its test process failed because the sqlite3 binary required GLIBC 2.38 even though all 4 executed tests passed. It is a strong fit for one freelancer who wants offline records and highly configurable PDFs without a subscription. Treat multi-user hosting, e-invoice compliance, macOS distribution, and project ownership as due-diligence items before a business standardizes on it.

We ran it

Lab card: what happened when we ran invoice-builderScreenshot of invoice-builder (github.com/piratuks/invoice-builder)
Install✓ · 94s1249 packages · 1054 MB
Build✓ · 10s
Tests✗ · 10s4 passed · 0 failed of 4 (vitest)
Known vulns00 critical · 0 high · 0 moderate · 0 low (npm audit)
Repo739 files~40,390 lines of source · 53.3 MB · 3 CI workflows · Dockerfile

Answers from our run

Does invoice-builder build from source?

Dependencies installed in 94 seconds (1249 packages), and the build succeeded in 10 seconds. We cloned commit d8afd92 into a clean Debian container with 3 CPUs and no project-specific setup.

Do invoice-builder's tests pass?

Yes: 4 of 4 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Does invoice-builder have known vulnerabilities in its dependencies?

npm audit found none in the dependency tree at the time of our run.

Who should not use invoice-builder?

Organizations that need a vendor-backed compliance guarantee: the README claims standards-compliant exports, but adopters still need to validate files against their jurisdiction and delivery network.

What are the alternatives to invoice-builder?

Invoice Ninja, Akaunting. Our Invoice Builder setup used 1,054 MB and built in 10 seconds, but its test process failed because the sqlite3 binary required GLIBC 2.

Setup3/5Downloads are simple; source install is 1,054 MB and hit a GLIBC error
Docs4/5Desktop, Docker, backups, formats, and data behavior are explained
Community3/5915 stars and active reports, with one named maintainer
Maturity3/5Active 2.5.5 release, but multi-user behavior needs verification

Who it’s for

Freelancers who want invoices, quotes, and client records available offline.
Small businesses that prefer a portable database file over a hosted billing account.
European sellers who need to evaluate UBL 2.1, Peppol BIS Billing 3.0, or XRechnung export.
Self-hosters willing to back up SQLite or operate PostgreSQL for shared access.

Who it’s NOT for

Organizations that need a vendor-backed compliance guarantee: the README claims standards-compliant exports, but adopters still need to validate files against their jurisdiction and delivery network.
macOS teams that prohibit unsigned software: the README instructs users to remove Gatekeeper's quarantine attribute with sudo xattr.
Multi-user Docker deployments using separate local databases: issue 215 reports that a second user can switch both sessions onto the same database.
Teams that require a broad maintainer bench: the README says one developer maintains the project and that it is open for asset-only acquisition.
Builders on older Linux runtimes who need the source test suite to pass unchanged: our sqlite3 module required GLIBC 2.38, which the sandbox did not provide.

Setup reality

Our sandbox installed 1,249 npm packages in 94 seconds and used 1,054 MB. The build succeeded in 10 seconds. Tests exited 1 after 10 seconds: Vitest ran 4 tests and all passed, but one test file failed to load because the sqlite3 native module required GLIBC_2.38.

Desktop users can download Windows, macOS, or Debian packages and create a SQLite file. Source development needs Node and Electron. The web route adds backend and frontend services plus a mounted database, while PostgreSQL requires host, port, username, password, and database settings.

The app is unsigned on macOS, and the README tells users to remove its quarantine flag manually. Npm audit found 0 known vulnerabilities. Backups matter in both modes because invoices, business records, and style snapshots live in the selected database.

Invoice Builder keeps the accounting file in your hands

Invoice Builder is aimed at freelancers and small businesses that want to make invoices without opening another cloud account. The desktop app stores records in a SQLite file chosen by the user. A web deployment can use the same database style or connect to PostgreSQL. There is no subscription layer in the project itself, and the MIT license permits broad use and modification. That is a clean proposition for a solo operator.

The document model covers invoices and quotes, with payment states, partial payments, discounts, shipping, taxes, multiple currencies, and reusable business records. A document captures snapshots of its business, bank, style, client, item, and currency data. Later edits to those source records do not silently rewrite old invoices. That historical behavior matters more than a long feature list once documents have been sent to customers.

PDF control is extensive, while compliance still needs checking

PDF output can use A4 or Letter pages, preset layouts, bundled fonts, brand colors, logos, signatures, attachments, watermarks, custom labels, reordered columns, and payment QR codes. Live preview makes this practical for users who care about presentation. The README also lists 4 interface languages: French, German, English, and Lithuanian, with a separate language choice for each invoice or quote.

Electronic exports include UBL 2.1, Peppol BIS Billing 3.0, and XRechnung. The project describes these outputs as compliant, but an invoice's legal adequacy can depend on jurisdiction, buyer rules, tax handling, and the validation or delivery network used. Before replacing an existing billing system, run representative documents through the official validator and receiving process your customers require. A repository claim should begin that check, not end it.

What happened when we ran it

Our sandbox installed 1,249 npm packages in 94 seconds and occupied 1,054 MB. The build succeeded in 10 seconds. Npm audit reported 0 known vulnerabilities at critical, high, moderate, or low severity. The measured commit was d8afd92 in a fresh, unprivileged Node 22 Debian container with 3 CPUs and 8 GB of RAM.

Tests exited with code 1 after 10 seconds. Vitest reported 4 tests passed and 0 failed, but one of 2 test files could not load. The sqlite3 native module requested GLIBC_2.38, which was unavailable in the container's libm.so.6. That is a test-process failure even though every executed assertion passed. The log does not show whether rebuilding the module or changing the host is the project's preferred remedy.

The checkout held 739 files, about 40,390 source lines, and 53.3 MB before dependencies. It had 3 CI workflow files, a Dockerfile, and a Compose file. There was no top-level tests directory, while tests existed under source paths and Vitest found them. The 1,054 MB installed footprint is large beside the README's approximate 550 MB application figure, though those numbers describe different artifacts and should not be equated.

Desktop use avoids the web deployment's shared-state questions

For one person, the flow is direct: install the application, create or open a database, add a business, currency, client, bank, and item, then build a document. Full database backup, JSON export and import, and XLSX transfer for many entities provide several ways out. Invoices and quotes are export-only through the structured import path to preserve their history. Restore testing is still the user's job.

The Docker route runs backend and frontend containers, or combines both with a standalone Compose file. PostgreSQL is described as the choice for concurrent, multi-device use. Issue 215 reports a serious edge in the recommended 2-container setup with separate local database files: when a second user selected a database, the first user's refreshed view showed the second database. Teams should use PostgreSQL and test session separation before exposing the web app to multiple people.

Unsigned macOS packages demand an explicit trust decision

Windows 10 or newer, modern Debian-family Linux distributions, and macOS 11 or newer on Apple Silicon are listed as supported. The macOS package is unsigned. The README explains that Gatekeeper may label it damaged or unidentified, then instructs users to remove the quarantine attribute from the installed app with a sudo command. That is transparent documentation, but managed Macs may forbid the workaround for good reason.

Linux distribution is through a DEB package rather than an AppImage or distribution repository. Issue 203 asks for an AppImage. For organizations, packaging policy may decide the purchase before invoice features do. A Docker deployment can avoid desktop packaging, while adding server patching, database backup, authentication review, TLS termination, and multi-user verification to the owner's responsibilities.

Active releases sit beside a single-maintainer handoff risk

Release 2.5.5 shipped on August 10, 2026, fixing invoice-number uniqueness per business and client. GitHub recorded another push on August 26. The project had 915 stars and 23 combined open issues and pull requests when fetched. Current commits and same-month release activity show maintenance today, even with a modest community size.

The README also states that one developer maintains Invoice Builder and the project is open for asset-only acquisition. That does not make it unusable. It does change the risk calculation for a business whose invoicing process may last years. Keep database exports current, document the installed release, and confirm that another engineer can build the app before depending on the current maintainer's availability.

It is best as a private tool for one business

Invoice Builder's offline file, document snapshots, PDF controls, and import and export options form a coherent product for a freelancer. Our 10-second build suggests the source is approachable after its large install, while the GLIBC test failure warns that native dependencies need a matched build environment. The lack of mandatory accounts is a real advantage for private financial records.

A larger organization should test PostgreSQL concurrency, user separation, backups, signed deployment, and every required e-invoice case. Invoice Ninja or Akaunting makes more sense when the invoice sits inside a broader accounting or client workflow. For one operator who wants local ownership and verified backups, Invoice Builder is unusually capable.

Alternatives

ProjectWhat it isPick it when
Invoice NinjaA larger invoicing platform with client portals, payments, expenses, and self-hosting.pick this instead when billing workflows, client access, and integrations matter more than a small offline desktop app.
AkauntingA web-based small-business accounting system that includes invoicing and expense records.pick this instead when bookkeeping around invoices is more important than local-file portability.

What people are saying

  1. [github-trending] piratuks/invoice-builder

Sources

  1. Invoice Builder README
  2. Invoice Builder 2.5.5 release
  3. Multi-device database report
  4. Template language request

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →