DEV Community

Cover image for Open-Finance: Local-first, privacy-focused personal finance application.
albilu
albilu

Posted on

Open-Finance: Local-first, privacy-focused personal finance application.

Building (and Using) a Local-First Personal Finance App with Java 21, Spring Boot, and React

Most personal finance tools force you to choose between "modern but SaaS" (your data on their servers) and "private but dated" (GnuCash-style UIs). This article walks through Open-Finance, an open-source alternative that gives you both: a polished web interface and complete data sovereignty.

Why Local-First Matters

Financial data is uniquely sensitive. Every cloud finance app is a potential target — and even "anonymous" usage data reveals your net worth, spending habits, and investment strategy. Open-Finance stores everything in a local SQLite database (WAL mode, encrypted), runs entirely on your machine, and never phones home.

Architecture Overview

React 19 UI → REST API → Spring Boot Services → JPA → SQLite (encryption at rest)
                              ↓
                    External Integrations
                    (Yahoo Finance, ECB, Ollama)
Enter fullscreen mode Exit fullscreen mode
  • Backend: Java 21, Spring Boot 3.2, Hibernate/JPA, Flyway migrations, SQLite via Xerial JDBC
  • Frontend: React 19 + TypeScript 5, Vite, Tailwind 4, shadcn/ui, Radix UI
  • State: TanStack Query (server), Zustand (client), react-hook-form + zod
  • AI: Local Ollama integration — no API keys, no data leakage
  • Market Data: Yahoo Finance wrapper with caching and rate limiting
  • Exchange Rates: Daily ECB rate fetch

Key Features

1. Import Pipeline

Support for QIF, OFX, QFX, CSV, JSON, and even Skrooge exports. The import engine includes duplicate detection, per-file account mapping, and an interactive preview so you can see what lands before committing.

2. Multi-Currency

Transactions support any currency with automatic ECB rate conversion. The dashboard shows consolidated net worth in your base currency with historical trends.

3. Local AI Assistant

Connected to Ollama, the AI analyzes your actual portfolio and spending patterns — no context window limitations from cloud APIs, and zero data exposure. It can simulate scenarios ("what if I increase my monthly investment by 20%?") against real data.

4. Rich Financial Instruments

Track stocks, crypto, real estate, vehicles, and liabilities with amortization schedules. Market prices auto-update for tradable assets.

Quick Start

git clone https://github.com/openfinance-app/open-finance.git
cd open-finance
cp .env.example .env
# Edit JWT_SECRET in .env (or generate with openssl rand -base64 48)
docker compose up -d
# Open http://localhost:8080 — demo/demo123
Enter fullscreen mode Exit fullscreen mode

Development Setup

The repo includes a DevContainer with Java 21, Maven, Node.js, and SQLite pre-configured. Open it in VS Code with the Dev Containers extension and you're ready to contribute.

mvn spring-boot:run   # Backend on :8080
npm run dev            # Frontend on :5173
Enter fullscreen mode Exit fullscreen mode

Comparison to Alternatives

Feature Open-Finance GnuCash Finary Wealthfolio
Modern UI ⚠️
Local-first
AI Assistant
QIF/OFX Import ⚠️
Encrypted ⚠️
Multi-currency
FOSS

Try It

The project is on GitHub at github.com/openfinance-app/open-finance under Elastic License v2 — free to self-host and modify.

If you're interested in the architecture, I've written about specific components:


Have questions? Drop them in the comments or open a GitHub issue.

Top comments (0)