ezBookkeeping is a self-hosted personal finance application designed for users who want full control over their financial data without relying on cloud-based services. Built with Go and Vue.js, it offers a clean, responsive interface that works seamlessly across desktop and mobile devices. The app is optimized for low-resource environments like Raspberry Pi while scaling to NAS systems and servers, making it ideal for privacy-conscious individuals and homelab enthusiasts. With Docker-based deployment and support for multiple databases, ezBookkeeping eliminates vendor lock-in and provides a robust alternative to proprietary finance apps.
Its comprehensive feature set includes AI-powered receipt image recognition, multi-currency and multilingual support, recurring transactions, and advanced data import/export capabilities. By combining simplicity in setup with powerful bookkeeping tools, ezBookkeeping appeals to users seeking an open-source, privacy-first solution for managing personal finances without sacrificing functionality.
What You Get
- Open Source & Self-Hosted - Full control over your financial data with no third-party cloud dependency; source code is MIT-licensed and publicly available.
- Docker & Binary Deployment - Easy installation via single Docker command or pre-built binaries for Linux, macOS, and Windows; supports x86, amd64, and ARM architectures.
- Multi-Database Support - Choose between SQLite (default), MySQL, or PostgreSQL for data storage with no vendor lock-in.
- Mobile PWA Support - Install as a native-like app on iOS and Android via Progressive Web App (PWA) functionality with home screen integration.
- AI-Powered Receipt Recognition - Upload receipt images to auto-extract transaction details using integrated Model Context Protocol (MCP) support.
- Advanced Bookkeeping Features - Two-level account and category structure, transaction image attachments, location tracking with maps, recurring transactions, and real-time visual analytics.
- Multi-Language & Multi-Currency - Automatic exchange rate updates, support for 15+ languages, and customizable date/number/currency formats.
- Data Import/Export - Import transactions from CSV, OFX, QFX, QIF, IIF, Camt.053, MT940, GnuCash, Firefly III, Beancount, and export for backup or analysis.
- Security Features - Two-factor authentication (2FA), login rate limiting, and application lock via PIN code or WebAuthn for added device-level protection.
Common Use Cases
- Building a private personal finance dashboard - Users who want to track daily expenses, income, and savings without sending data to external services like Mint or YNAB.
- Managing household finances across multiple currencies - Families or digital nomads tracking expenses in EUR, USD, and JPY with automatic exchange rate updates.
- Privacy-focused individuals replacing cloud finance apps - Users migrating from proprietary tools to avoid data harvesting, using ezBookkeeping’s self-hosted model for complete data ownership.
- DevOps teams deploying on homelab infrastructure - Individuals running ezBookkeeping on Raspberry Pi or NAS devices using Docker to maintain a low-resource, always-available finance manager.
- Problem → Solution flow: Manual receipt tracking → AI-powered automation - Users manually logging expenses from paper receipts switch to uploading images, where ezBookkeeping auto-extracts merchant, amount, and date.
- Team/workflow scenario: Non-technical users needing a simple yet powerful tool - Spouses or roommates sharing financial oversight through a single, intuitive interface with mobile access and no learning curve.
Under The Hood
ezBookkeeping is a self-hosted personal finance application designed to provide cross-platform functionality through a unified backend and modular frontend architecture. It supports both desktop and mobile interfaces with shared components and platform-specific enhancements, emphasizing flexibility in deployment and data handling.
Architecture
This project follows a monolithic structure with clear separation between frontend and backend, organized into layers to support scalability and maintainability.
- The architecture uses a layered approach with distinct concerns for UI, logic, and data handling
- Component-based UI composition enables reuse across desktop and mobile platforms
- Dependency injection and modular configuration support flexible service integration
Tech Stack
The project leverages a modern web stack combining Go for backend logic and Vue.js with TypeScript for the frontend.
- The backend is built in Go, while the frontend uses Vue 3, TypeScript, and Vite for development
- Extensive use of Vue ecosystem tools including Pinia, Vue Router, and Vuetify for UI components
- Docker support and PWA capabilities enable flexible deployment and cross-platform experiences
Code Quality
The codebase shows a balanced mix of structured components and inconsistent patterns, reflecting efforts toward modularity with some technical debt.
- Testing is present but not uniformly applied across modules, with limited end-to-end coverage
- Error handling is well-implemented through try/catch and custom error structures in key areas
- Naming conventions and component organization are consistent, though structural inconsistencies appear
- Base component patterns suggest potential for refactoring to reduce duplication and improve abstraction
What Makes It Unique
This project introduces several innovative approaches to financial data management and cross-platform UI design.
- A sophisticated base component system allows shared logic between desktop and mobile interfaces, reducing redundancy
- Flexible date and time handling supports multiple fiscal years and timezone-aware operations for global financial reporting
- Strongly typed financial entities and statistics aggregation enable extensible charting and analytics without tight coupling
- Comprehensive self-hosted deployment support through Docker and systemd offers developer-friendly flexibility not commonly found in personal finance tools