Actual is a local-first personal finance application designed for users who want full ownership and control over their financial data. It’s ideal for individuals tired of cloud-based budgeting tools that lock data behind paywalls or obscure algorithms, offering a transparent, privacy-respecting alternative built on proven envelope budgeting principles. The app works offline by default, syncs changes across devices via a self-hostable server, and supports advanced features like bank syncing and custom reports without requiring subscriptions.
Built with Node.js and TypeScript, Actual’s architecture separates core logic (loot-core) from UI clients (desktop-electron), enabling cross-platform deployment. Users can install it via downloadable apps for Windows, Mac, and Linux, or deploy it using Docker, Fly.io, or PikaPods. The ecosystem includes a public API, community-driven documentation, and integrations with goCardless and SimpleFIN for automated bank feeds.
What You Get
- Envelope Budgeting - A cash-based budgeting system where you allocate only money you currently have, preventing overspending and forcing realistic financial planning.
- Local-First Architecture - All data is stored locally on your device by default; sync happens in the background without requiring cloud dependency.
- End-to-End Encryption - Optional encryption ensures your financial data remains private and unreadable even if synced through a third-party server.
- Multi-Device Sync - Seamlessly sync budgets, transactions, and accounts across phones, tablets, and computers using a self-hosted or managed sync server.
- Bank Sync via goCardless & SimpleFIN - Automatically import transactions from EU/UK banks (goCardless) and US/Canada banks (SimpleFIN) without manual CSV uploads.
- Custom Report Engine - Build personalized financial reports using a flexible query system to visualize net worth, cash flow, or custom spending categories.
Common Use Cases
- Running a privacy-focused household budget - A family uses Actual to track expenses without sharing data with corporations, relying on local storage and optional encryption to keep finances secure.
- Migrating from YNAB or nYNAB - A long-time YNAB user imports their 5+ years of transaction history into Actual using the built-in importer to retain historical data without vendor lock-in.
- Managing finances across multiple devices - A digital nomad syncs their budget between a Windows laptop, iPad, and Android phone using a self-hosted Actual server while traveling with intermittent internet.
- Building custom financial dashboards - A developer uses Actual’s API to create automated reports that pull data from their budget to track monthly savings rates and send alerts via email.
Under The Hood
Architecture
- Monorepo structure with clear package boundaries separating core logic, sync server, and frontend UI, enforced through dependency injection and explicit exports
- React component patterns like WithInput and CustomStyle promote UI reuse across modules while maintaining consistent behavior
- Backend and frontend are decoupled via a well-defined API layer with encrypted data exchange and timestamp-based synchronization
- Plugin system and Electron integration enable desktop functionality while sharing the same core business logic through a unified library
- Consistent module resolution and import ordering are enforced across packages using custom tooling to preserve architectural boundaries
Tech Stack
- TypeScript-based monorepo with Vite for frontend bundling and LAGE for multi-package build orchestration
- React frontend enhanced with i18n, Emotion styling, and TanStack Query for state management, all strictly typed and linted
- Node.js backend with Dockerized development and unified code quality tooling across client and server
- Playwright and Vitest provide comprehensive testing coverage for both web and desktop environments through integrated pipelines
- Custom ESLint and formatting rules enforce project-specific conventions for imports, naming, and internationalization
Code Quality
- Extensive test coverage spanning unit, integration, and end-to-end scenarios with snapshot and data validation tests
- Robust type safety ensures data integrity across API layers, database models, and UI components
- Clear separation of concerns between data access, business logic, and presentation layers improves maintainability
- Custom validation utilities fail fast with descriptive errors, preventing malformed inputs from propagating
- Consistent naming, test structure, and automated invariants (CSS, schema) enhance predictability and reduce bugs
What Makes It Unique
- Spreadsheet-based budget engine that treats financial data as live, reactive cells enabling real-time recalculations
- Dynamic carryover system that visually tracks overspending and underspending to create a self-correcting budgeting loop
- Probabilistic bank reconciliation engine that minimizes manual entry while preserving data accuracy
- Unified rendering layer that blends spreadsheets, graphs, and interactive controls into a single cohesive financial model
- Privacy-aware data handling that filters sensitive transactions without compromising underlying calculations