I built Ledvo from a frustration I have carried for a long time:
A lot of accounting software talks about dashboards before it proves that the ledger is correct.
That ordering bothers me.
Before I became a software engineer, I worked in accounting. I closed books, reconciled balances, investigated differences, and dealt with the kind of boring details that become very expensive when software gets them wrong.
So Ledvo starts from a different premise:
The ledger is the product.
Why local-first
Not every accounting tool needs to begin as a cloud SaaS product.
Some people need a simple book. Some people want to learn. Some accountants want to test flows. Some builders need a transparent accounting engine for prototypes. Some users do not want to create another account just to record a transaction.
Ledvo is for that space.
The current product runs in the browser and stores the book locally in that browser profile’s private filesystem. There is no Ledvo account, no hosted ledger database, no analytics tracking, and no paid tier.
That choice creates tradeoffs. A local-first tool must be honest about backups, browser storage, and device loss. That is why export and import matter from the beginning.
The part that matters: double-entry rules
The important work is not the form.
The important work is what the form refuses to do.
Ledvo rejects unbalanced entries. It blocks postings into soft-closed, closed, and locked periods. It keeps posted entries immutable through voids and reversals instead of direct edits. It exposes an audit trail. It keeps reports derivable from ledger state.
Those are not nice-to-have details. They are the difference between an accounting system and a transaction-shaped note app.
Why I paired SolidJS with Heft
The user interface is SolidJS because the app is small, reactive, and browser-native.
The accounting engine is Heft, compiled to WebAssembly and hosted inside the browser. It loads when the user creates, imports, or opens a local book; OPFS stores the ledger file, not the engine. Heft is AGPL-3.0-or-later. The Ledvo app repository remains private while the product is pre-release.
That boundary matters:
- the browser UI can stay simple and local-first
- the engine can stay focused on accounting correctness
- improvements to the engine stay available under a copyleft license
What ships now
The current build includes:
- setup for one local book
- starter chart of accounts generation
- accounts, periods, counterparties, and subledgers
- multi-line journal entries
- period close and reopen flows
- trial balance, income statement, balance sheet, general ledger, aging, and equity-change views
- JSON export and import
- persistent storage prompts for browsers that support them
It is still intentionally small. It is not payroll. It is not tax filing. It is not bank feeds. It is not a SOX-attested hosted system.
The product is useful because it is narrow.
Why the claims stay small
Accounting products should not bluff.
Ledvo does not claim to give accounting advice. It does not claim that a local browser book is the right recordkeeping system for every business. It does not pretend browser storage is the same as a professionally managed backup policy.
It says what it is:
A free local-first accounting book that runs in your browser.
That is enough for the current stage.
Current status
Ledvo is live at www.ledvo.app. The apex domain redirects there, and the Vercel fallback is ledvo.vercel.app.
The product page is at /ledvo/, with support and privacy pages linked there.
If you care about accounting correctness, local-first software, or products that keep their claims constrained, say hello.
Disclaimer: Ledvo is software, not accounting, tax, legal, audit, or financial advice.