One Minute Invoice

How One Minute Invoice works

Everything on this site happens inside your browser: the form, the live preview, the PDF and the storage. This page explains the parts that make that possible, the open-source libraries and fonts they rely on, what the tool cannot do yet, and how to check for yourself with your browser's developer tools that no document data is uploaded.

The PDF engine

The PDF is produced by pdfmake 0.3, an open-source library (MIT licence) that turns a document definition into a PDF file using pdfkit underneath. It runs in a Web Worker, a background thread of your browser, so the editor stays responsive while a long invoice is laid out; the page and the worker talk to each other through comlink. The worker receives your document as data and returns a finished file. It never opens a network connection: the only files it loads are the fonts, from this site’s own origin.

The live preview and the PDF come from the same layout definition, which is why what you see in the preview is what you get in the file. The six layouts (Classic, Modern, Minimal, Compact, Ledger and Receipt) are each a function that takes your document and returns that definition. Multi-page tables repeat their header row, pages are numbered “Page x of y”, long descriptions wrap, and empty optional blocks collapse.

Amounts are calculated in integer minor units with big.js, so 3 × 19.99 is exactly 59.97 and tax is computed on the rounded subtotal, the way an accountant expects. Currency and date formatting use your browser’s built-in Intl functions with the locale from the country preset.

Fonts

Text is set in Inter (regular, bold and italic) with a subset of Noto Sans that carries currency signs and common symbols: $, €, £, ¥, ₹, ₩, ₽, ₺, ₪, ₦, ₱, ₫ and the rest. Both are published under the SIL Open Font License 1.1. They are self-hosted as TTF files on this domain and loaded once into the PDF engine, so no request goes to a font service and the glyphs in the PDF are the same on every computer that opens it. The fonts are subset at build time to keep a one-page invoice small.

Storage

Your documents are saved in IndexedDB, a database built into your browser and scoped to this site. It holds your business profile, clients, documents with their status, saved templates, settings, number counters and logos (as image blobs). Autosave runs on every change, so there is no save button and nothing to lose if you close the tab.

There is no cloud copy. Export data writes everything to a single JSON file you can keep anywhere; Import data reads one back and merges it by id, asking before it overwrites. That file is your backup and your way to move between computers. Settings → “Delete all my data” empties the database in one step, and clearing site data in your browser has the same effect.

The site is also installable as a progressive web app. The app shell, editor and fonts are cached on first visit, so pages you have opened and the PDF engine keep working without a connection.

How to verify nothing is uploaded

You do not have to take this on trust. Open your browser’s developer tools (F12 in most browsers, or Cmd+Option+I on a Mac), choose the Network tab, then make an invoice and press Download PDF. Every request in the list is a GET for a page, script, style or font from this domain, or, if you have accepted them, an ad or analytics beacon that carries no form content. No request carries your business name, your client, your line items or the PDF. The same check is part of the automated test suite: a browser records every request during a full edit-and-download run and fails the build if any request has a body or leaves the origin.

Licences

LibraryLicence
pdfmake 0.3.11 (bundles pdfkit)MIT
Inter and Noto Sans (subset), self-hosted TTFSIL Open Font License 1.1
idb-keyvalMIT
big.jsMIT
Workbox (via @vite-pwa/astro)MIT
comlinkApache-2.0

The full licence texts ship in the licenses/ folder of the source and apply to the software only; the invoices you create are yours.

What it cannot do yet

Right-to-left scripts such as Arabic and Hebrew are not supported in version 1: the layout engine sets text left to right, so a right-to-left invoice would come out wrong. Labels are in English only. Both are on the roadmap, along with other languages.

Every PDF carries a small line reading “Created with One Minute Invoice” in the footer. It is on by default and can be turned off with the toggle in the footer settings; the file is otherwise identical. The default exists to make casual misuse a little harder, and a business sending real invoices is welcome to switch it off.

Trademarks

All product names and trademarks are the property of their respective owners. One Minute Invoice is not affiliated with or endorsed by any of them.

Last updated 2026-09-27.