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

FeatureFirefly IIIBeancount/Fava
Data entryWeb UI formsText file editing
Data storagePostgreSQL databasePlain text files
Automation rulesYes (auto-categorize, tag)No (scripting possible)
Bank importCSV, OFX, GoCardless (EU)CSV via bean-import
BudgetsCategory-based budgetsBudget plugins available
ReportsBuilt-in (charts, graphs)Fava web UI (interactive)
APIFull REST APINo API (text files)
Multi-currencyManual conversion rulesNative with price tracking
Version controlDatabase backupsGit-native (text files)
Mobile appThird-party apps availableFava responsive web only
Recurring transactionsYes (auto-create)Manual entry
Docker imagefireflyiii/coreyegle/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

ResourceFirefly IIIBeancount/Fava
RAM (idle)~300 MB~50-100 MB
CPULow-moderateVery low
DiskDatabase grows with transactionsText file (kilobytes)
Startup time10-30 seconds1-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.

Comments