The most advanced local-first invoicing app — invoices, estimates, credit notes, live PDF preview, multi-currency tax engine, reports. React 19 + Vite + shadcn/ui.
The most advanced local-first invoicing app.
Create beautiful invoices, get paid faster, and run your business — all in your browser, with zero backend and full data ownership.
Built with React 19 · Vite · TypeScript · shadcn/ui (base-ui) · Tailwind v4 · Dexie/IndexedDB
Faktura is a complete invoicing platform with zero feature gaps — everything runs client-side and your data never leaves your machine.
{YYYY}/{YY}/{MM} tokens, zero-padding, atomic sequences/share/:id pagej/k to move, Enter to open across invoice/client/estimate lists; g-chords to jump; ? for help{{placeholders}} and live previewd or toggle) with carefully tuned theme tokens| Concern | Choice |
|---|---|
| Framework | React 19 + Vite + TypeScript |
| UI | shadcn/ui (base-ui style base-nova) + Tailwind v4 |
| Icons | HugeIcons |
| Routing | React Router v7 (lazy routes) |
| Persistence | Dexie (IndexedDB), local-first |
| Forms | react-hook-form + zod |
@react-pdf/renderer (same component renders preview and download) |
|
| Charts | Recharts |
| Money | integer minor units + @dinero.js/currencies precision table |
| Export | JSON backup, SheetJS (xlsx), CSV; QR via qrcode |
| i18n | lightweight dictionary (English + Türkçe) |
| Tests | Vitest (92 unit tests over money, tax, recurring, document, email helpers) |
bun install
bun run dev # http://localhost:5173
On first run you get a clean workspace. Open Settings → Data → Load sample data to explore with realistic demo invoices, clients, and payments.
bun run dev # dev server
bun run build # typecheck + production build
bun run preview # preview the production build
bun run test # run the Vitest suite
bun run lint # eslint
bun run typecheck # tsc --noEmit
⌘K / / command palette · n new invoice · d dark mode · ? shortcuts help ·
g then d/i/e/c/p/m/r/s to jump · j/k move in lists, Enter to open.
src/
types/ Domain model (Invoice, Client, Product, Payment, TaxRate, TimeEntry, …)
lib/
domain/ money, calc (totals/tax), document, recurring, email — all unit-tested
format/ status, tax labels, bytes, relative dates
i18n/ English + Türkçe dictionaries
db/ Dexie database, repository layer, seed/bootstrap
pdf/ templates (modern/classic/minimal), statement PDF, QR, export/preview
export/ CSV / XLSX helpers
hooks/ Live Dexie queries, formatters, hotkeys, list navigation, timer
components/
ui/ shadcn/ui primitives (base-ui)
app/ Shared app components (sidebar, command menu, pickers, export menu, …)
pages/ dashboard, invoices (editor/list/detail), clients, products, time,
payments, expenses, reports, settings, estimates, credit-notes, share
app/router.tsx Lazy-loaded route tree
The calculation engine (lib/domain/calc.ts) is a pure module: given line items, tax rates and payments, it returns fully-reconciled DocumentTotals. The repository recomputes and persists totals on every save, so stored invoices never drift.
Everything lives in your browser’s IndexedDB. There is no server, no account, no telemetry. Back up your data anytime as a single JSON file, and restore it on any machine.