hledger is a cross-platform plain text accounting application that provides three user interfaces: a command-line tool (hledger), a terminal UI (hledger-ui), and a web UI (hledger-web). It implements double-entry bookkeeping with support for multiple currencies, investment lot tracking, budgeting, forecasting, and CSV import. Users maintain their financial data in human-readable journal files, and hledger generates reports such as balance sheets, income statements, cash flow, and transaction registers. The project is structured as a Haskell monolith with four packages: hledger-lib (core library for parsing, data models, reporting, and output), hledger (CLI with 30+ commands), hledger-ui (terminal interface using brick/vty), and hledger-web (web interface using Yesod). The core library handles reading multiple input formats (journal, CSV, timedot, timeclock), applying queries and filters, and writing reports in text, CSV, JSON, HTML, and ODS formats. The CSV import system uses a declarative rules engine for mapping external data to journal entries. The codebase demonstrates high craftsmanship with clean abstractions, extensive test coverage (unit tests, shell tests, browser-based Playwright tests), and active maintenance with CI/CD across Linux, macOS, and Windows. It has comprehensive documentation, internationalization support, and a well-defined contribution process. While the project has some technical drift (vendored old web dependencies, multiple build systems), it remains a robust and well-engineered application with several reusable components that could be extracted for other projects.
Frappe Books is a full-featured, offline-first desktop accounting and inventory management application built with Electron, Vue 3, and a custom ORM framework (fyo) on top of SQLite. It supports double-entry bookkeeping, invoicing (Sales/Purchase/Returns), payment processing, stock management (batches, serial numbers, FIFO valuation), Point of Sale (classic and modern layouts), financial reports (Balance Sheet, P&L, Trial Balance, General Ledger, GST reports), loyalty programs, pricing rules, coupon codes, and multi-currency. The architecture is schema-driven: JSON schema files define document structures, and model classes add business logic via formulas, validations, and lifecycle hooks. The backend runs in the Electron main process and exposes IPC APIs for file operations, database access, and auto-updates. The frontend is a reactive Vue 3 SPA with a comprehensive component library. Regional support (India, Switzerland) is implemented through model overrides and schema extensions. The codebase demonstrates strong engineering practices with a layered architecture, but the custom framework introduces some coupling. It is actively maintained with CI/CD, automated tests, and regular patches.
KMyMoney is a mature, open-source personal finance manager for the KDE desktop environment. It provides double-entry accounting with support for multiple accounts, currencies, investments, loans, budgets, and scheduled transactions. The application features a plugin architecture for import/export (QIF, CSV, OFX, GnuCash, iCalendar), online banking (AqBanking, OFX Direct Connect, Woob), and storage backends (XML, SQLite with encryption). The core domain model includes MyMoneyTransaction, MyMoneySplit, MyMoneyAccount, and related entities, all built on Qt's model/view framework. The codebase is large (over 3600 files) and has been under active development for over two decades, resulting in a rich feature set but also some legacy patterns and conditional compilation for Qt5/Qt6 compatibility. The architecture is a monolithic desktop application with a well-defined plugin system, extensive unit tests for core data objects, and a sophisticated reporting engine with pivot tables and charts.