How to Self-Host Maybe Finance: Open Source Personal Finance 2026
How to Self-Host Maybe Finance: Open Source Personal Finance in 2026
TL;DR
Mint shut down in 2023. Personal Capital (now Empower) pivoted to wealth management sales. YNAB charges $109/year. Maybe Finance is the open source alternative — a full personal finance platform for tracking accounts, budgets, investments, and net worth. It was originally a commercial product ($249/year) that went open source in early 2024 when the company couldn't raise funding. The codebase is mature (built with Ruby on Rails + React), actively maintained by the community, and self-hostable via Docker. Bank account connections use Plaid or Synth (a European Plaid alternative). If you want a polished Mint replacement that runs on your own server, Maybe Finance is the strongest option in 2026.
Key Takeaways
- Mint replacement: full personal finance — accounts, transactions, budgets, net worth, investments
- Went open source in 2024: formerly a $249/year commercial product, now MIT-licensed
- Bank connections: Plaid (US/Canada) or Synth (Europe) for automatic transaction sync
- Investment portfolio: track stocks, ETFs, crypto, real estate alongside bank accounts
- Net worth dashboard: historical net worth chart with all accounts aggregated
- GitHub stars: 37,000+ (one of the most-starred personal finance projects)
- License: MIT (open source) — no paid tiers on self-hosted
Why Maybe Finance Over Firefly III or Actual Budget?
| Feature | Maybe Finance | Firefly III | Actual Budget |
|---|---|---|---|
| Tech stack | Rails + React | PHP + Laravel | Electron/Node |
| UI quality | Excellent | Good | Good |
| Bank sync (auto) | ✅ (Plaid/Synth) | Manual import | ✅ (SimpleFin) |
| Investment tracking | ✅ | ❌ | ❌ |
| Net worth chart | ✅ | ✅ | ✅ |
| Budgeting | ✅ | ✅ | ✅ (zero-based) |
| Multi-currency | ✅ | ✅ | ✅ |
| GitHub stars | 37K+ | 16K+ | 17K+ |
| Best for | Mint/Empower replacement | Manual bookkeeping | Zero-based budgeting |
Maybe Finance wins on UI polish and investment tracking — it looks and feels like a commercial product. Firefly III wins for users who want strict manual control over every transaction. Actual Budget wins for zero-based budgeting discipline (YNAB-style). If you're replacing Mint and want automatic bank sync + investment tracking, Maybe Finance is the clearest choice.
Self-Hosting with Docker Compose
Prerequisites
- Docker and Docker Compose
- 2GB RAM minimum
- Domain with HTTPS (required for Plaid bank connections)
docker-compose.yml
version: "3.8"
services:
maybe:
image: ghcr.io/maybe-finance/maybe:stable
container_name: maybe-finance
restart: unless-stopped
ports:
- "3000:3000"
env_file: .env
volumes:
- maybe_storage:/rails/storage
depends_on:
postgres:
condition: service_healthy
postgres:
image: postgres:16-alpine
container_name: maybe-postgres
restart: unless-stopped
environment:
POSTGRES_DB: maybe_finance_production
POSTGRES_USER: maybe_finance
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U maybe_finance"]
interval: 5s
timeout: 5s
retries: 5
volumes:
postgres_data:
maybe_storage:
.env Configuration
# .env — Required configuration
SECRET_KEY_BASE=your-64-char-secret-key-here
DB_HOST=postgres
DB_PORT=5432
DB_NAME=maybe_finance_production
DB_USERNAME=maybe_finance
DB_PASSWORD=change-this-strong-password
# Application URL (required for session cookies and links)
APP_DOMAIN=finance.yourdomain.com
RAILS_FORCE_SSL=true
# Mailer (for password reset, notifications)
SMTP_ADDRESS=smtp.youremail.com
SMTP_PORT=587
SMTP_USERNAME=finance@yourdomain.com
SMTP_PASSWORD=your-smtp-password
SMTP_DOMAIN=yourdomain.com
MAILER_FROM=finance@yourdomain.com
# Bank data provider (choose one)
# Option A: Plaid (US, Canada, UK — best coverage)
PLAID_CLIENT_ID=your-plaid-client-id
PLAID_SECRET=your-plaid-secret
PLAID_ENV=production # or 'sandbox' for testing
# Option B: Synth (European banks)
# SYNTH_API_KEY=your-synth-api-key
# Self-hosting mode (disables cloud registration)
SELF_HOSTED=true
Generate the secret key:
openssl rand -hex 64
Start Maybe Finance
docker compose up -d
# Check logs
docker compose logs -f maybe
# Access at http://localhost:3000 (or your domain)
# Create your account on first visit
Maybe Finance runs database migrations automatically on startup. The first user to register becomes the admin.
Setting Up Bank Connections with Plaid
Plaid connects to 12,000+ financial institutions in the US, Canada, and UK. Setting it up:
Get Plaid Credentials
- Sign up at dashboard.plaid.com
- Create a new application
- Copy the
client_idandsecret(use Production for real accounts, Sandbox for testing) - Plaid's free tier covers up to 100 Items (connected accounts) — sufficient for personal use
Connect Your Bank in Maybe Finance
Accounts → Add Account → Connect via Plaid
→ Search for your bank (Chase, Bank of America, Wells Fargo, etc.)
→ Enter your bank username and password (sent directly to Plaid, never stored by Maybe)
→ Select which accounts to import: Checking, Savings, Credit Cards
→ Transactions sync automatically going forward
→ Historical transactions imported (typically 90 days)
After connection, transactions appear in your Maybe dashboard within minutes. Plaid syncs new transactions nightly.
Manual Account Import (No Plaid)
If you don't want to use Plaid (or you're in a country without Plaid coverage), Maybe Finance supports manual CSV import:
Accounts → Add Account → Manual Account
→ Account type: Checking / Credit Card / Investment / Property / Loan
→ Current balance: $5,234.50
→ Import transactions: Upload CSV (QFX, OFX, or generic CSV format)
Most banks let you export transactions as CSV or OFX. Schedule a monthly import to keep data current.
Tracking Investments and Portfolio Performance
Maybe Finance treats investment accounts like any other account — but adds portfolio tracking:
Accounts → Add Investment Account
→ Choose: Brokerage, IRA, 401k, Crypto
→ Connect via Plaid (pulls holdings from Fidelity, Vanguard, Schwab, etc.)
OR
→ Manual: Add holdings (AAPL: 50 shares @ $190 avg cost)
Once connected, Maybe Finance:
- Shows current portfolio value with daily price updates
- Calculates unrealized gains/losses per position
- Shows allocation by asset type (stocks, bonds, cash)
- Tracks portfolio performance vs S&P 500 benchmark
- Displays total return since you started tracking
For real estate, you can add a property as a manual account with an estimated value. Update periodically with Zillow estimates.
Net Worth Dashboard
The net worth view aggregates all accounts:
Assets:
Checking accounts: $8,450
Savings accounts: $45,200
Investment portfolio: $187,350
Real estate (estimated): $650,000
Total assets: $891,000
Liabilities:
Credit cards: -$2,100
Auto loan: -$12,400
Mortgage: -$385,000
Total liabilities: -$399,500
Net worth: $491,500
The historical net worth chart shows month-by-month trends. Connect all your accounts to get an accurate picture — the value of Maybe Finance compounds as more accounts are connected.
Budgeting
Maybe Finance includes a budgeting module for setting and tracking monthly spending limits:
Budgets → Create Budget → Month: March 2026
Category budgets:
Groceries: $600
Dining out: $300
Transportation: $200
Entertainment: $150
Subscriptions: $100
Utilities: $200
Actual spending is pulled from connected bank transactions.
Categories are auto-tagged based on merchant data from Plaid.
You can edit auto-assigned categories — Maybe Finance learns your corrections over time. Create custom categories for unusual spending (home improvement, medical, etc.).
Transaction Management and Rules
Maybe Finance auto-categorizes transactions from Plaid, but you can fine-tune and automate:
Manual Categorization
Transactions → Select transaction
Category: Groceries → click → change to "Health & Wellness"
Notes: "Doctor copay — not groceries"
Your corrections train the categorization. The same merchant will be correctly categorized in future transactions.
Transaction Tagging
Tags let you track spending across categories — useful for project costs, tax deductions, or tracking spending on a specific goal:
Transaction: AWS bill → $127.30
Tags: #business, #tax-deductible
At year end, filter transactions by #tax-deductible to get your deduction list.
Bulk Import from CSV
For accounts not covered by Plaid (smaller banks, international accounts, crypto exchanges):
Accounts → [Account] → Import → Upload CSV
Column mapping:
Date: "Transaction Date"
Amount: "Amount"
Description: "Description"
Category: "Category" (optional — Maybe will auto-assign)
Maybe Finance accepts generic CSV, OFX, and QFX export formats from most financial institutions.
Reporting and Data Export
Net Worth Reports
Reports → Net Worth → Select date range
→ Shows monthly net worth snapshots
→ Export as CSV for Excel analysis
→ Shows top accounts by value and growth rate
Spending Reports
Reports → Spending → March 2026
→ Breakdown by category: Groceries 28%, Dining 15%, Transport 12%...
→ Month-over-month comparison
→ Highest-spend merchants this period
Tax Reports
Filter transactions for the tax year and export:
Transactions → Filter: Date range (Jan 1 – Dec 31, 2025)
Filter: Tags includes #tax-deductible
Export → CSV
→ Send to your accountant
Nginx Reverse Proxy with TLS
server {
listen 443 ssl http2;
server_name finance.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/finance.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/finance.yourdomain.com/privkey.pem;
# Restrict to your IPs — this is sensitive financial data!
allow 192.168.1.0/24; # Your home network
allow YOUR_VPN_IP; # Your VPN exit IP
deny all;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Security note: Since Maybe Finance contains your complete financial picture, IP-restricting access is strongly recommended. Use a VPN to access it from anywhere.
certbot --nginx -d finance.yourdomain.com
Security Hardening
Financial data deserves extra security care:
Environment Variable Security
# Never commit .env to version control
echo ".env" >> .gitignore
# Set strict file permissions
chmod 600 .env
# Rotate SECRET_KEY_BASE annually
# When rotated, all sessions are invalidated (users must log in again)
openssl rand -hex 64 # Generate new key
# Update .env, then: docker compose restart maybe
Database Encryption at Rest
# Enable PostgreSQL storage encryption at the volume level
# Using LUKS on Linux:
cryptsetup luksFormat /dev/sdb
cryptsetup open /dev/sdb postgres-encrypted
mkfs.ext4 /dev/mapper/postgres-encrypted
# Mount at the postgres_data volume path
Plaid Credential Security
Plaid tokens are stored in your Maybe Finance database. They're OAuth tokens (not your actual bank passwords). Still, protect your database:
- Encrypt database backups before uploading to cloud storage
- Use strong database passwords
- Keep your server OS patched
Backup and Restore
#!/bin/bash
# backup-maybe.sh
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR=/backups/maybe/$DATE
mkdir -p $BACKUP_DIR
# Database backup (contains all transactions, accounts, budgets)
docker compose exec -T postgres pg_dump \
-U maybe_finance maybe_finance_production \
| gzip > $BACKUP_DIR/maybe_db.sql.gz
# File storage (uploaded files, exports)
tar -czf $BACKUP_DIR/maybe_storage.tar.gz \
-C /var/lib/docker/volumes maybe-finance_maybe_storage
# Encrypt before uploading (financial data!)
gpg --symmetric --batch --yes \
--passphrase "$BACKUP_PASSPHRASE" \
$BACKUP_DIR/maybe_db.sql.gz
# Upload encrypted backup to B2
rclone copy $BACKUP_DIR b2:my-backups/maybe/
# Keep 30 days locally
find /backups/maybe -type d -mtime +30 -exec rm -rf {} +
echo "Maybe Finance backup complete: $DATE"
Restore
# Decrypt backup
gpg --decrypt maybe_db.sql.gz.gpg | gunzip | \
docker compose exec -T postgres psql \
-U maybe_finance maybe_finance_production
Upgrading Maybe Finance
cd /opt/maybe
# Pull latest stable image
docker compose pull maybe
# Restart (migrations run automatically)
docker compose up -d maybe
# Monitor startup
docker compose logs -f maybe | head -30
Maybe Finance uses Rails ActiveRecord migrations — they run on container startup. The stable tag tracks the latest stable release. To pin to a specific version, use the version tag (e.g., ghcr.io/maybe-finance/maybe:0.4.0).
Methodology
- GitHub data from github.com/maybe-finance/maybe, March 2026
- Pricing comparisons from YNAB, Personal Capital (Empower) pricing pages, March 2026
- Setup guide based on Maybe Finance official Docker documentation
- Version: Maybe Finance latest stable (check GitHub releases for current version)
- Plaid pricing and coverage from plaid.com/pricing, March 2026
Compare open source Mint alternatives on OSSAlt — bank sync support, budgeting features, and self-hosting difficulty.
Related: How to Self-Host Firefly III: Personal Finance Manager 2026 · Best Open Source Alternatives to YNAB and Mint 2026 · Actual Budget vs YNAB vs Maybe Finance: Personal Finance Tools 2026