Firefly III vs IHateMoney: Finance Tools Compared
IHateMoney started as a weekend project to split bills with friends — and that’s still exactly what it does, nothing more. Firefly III is a full personal finance manager that tracks every transaction across every account you own. Comparing them is almost unfair because they solve completely different problems, but the names surface together when people search for self-hosted finance tools.
Quick Verdict
These tools don’t compete. Firefly III is for personal finance management — tracking income, expenses, budgets, and net worth across all your accounts. IHateMoney is for splitting shared expenses with a group — roommates, travel companions, dinner parties. If you need both, run both. IHateMoney uses ~30 MB of RAM and deploys in seconds.
Updated March 2026: Verified with latest Docker images and configurations.
Overview
Firefly III is a comprehensive personal finance manager built on Laravel (PHP). It implements double-entry bookkeeping and tracks transactions across bank accounts, credit cards, loans, and assets. It includes automated categorization rules, recurring transactions, budgets, piggy banks (savings goals), and detailed financial reports. Development has been active since 2012 with monthly releases.
IHateMoney is a shared expense tracker written in Python (Flask). You create a project, add members, log expenses, and it calculates who owes whom. No accounts, no bank connections, no budgets — just expense splitting. It supports multiple currencies and can calculate settlements to minimize the number of transfers needed. The latest release is v7.0.1 (March 2026).
Feature Comparison
| Feature | Firefly III 6.5.3 | IHateMoney 7.0.1 |
|---|---|---|
| Primary function | Full personal finance management | Group expense splitting |
| Accounting model | Double-entry bookkeeping | Simple expense logging |
| User accounts | Multi-user with authentication | Project-based (password per project) |
| Bank import | CSV, GoCardless (EU banks) | None |
| Budgets | Yes (monthly budgets per category) | No |
| Recurring transactions | Yes | No |
| Reports/charts | Detailed (income/expense, net worth, category) | Settlement summary only |
| Multi-currency | Yes (with exchange rates) | Yes |
| Automated rules | Yes (regex, multi-condition matching) | No |
| API | Full REST API | REST API |
| Mobile app | Progressive Web App | Mobile-responsive web |
| Bill splitting | No | Yes (core feature) |
| Settlement calculation | No | Yes (minimum transfers) |
| Docker dependencies | MariaDB/PostgreSQL + cron | None (SQLite embedded) |
| Docker services | 3 | 1 |
| Minimum RAM | ~200-400 MB | ~30 MB |
| License | AGPL-3.0 | MIT |
Installation Complexity
IHateMoney is trivially simple to deploy — a single container with an embedded SQLite database.
IHateMoney Docker Compose
services:
ihatemoney:
image: ihatemoney/ihatemoney:7.0.1
restart: unless-stopped
ports:
- "8000:8000"
volumes:
- ihatemoney_data:/database
environment:
SECRET_KEY: CHANGE_THIS_TO_A_RANDOM_STRING # Required, change this
SQLALCHEMY_DATABASE_URI: "sqlite:////database/ihatemoney.db"
ACTIVATE_DEMO_PROJECT: "False"
ALLOW_PUBLIC_PROJECT_CREATION: "True"
ACTIVATE_ADMIN_DASHBOARD: "False"
volumes:
ihatemoney_data:
Firefly III Docker Compose
Firefly III requires a database server and a cron container for scheduled tasks.
services:
app:
image: fireflyiii/core:version-6.5.4
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- firefly_upload:/var/www/html/storage/upload
env_file: .env
depends_on:
db:
condition: service_healthy
networks:
- firefly
db:
image: mariadb:11.8.6
restart: unless-stopped
volumes:
- firefly_db:/var/lib/mysql
environment:
MYSQL_RANDOM_ROOT_PASSWORD: "yes"
MYSQL_USER: firefly
MYSQL_PASSWORD: CHANGE_THIS_DB_PASSWORD
MYSQL_DATABASE: firefly
healthcheck:
test: ["CMD-SHELL", "healthcheck.sh --su-mysql --connect --innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
networks:
- firefly
cron:
image: alpine
restart: unless-stopped
command: >
sh -c "echo '0 3 * * * wget -qO- http://app:8080/api/v1/cron/CHANGE_THIS_CRON_TOKEN' | crontab - && crond -f -L /dev/stdout"
depends_on:
- app
networks:
- firefly
volumes:
firefly_upload:
firefly_db:
networks:
firefly:
driver: bridge
Create a .env file for Firefly III:
APP_KEY=CHANGE_THIS_32_CHAR_RANDOM_STRING
APP_URL=http://localhost:8080
SITE_OWNER=[email protected]
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=CHANGE_THIS_DB_PASSWORD
STATIC_CRON_TOKEN=CHANGE_THIS_CRON_TOKEN
TZ=America/New_York
DEFAULT_LANGUAGE=en_US
TRUSTED_PROXIES=**
The complexity difference is stark. IHateMoney: one container, one environment variable that matters (SECRET_KEY). Firefly III: three containers, a .env file with a dozen required values, and passwords that must match between containers.
Performance and Resource Usage
| Resource | Firefly III | IHateMoney |
|---|---|---|
| RAM (idle) | ~200-350 MB | ~25-35 MB |
| RAM (active use) | ~300-500 MB | ~30-50 MB |
| CPU (idle) | Low | Negligible |
| Disk (application) | ~500 MB | ~80 MB |
| Docker services | 3 | 1 |
| Startup time | ~10-15 seconds | ~2 seconds |
IHateMoney runs on virtually nothing. You can deploy it on a Raspberry Pi Zero without noticing it’s there. Firefly III is a full Laravel application with a database server — modest by most standards, but an order of magnitude heavier than IHateMoney.
Community and Support
| Aspect | Firefly III | IHateMoney |
|---|---|---|
| GitHub stars | ~18,000+ | ~1,200+ |
| Contributors | 200+ | 80+ |
| Release cadence | Monthly | Every few months |
| Documentation | Excellent | Adequate |
| Active development | Very active | Moderately active |
| Commercial backing | None (community project) | None (community project) |
Firefly III has a much larger community and better documentation. IHateMoney is a smaller project with a narrower scope, so less documentation is needed.
Use Cases
Choose Firefly III If…
- You want to track all your personal finances in one place
- You need bank import capabilities (especially EU banks via GoCardless)
- Budget tracking and net worth reports matter to you
- You want automated transaction categorization
- You’re replacing Mint, YNAB (tracking mode), or Quicken
- You need multi-user authentication
Choose IHateMoney If…
- You need to split expenses with roommates, travel groups, or friends
- Simplicity is paramount — you want zero maintenance
- You’re replacing Splitwise or Tricount
- You’re running on constrained hardware
- You don’t need authentication per user (project-based passwords are sufficient)
- You want something anyone can use without creating an account
Final Verdict
For personal finance management, Firefly III is the clear and only choice between these two — IHateMoney doesn’t even try to compete in that space.
For group expense splitting, IHateMoney is the right tool. It does one thing well, uses almost no resources, and deploys in under a minute.
The real question isn’t “which one” — it’s “do I need one or both?” Run IHateMoney for splitting bills with roommates. Run Firefly III for tracking your personal finances. They’re complementary tools at ~250 MB combined RAM.
FAQ
Can Firefly III split expenses between people?
No. Firefly III tracks your personal transactions and accounts. It has no concept of shared expenses or calculating settlements between people. Use IHateMoney or Splitwise for group expense splitting.
Does IHateMoney require user accounts?
No. IHateMoney uses project-based access — each project has a shared password. Anyone with the project name and password can add expenses and view balances. You can optionally enable an admin dashboard for managing projects.
Can I use IHateMoney with PostgreSQL instead of SQLite?
Yes. Set SQLALCHEMY_DATABASE_URI to a PostgreSQL connection string (e.g., postgresql://user:password@host/dbname). SQLite is the default and works well for typical use. PostgreSQL is only needed for high-traffic deployments.
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