Daftar
Open-source accounting for small businesses that stays on your computer. Daftar follows the
workflows people know from QuickBooks Desktop (invoices, bills, payments, bank reconciliation, the
standard reports) and runs in the browser or installs as an app, with no account, no server and no
internet needed.
Daftar (دفتر) is Arabic for "ledger".
Status: early. The accounting core is complete for a service business and heavily tested,
with UAE VAT; inventory, other countries' taxes, multiple currencies and payroll are not built yet
(see Roadmap).
Read the limits before trusting it with real books.
Why
QuickBooks Desktop has been moving to subscriptions: in September 2024 Intuit stopped selling Pro
Plus, Premier Plus and Mac Plus to new US customers. The main open-source desktop alternative,
Frappe Books, archived its desktop app in October 2026 in favour of a self-hosted web version.
Daftar is for people who want a desktop-style program they own, whose file stays on their own
computer, that works the way small-business bookkeepers already work.
What it does
- Sales: estimates, invoices, sales receipts, credit memos; receive payments and apply them to
several invoices; partial payments; overpayments kept as customer credit.
- Purchases: purchase orders, bills, vendor credits, pay bills, checks and expenses, transfers.
- Banking: reconcile bank and credit card accounts against a statement; undo the last
reconciliation; reconciliation report.
- Reports: profit and loss, balance sheet, statement of cash flows, trial balance, general
ledger, A/R and A/P aging, customer and vendor balances, open invoices, unpaid bills.
- Recurring transactions: memorize an invoice, bill or expense and run it weekly, monthly,
quarterly or yearly.
- Moving in: import QuickBooks lists from IIF, opening balances from CSV reports (trial
balance, open invoices, unpaid bills), and customer, vendor, item and account lists from CSV.
Transactions in IIF files made by other programs are imported too. Export to IIF.
- UAE VAT: register the company (TRN, emirate, address, effective date); standard-rated,
zero-rated, exempt, out-of-scope and reverse-charge lines; prices with or without VAT; printable
tax invoices (Executive Regulation Article 59) and tax credit notes that name the invoice they
correct and give the reason (Article 60); and the VAT 201 return box by box. VAT is worked out per
line and rounded to the nearest fils, as the FTA's clarification VATP006 describes. After filing,
one click closes the books through the end of the period, so nothing can change what was filed.
Assumptions: the date of supply is the document date; no discounts; standard-rated sales go under
the emirate currently set (the business's establishment); VAT on purchases is worked out per line,
so it can differ by a fils from a supplier's document that rounds on the total.
- Arabic and English, right-to-left and left-to-right, light and dark. Three-decimal currencies
(JOD, KWD, BHD, OMR) are first-class; Arabic digits are accepted in every amount.
- Every action is a named command (press Ctrl+K), so anything a person
can do, a script or an AI agent can do through the same door.
How correctness is enforced
People will run real businesses on this, so a wrong number is treated as worse than a missing
feature. The rules are written down in CLAUDE.md and checked by tests:
- Money is an integer count of the currency's smallest unit. Nothing is ever a float, and only two
things are rounded, half away from zero with BigInt: quantity × rate, and each line's VAT.
- Every journal entry balances or is refused. Posted entries are never edited or deleted; mistakes
are reversed or voided. Closed periods stay closed.
- Receivables and payables move only through documents, so receivables always equal the customer
balances and the open invoices minus unapplied credits, at every date.
- Every report is computed from the journal; nothing is stored that could drift.
- Golden books: a bakery in Jordanian dinars, a design studio in US dollars, and a QuickBooks
IIF file were computed by hand before their tests ran; every report must match them to the last
fils or cent.
- Property tests: random companies (120 companies × 60 operations for the receivables tie, up
to 300 for the journal) keep every identity: trial balance, balance sheet, cash flow, the
three-way receivables tie, reconciliation, IIF round trip.
- Adversarial review: after each milestone a separate agent tried to break the numbers. Every
confirmed finding was fixed; those in the accounting core each have a regression test
(
core/test/refuted*.test.ts), and interface fixes were checked in the browser.
- Integrity check:
core/integrity.ts verifies every assumption the core makes, including that
each document's entry is exactly what the document posts, line by line. A company file must pass
it to open, every command is checked against it before its change is kept, and every random test
asserts it.
138 tests run in about six seconds: npm test.
Try it
Requires Node 24.
npm install
npm run dev
Open the printed address and choose Try the sample company. For a production build that works
offline (Chrome and Edge can also install it from the address bar):
npm run build
npx vite preview app
To build the Windows installer (release/Daftar-Setup-<version>.exe) and check the packaged program:
npm run dist:win
node scripts/desktop-smoke.ts
The installer is not code-signed yet, so Windows SmartScreen warns before the first run.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗