tenra Ledger is a local-first bookkeeping product. The current product direction is desktop-first so the accounting engine, book storage model, and data ownership boundaries can mature before web, sync, or collaboration surfaces are introduced.
The project emphasizes explicit user actions, self-contained books, and correct double-entry accounting over hidden automation.
- Maintain local books with user-owned storage.
- Support double-entry accounting, posted transactions, reversals, and corrections.
- Keep each book self-contained for backup, restore, and portability.
- Provide reports and exports through explicit operator actions.
- No mandatory cloud account or online auth.
- One SQLite database per book.
- Immutable posted transactions by correction rather than silent mutation.
- Desktop app as the active v1 surface.
- Web and mobile shells remain inactive placeholders until local accounting behavior is stable.
apps/
desktopapp/ Active Tauri + React bookkeeping app
webapp/ Placeholder shell
mobileapp/ Placeholder Expo shell
packages/
domain/ Bookkeeping models, invariants, reports, and boundaries
api-contracts/ Frontend/backend DTO contracts
validation/ Runtime schemas
config/ App constants and storage helpers
privacy/ Future export/privacy hooks
ui/ Shared React primitives
shared-types/ Shared primitive types
- The desktop app is the active product surface.
- Books are stored as
.ledgerfolders containing SQLite and metadata. - Demo book creation supports first-run UI verification.
- Backup is modeled as a zip of the whole book folder.
- Web and mobile apps are intentionally inactive.
Ledger is a local desktop product. It is not currently a hosted accounting service. Any future sync or collaboration feature should be designed around the existing self-contained book model and explicit user ownership.
pnpm run bootstrap
pnpm run dev:desktop
pnpm run verify:desktop
pnpm run verify:all
pnpm run doctorDefault book roots follow platform app-data conventions and are documented in the developer guide.
- Continue hardening accounting invariants and storage boundaries.
- Improve reports, export workflows, and backup/restore checks.
- Keep hidden automation out of core bookkeeping actions.
- Treat sync as a later design problem, not an assumed foundation.