Firefly III vs Beancount: Which Finance App?
Quick Verdict
Firefly III is the better choice for most people — it has a web UI for data entry, automation rules, bank importing, and reports that work out of the box. Beancount with Fava is for users who specifically want plain-text accounting with version-controlled financial data and are comfortable editing text files.
Updated March 2026: Verified with latest Docker images and configurations.
Overview
Firefly III is a full-featured web application for personal finance tracking. Built with PHP/Laravel, it runs as a Docker service with a PostgreSQL database. You enter transactions through a web form, set up automation rules, import bank statements, and view reports — all through the browser.
Beancount is a plain-text double-entry accounting tool. Your financial data lives in .beancount text files that you edit directly. Fava adds a web interface for viewing reports, balance sheets, and charts — but data entry still happens in the text file. Think of it as “git for your finances.”
Feature Comparison
| Feature | Firefly III | Beancount/Fava |
|---|---|---|
| Data entry | Web UI forms | Text file editing |
| Data storage | PostgreSQL database | Plain text files |
| Automation rules | Yes (auto-categorize, tag) | No (scripting possible) |
| Bank import | CSV, OFX, GoCardless (EU) | CSV via bean-import |
| Budgets | Category-based budgets | Budget plugins available |
| Reports | Built-in (charts, graphs) | Fava web UI (interactive) |
| API | Full REST API | No API (text files) |
| Multi-currency | Manual conversion rules | Native with price tracking |
| Version control | Database backups | Git-native (text files) |
| Mobile app | Third-party apps available | Fava responsive web only |
| Recurring transactions | Yes (auto-create) | Manual entry |
| Docker image | fireflyiii/core | yegle/fava |
| Min RAM | ~300 MB | ~50 MB |
Data Model
The fundamental difference is how your financial data exists:
Firefly III: Data lives in a PostgreSQL database. You interact through the web UI or API. Exporting requires database dumps or CSV export. The database is the single source of truth.
Beancount: Data lives in a .beancount text file. You can open it in any text editor, diff it with git diff, review changes in pull requests, and restore any historical state with git checkout. The text file is the single source of truth. Fava is read-only — it visualizes the text file but doesn’t modify it.
This means:
- Beancount users can use grep, sed, and scripts to analyze or modify data
- Firefly III users get a GUI and automation but need the database running to access data
- Beancount files can never be corrupted by a software bug — they’re just text
- Firefly III can corrupt data if a migration fails or a bug hits the database
Installation Complexity
Firefly III requires 3 containers (app, cron, PostgreSQL), environment variables for database connection and encryption, and initial database migration:
# Simplified — see full guide for complete config
services:
firefly:
image: fireflyiii/core:version-6.5.4
cron:
image: fireflyiii/core:version-6.5.4
command: ["sh", "-c", "sleep 30 && php artisan schedule:run"]
postgres:
image: postgres:16-alpine
Beancount/Fava requires 1 container and a text file:
services:
fava:
image: yegle/fava:v1.30
volumes:
- ./beancount:/bean
environment:
BEANCOUNT_FILE: /bean/main.beancount
Fava wins on setup simplicity.
Performance and Resources
| Resource | Firefly III | Beancount/Fava |
|---|---|---|
| RAM (idle) | ~300 MB | ~50-100 MB |
| CPU | Low-moderate | Very low |
| Disk | Database grows with transactions | Text file (kilobytes) |
| Startup time | 10-30 seconds | 1-2 seconds |
Beancount/Fava is dramatically lighter. A decade of personal finances fits in a few megabytes of text. Firefly III’s database will consume tens of megabytes or more for the same data.
Use Cases
Choose Firefly III If…
- You want to enter transactions through a web form, not a text editor
- You need automation rules (auto-categorize groceries, tag recurring expenses)
- You import bank statements regularly (CSV, OFX, GoCardless)
- You want recurring transaction auto-creation
- You prefer a traditional web app experience
- You need API access for integrations or third-party mobile apps
Choose Beancount/Fava If…
- You want your financial data in version-controlled text files
- You’re comfortable with a text editor for data entry
- You value data portability over convenience (no database dependency)
- You want to use git workflows (branching, diffing, pull requests) for finances
- You need sophisticated multi-currency tracking with price histories
- You run on very limited hardware (Raspberry Pi, low-RAM VPS)
- You’re a developer who wants to script financial analysis
Final Verdict
For the typical self-hoster who wants to replace Mint or YNAB, Firefly III is the practical choice. It works like a normal web app — enter transactions, set budgets, view reports. The learning curve is minimal.
Beancount/Fava is the power-user option. If you already use vim, manage everything in git, and think in terms of double-entry ledgers, Beancount’s plain-text model is genuinely superior for data ownership and auditability. But if you just want to track your spending without learning accounting syntax, it’s not worth the overhead.
Both are excellent at what they do. The question is whether you want a web app or a text file.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments