Self-Host Firefly III: Personal Finance Manager 2026
TL;DR
Firefly III (AGPL 3.0, ~16K GitHub stars, PHP) is a comprehensive self-hosted personal finance manager using double-entry bookkeeping — the same accounting method used by professional accountants. Track all transactions, set budgets, monitor bills, and generate detailed reports. Mint shut down in 2023; Copilot charges $9.99/month; YNAB charges $14.99/month. Firefly III gives you more detailed financial tracking than any of them, free, on your own server.
Key Takeaways
- Firefly III: AGPL 3.0, ~16K stars, PHP — double-entry bookkeeping with full transaction history
- Rules engine: Auto-categorize and tag transactions based on patterns
- Bills tracking: Track recurring bills and get notified when they're due
- Budgets: Set spending limits per category per month
- Reports: Customizable charts — spending over time, categories, account balances
- Fixer companion: Optional data importer to auto-import from banks (via Nordigen/SimpleFIN)
Firefly III vs Actual Budget
| Feature | Firefly III | Actual Budget |
|---|---|---|
| Accounting method | Double-entry | Envelope/zero-based |
| Best for | Detailed tracking, multiple accounts | Zero-based budgeting, YNAB users |
| Complexity | More complex setup | Simpler UI |
| Reports | Extensive | Basic |
| Bank sync | Via companion app | SimpleFIN/GoCardless |
| Mobile app | PWA + third-party | PWA |
| Rules engine | Advanced | Basic |
Part 1: Docker Setup
# docker-compose.yml
services:
app:
image: fireflyiii/core:latest
container_name: firefly-iii
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- firefly_upload:/var/www/html/storage/upload
environment:
APP_ENV: production
APP_KEY: "${APP_KEY}" # 32-char random key
APP_URL: "https://money.yourdomain.com"
DEFAULT_LANGUAGE: "en_US"
DEFAULT_LOCALE: "equal,en_US"
TZ: "America/Los_Angeles"
TRUSTED_PROXIES: "**"
DB_CONNECTION: pgsql
DB_HOST: db
DB_PORT: 5432
DB_DATABASE: firefly
DB_USERNAME: firefly
DB_PASSWORD: "${DB_PASSWORD}"
MAIL_MAILER: smtp
MAIL_HOST: mail.yourdomain.com
MAIL_PORT: 587
MAIL_FROM: firefly@yourdomain.com
MAIL_USERNAME: firefly@yourdomain.com
MAIL_PASSWORD: "${MAIL_PASSWORD}"
MAIL_ENCRYPTION: tls
depends_on:
db:
condition: service_healthy
db:
image: postgres:15-alpine
restart: unless-stopped
environment:
POSTGRES_DB: firefly
POSTGRES_USER: firefly
POSTGRES_PASSWORD: "${DB_PASSWORD}"
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U firefly"]
interval: 10s
start_period: 20s
# Cron for recurring transactions:
cron:
image: alpine:latest
restart: unless-stopped
command: sh -c "echo '0 3 * * * wget -qO- http://app:8080/api/v1/cron/CRON_TOKEN' | crontab - && crond -f -L /dev/stdout"
depends_on:
- app
volumes:
firefly_upload:
db_data:
# Generate APP_KEY:
docker run --rm fireflyiii/core:latest php artisan key:generate --show
# → base64:xxxx...
docker compose up -d
Part 2: HTTPS with Caddy
money.yourdomain.com {
reverse_proxy localhost:8080
}
Visit https://money.yourdomain.com → create admin account.
Part 3: Account Setup
Asset accounts
These are your real accounts:
- Accounts → + Create new account
- Type: Asset account (checking, savings, investment)
- Name:
Chase Checking,High-Yield Savings - Opening balance + date
Expense accounts
Where money goes:
- Type: Expense account
- These are created automatically when you add transactions
- Examples:
Amazon,Whole Foods,Shell,Netflix
Revenue accounts
Where money comes from:
- Type: Revenue account
- Examples:
Employer Inc,Freelance Client,Dividend income
Part 4: Transactions
Add a transaction
- Transactions → + Create new transaction
- Type: Withdrawal (expense), Deposit (income), or Transfer (between accounts)
- From:
Chase Checking - To:
Whole Foods(auto-creates expense account) - Amount:
87.43 - Category:
Groceries - Date, description, tags
Transaction types explained
Withdrawal: Money leaves your asset account
Chase Checking → Whole Foods (-$87.43)
Deposit: Money enters your asset account
Employer Inc → Chase Checking (+$5,000)
Transfer: Between your own accounts
Chase Checking → High-Yield Savings (-$500)
(No net change to your total)
Part 5: Rules Engine
Auto-categorize transactions based on patterns:
- Rules → + Create rule
- Trigger: Transaction is created
- Conditions:
- Description contains:
NETFLIX - OR description contains:
SPOTIFY
- Description contains:
- Actions:
- Set category:
Subscriptions - Set budget:
Entertainment - Add tag:
auto-categorized
- Set category:
# Example rules:
Rule: "Grocery stores"
Conditions:
- description contains: TRADER JOE
- OR description contains: WHOLE FOODS
- OR description contains: KROGER
Actions:
- category: Groceries
- budget: Food
Rule: "Utilities"
Conditions:
- description contains: PACIFIC GAS
- OR description contains: ELECTRIC
Actions:
- category: Utilities
- budget: Housing
Part 6: Import Transactions
CSV import (manual)
- Export transactions from your bank (CSV/OFX)
- Import → CSV file
- Map columns: Date, Description, Amount, Account
- Rules auto-apply during import
Firefly III Importer (companion app)
# Add to docker-compose.yml:
services:
importer:
image: fireflyiii/data-importer:latest
container_name: firefly-importer
restart: unless-stopped
ports:
- "8081:8080"
environment:
FIREFLY_III_URL: "http://app:8080"
FIREFLY_III_ACCESS_TOKEN: "your-personal-access-token"
# For Nordigen (European banks):
NORDIGEN_ID: "your-nordigen-id"
NORDIGEN_KEY: "your-nordigen-key"
# For SimpleFIN (US banks):
SIMPLEFIN_TOKEN: "your-simplefin-token"
Part 7: Budgets and Bills
Budgets
- Budgets → + Create budget
- Name:
Groceries - Monthly amount:
$500
Budget progress bar shows: Spent / Budgeted
Bills (recurring expenses)
Track recurring bills and get notified:
- Bills → + Create bill
- Name:
Netflix - Amount:
~$15.49 - Repeat period: Monthly
- Expected date: Day 5 of month
- Associated accounts:
Credit Card
Firefly III matches transactions to bills automatically and shows upcoming bills in the dashboard.
Part 8: Reports
Budget report
Shows spending vs budget per category, per month.
Expense report
Categories breakdown:
- Groceries: $487 (97% of budget)
- Entertainment: $234 (117% of budget — over!)
- Transportation: $312 (104% of budget — slightly over)
- Utilities: $148 (99% of budget)
Net worth over time
Charts your total assets minus liabilities over months/years.
Category report
Drill down into any category — see every transaction in Groceries for the past 3 months.
Maintenance
# Update:
docker compose pull
docker compose up -d
# Database backup:
docker exec firefly-iii-db-1 pg_dump -U firefly firefly \
| gzip > firefly-db-$(date +%Y%m%d).sql.gz
# File upload backup:
tar -czf firefly-uploads-$(date +%Y%m%d).tar.gz \
$(docker volume inspect firefly-iii_firefly_upload --format '{{.Mountpoint}}')
# Logs:
docker compose logs -f app
See also: Actual Budget — simpler zero-based budgeting alternative
See all open source finance tools at OSSAlt.com/categories/finance.