Invoice maker
Type your line items, get a clean PDF invoice. No watermark, no account, and no logo of ours on your bill.
Most free invoice generators put their brand on your invoice and charge you to take it off, or make you register so they can email you for the next three years. This one does neither. It also does the money arithmetic in whole cents rather than in decimals, so the line items always add up to the total — an invoice that is out by a penny is an invoice your client queries. Your details, your client's details and your bank details stay on your device.
| Description | Qty | Unit price | Tax % | Amount | Remove |
|---|
Questions people ask
Is there a watermark, or a logo that isn't mine?
No. The PDF contains your details, your client's details and your line items, and nothing else. Free invoice generators that stamp their own brand on your invoice do it to sell you the removal; there is nothing here to remove and nothing to pay.
Is my invoice uploaded anywhere?
No. The form, the totals and the PDF are all built in your browser, and the uploads counter in the top bar stays at 0. That matters more than usual here — an invoice carries your client's name, your day rate and often your bank account.
Is this a valid VAT or GST invoice?
It has the parts most tax authorities ask for: both parties' names and addresses, your tax registration number, an invoice number, an issue date, the amount for each rate of tax and the tax charged at each rate. What it cannot do is know your country's rules — reverse charge wording, sequential numbering requirements, retention periods. Check the requirements where you file, or ask your accountant.
Why do the line items always add up to the total?
Because the arithmetic is done in whole cents as integers, not in decimals. Computers cannot store 0.1 exactly, so adding decimal prices drifts by fractions of a cent and an invoice ends up a penny out. Here each line is rounded once — quantity times unit price, to the nearest cent, half away from zero — and after that everything is integer addition. Tax is worked out once per rate on that rate's discounted total, using the same rounding. Subtotal minus discount plus tax equals the total, exactly, every time.
What happens to my data when I refresh, and what does the share link expose?
The invoice is saved in your browser's local storage, so a refresh does not cost you twenty line items, and it never leaves your machine. The share link is different on purpose: it packs the invoice into the URL fragment, which is never sent to a server, but anyone holding that link can read everything in it. Treat it like the invoice itself.
How this works & why it’s private
The form is plain HTML — the date fields are the browser's own <input type="date">, and the money and dates are formatted by Intl.NumberFormat and Intl.DateTimeFormat, which every browser already ships. No framework, no date picker, no currency library.
Every amount is held as an integer number of minor units — cents, pence, paise, or whole yen for currencies that have no subunit, which Intl tells us. Decimal input is parsed digit by digit rather than with parseFloat, so 0.07 becomes the integer 7 and three of them are 21, not 20.999999999999996. A discount is allocated across the lines by the largest-remainder method, which means the individual allocations sum to exactly the discount rather than approximately.
The PDF is built by pdf-lib, which runs in the page. It lays the table out itself and starts a new page when the rows run past the bottom margin, so a fifty-line invoice paginates instead of vanishing off page one. In the PDF, amounts are written with the three-letter currency code rather than the symbol, because the standard PDF fonts have no glyph for the rupee, and a missing glyph on an invoice is worse than the letters INR.
Nothing is transmitted at any stage. Your draft sits in this browser's local storage and the logo you pick is read with FileReader from your own disk. If you would rather not trust the description, open your dev-tools Network tab and watch while you fill the form in.