FreeLedger

Free desktop bookkeeping for freelancers and small business.

Download for Windows — 0.3.0

51.5 MB · published October 7, 2026

SHA-256 5c6dae6c1c210d64f92e45d3877d82e5c706b99febfa74f8283ab06b12f658ce

Before you install

Releases

0.3.0

October 7, 2026 · 51.5 MB

# Changelog

## 0.3.0 — 2026-08-16

The screens people use every day stopped being lists of everything. Filters, search and totals
on the transaction and invoice lists; CSV export of whatever is on screen; categories you can
add; partial payments; and a dashboard that answers "who owes me money" rather than repeating
what was just typed in.

### Added
- **Filters, search and sorting on the transaction list** — text search across description,
  category and amount (typed however a bank statement shows it), a date range with the presets
  people actually ask for, income/expense, category, and five sort orders. The totals underneath
  are of the rows on screen, not of the whole book.
- **Filters and search on the invoice list**, by status — including the new *Part paid* — and by
  number, client or note, with the invoiced and outstanding totals following the filter.
- **CSV export**, which the download page has promised since the first release and which did not
  exist: transactions and invoices as filtered, and the profit-and-loss report. UTF-8 with a
  byte-order mark and plain numeric amounts, so the file opens in Excel and adds up.
- **A Categories screen.** Add, rename and delete categories, and choose the Schedule C line each
  expense is reported on. The starter set was previously the only set there would ever be.
- **Partial payments.** Record what actually arrived against an invoice; the balance stays
  outstanding, the income is in the books the day it lands, and settling the rest closes the
  invoice. Paying more than is owed records only what was owed.
- **Duplicate an invoice**, and mark one as repeating monthly, quarterly or yearly — the copy
  then comes with the dates already moved on. Nothing is issued behind the user's back.
- **A dashboard worth opening**: money owed, how much of it is overdue and by whom, what is due
  this week, the year to date, the biggest expense categories, the transactions still missing a
  category, and the next quarterly tax deadline — each with the button that acts on it.

### Fixed
- **Everything was in the machine's currency, not dollars.** The currency was a per-company
  setting whose default came from the operating system's region, so a first run on a machine set
  to another country wrote that currency into the profile and printed roubles on every invoice,
  report and Schedule C worksheet — in a product whose reports are IRS forms. There is now no
  currency setting at all, the column is dropped, and existing profiles are migrated.
- **Date fields drew on top of their neighbours.** Avalonia's `DatePicker` lays three fixed-width
  spin fields side by side and does not clip them, so in a form column it printed the due date
  over the issue date and the transaction date over the description. Dates are now one field
  that can be typed into as well as picked, with the product's own calendar icon rather than a
  Segoe MDL2 glyph that rendered as a bare "16" on a machine without that font.
- **The invoice form ran off the bottom of a small window**, drawing the table over the editor:
  the transaction and invoice pages now scroll as a page.
- **A part payment could mark an invoice paid in full**, because the payment being recorded was
  counted twice — EF attaches the new row to the invoice before the arithmetic runs.
- A sentence explaining the sales-tax rate printed straight through the tax amount beside it.

## 0.2.0 — 2026-08-15

United States release. Everything user-facing now formats as American regardless of the
machine's regional settings, the invoice lifecycle works end to end, and the app can say why
when something fails.

### Added
- **Taxes page** — Schedule C worksheet with each expense total on its numbered line, quarterly
  estimated tax (Form 1040-ES) with the four statutory deadlines, and sales tax collected grouped
  by state. Schedule C exports to PDF.
- **Clients page** — a real list with add, edit and delete, replacing a placeholder card.
  Deleting is refused while a client still has invoices.
- **US addresses** — street, city, state and ZIP as separate fields, with a state picker and ZIP
  validation. Existing free-text addresses are carried into the street line, not discarded.
- **EIN / SSN** — the tax number is labelled and checked for the kind it is, and printed on
  invoices as "EIN 12-3456789".
- **Sales tax on invoices** — charged as a rate, suggested from the client's state, always
  overrulable. The rate and state are stored on the invoice so the report can reconstruct them.
- **Send an invoice** — as a PDF export, or by email through your own mail server. The mail
  password is encrypted with your Windows account.
- **Mark as sent** — the step that starts the clock on an invoice.
- **Diagnostic log** at `%LocalAppData%\FreeLedger\Logs\freeledger.log`, including Avalonia's own
  binding failures, plus a handler for exceptions that previously vanished.

### Fixed
- **Uninstalling silently deleted your books.** The prompt was written to default to keeping
  them, but `MB_DEFBUTTON2` only chooses which button has focus in a dialog you can see — a
  suppressed prompt is answered yes. Any `/SILENT` uninstall wiped `%LocalAppData%\FreeLedger`.
  An unattended uninstall now deletes nothing, because nobody was asked.
- **Updates could never have installed.** The updater ran from inside the folder the installer
  replaces, so it held open a file the installer needed and Inno aborted. It is now copied out
  first.
- **The window did not fit on ordinary laptops.** Its minimum size was larger than the desktop a
  1366x768 screen at 125% scaling offers, so the bottom of the window — save buttons included —
  sat below the taskbar with no way to shrink it.
- **Tables dropped a column instead of scrolling.** On a small window the client name collapsed
  to nothing and the row actions were cut off, silently. Wide tables now scroll sideways.
- **Bank CSV imports could swap the day and month.** The date format list tried `dd/MM/yyyy`
  before `MM/dd/yyyy`, so an ambiguous date in a US bank export was read as the wrong day —
  silently, and with no way to tell afterwards. American formats are now tried first.
- **`Overdue` could never appear.** Nothing ever set an invoice to Sent, so the status the
  product advertises was unreachable in the running application.
- **Invoice PDF export was unreachable.** The renderer was written and tested from the first
  version; no button ever called it.
- **Everything formatted against the machine's locale.** Dates, amounts and currency followed the
  operating system, so the same books read `750,00 $` and `1 июл. 2026` outside the US. Three
  different date layouts were in use for the same value, and the exported PDF disagreed with the
  screen it was printed from.
- **PDFs asked for a Windows-only font.** Calibri was named explicitly, so exports rendered
  differently anywhere else.
- **Failed actions did nothing visible.** Exports, saves and deletes that threw were swallowed
  whole; they now say what went wrong and write it to the log.
- **A binding error on every launch** — the onboarding view reached for the window's data context
  before there was one.

### Changed
- **The installer is branded and three pages long.** A welcome page carrying the product's own
  artwork at every display scaling, which states where the app will be installed, how much room
  it needs and that no administrator rights are involved; a progress page whose status line
  names what is being installed; a finish page. The "ready to install" page is gone — it
  repeated the welcome page — and the location page appears only when it is asked for. A second
  copy of Setup now refuses to run while one is already installing.
- **One publisher name everywhere.** Assembly metadata, the installer's publisher line, the
  Programs and Features entry and the site all say *FreeLedger Team*. The registry namespace
  stays `HKCU\Software\FreeLedger\FreeLedger`, so existing installations are still found.
- **The licence texts actually ship.** `licenses\` used to hold a list that pointed at files
  that were not there; it now contains the MIT, Apache-2.0, QuestPDF and font licence texts it
  names. The internal QA checklist no longer ships — it was written for whoever works on the
  product, not for whoever uses it.
- The installed folder is now a proper tree — `app\`, `config\`, `resources\`, `samples\`,
  `updater\`, `licenses\` — instead of a single 120 MB executable and a stray font directory.
- Starter categories map onto Schedule C lines. Existing installations are upgraded in place by
  name; categories you renamed or invented are left alone.

## 0.1.0

First release.