Maybe: The Open-Source Personal Finance App You Can Self-Host
Most personal finance apps ask you to hand over your bank credentials or link your accounts through aggregators like Plaid. You get a nice dashboard in exchange for trusting a third party with some of the most sensitive data you own. For a lot of people, that tradeoff is uncomfortable — or simply not acceptable.
Photo by Joshua Aragon on Unsplash
Maybe is the alternative. It's an open-source personal finance app designed to be self-hosted, so your financial data lives on your own infrastructure. The project was originally a commercial SaaS product that raised over $1M before the founder open-sourced it entirely and rebuilt it as a community project. That history shows in the polish: Maybe looks and feels like a proper product, not a hobby project.
What Maybe Does
Maybe focuses on net worth tracking and investment portfolio management — two areas where most free tools either fall short or require account linking.
The core features:
- Net worth tracking — manually or automatically (via Plaid if you choose to connect it) track assets and liabilities over time
- Investment portfolio analysis — see allocation breakdowns, performance charts, and benchmarking
- Account management — track checking, savings, brokerage, real estate, crypto, and custom asset types
- Transaction history — import via CSV or connect financial accounts
- Multi-currency support — useful if you hold assets in multiple currencies
- Household support — multiple users can share a single Maybe instance
The Plaid integration is optional. If you'd rather not use it, you can import transactions manually via CSV exports from your bank or brokerage. Many users find this preferable — it's slightly more work but completely severs the data-sharing chain.
Running Maybe with Docker
Maybe ships with an official Docker Compose setup, which makes deployment straightforward.
Prerequisites: Docker, Docker Compose, a server or local machine with a few hundred MB of RAM.
Pull the compose file:
curl -o docker-compose.yml https://raw.githubusercontent.com/maybe-finance/maybe/main/docker-compose.example.yml
The default compose file starts Maybe with a Postgres database. Before running it, create a .env file with the required configuration:
# .env
SECRET_KEY_BASE=<generate with: openssl rand -hex 64>
POSTGRES_PASSWORD=<choose a strong password>
APP_DOMAIN=localhost # or your domain if exposing externally
SELF_HOSTING_ENABLED=true
Then start the stack:
docker compose up -d
After a minute or so, Maybe will be available at http://localhost:3000. On first load you'll create an admin account. There's no onboarding wizard — you're dropped into the dashboard and can start adding accounts.
Adding Your Accounts
Maybe organizes your financial picture around accounts. Each account represents an asset or liability — a checking account, a brokerage account, your home's estimated value, a loan, etc.
To add one, click New Account and pick a type. For manual accounts, you set a starting balance and optionally import transactions. For connected accounts (Plaid), you authenticate with your institution through the standard Plaid flow — but this is entirely opt-in.
A typical setup might include:
- Checking account (manual, CSV import from your bank)
- Savings account (manual)
- Brokerage account (manual with periodic CSV imports, or Plaid-connected)
- 401k or IRA (manual, updated monthly)
- Home value (manual, updated quarterly)
- Mortgage (liability, manually tracked)
Maybe's net worth chart updates as you add accounts and log values. It's particularly good at showing investment allocation — once you've added brokerage accounts, it breaks down holdings by type, sector, and individual position.
Like what you're reading? Subscribe to Self-Hosted Weekly — free weekly guides in your inbox.
Importing Transactions
For manual accounts, Maybe accepts CSV imports in a flexible format. Most banks and brokerages offer CSV exports from their transaction history pages.
The import flow is simple: go to an account, click Import, upload your CSV, and map the columns (date, amount, description). Maybe handles debits and credits, categorizes transactions using a built-in rule engine, and deduplicates on reimport so you can safely re-upload overlapping date ranges.
If you have years of history, this is worth the one-time effort. Once the historical data is loaded, ongoing maintenance is just uploading a monthly export — five minutes per account.
Reverse Proxying with Nginx
If you want to access Maybe from outside your home network (or on a custom domain inside your network), add an Nginx reverse proxy block:
server {
listen 443 ssl;
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;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Since this is financial data, keep it behind authentication if you're exposing it externally. Pair it with a VPN (WireGuard, Tailscale) or at minimum add HTTP Basic Auth in front of it.
Keeping Maybe Updated
Maybe is under active development. To update:
docker compose pull
docker compose up -d
The compose stack handles database migrations automatically on startup. Check the GitHub releases page for a changelog before major version bumps — the project occasionally introduces breaking changes that require manual steps.
Maybe vs. Alternatives
If you're evaluating Maybe against other self-hosted finance tools:
Firefly III is more powerful for budgeting and transaction categorization, but lighter on investment tracking. If your main goal is envelope budgeting or detailed spending analysis, Firefly is stronger. If you care more about net worth and portfolio composition, Maybe has the edge.
Actual Budget excels at zero-based budgeting and is simpler to operate. It doesn't have investment portfolio features at all — it's purely a budgeting tool.
Ghostfolio focuses exclusively on investment portfolio tracking with sophisticated benchmarking and allocation analysis. If you want a dedicated portfolio tool and don't need integrated budgeting, Ghostfolio is excellent.
Maybe's strength is doing both — tracking your full financial picture (cash + investments + liabilities) in a single interface with production-quality UX.
When Self-Hosting Makes Sense
Self-hosted Maybe is a good fit if:
- You're uncomfortable linking financial accounts to third-party aggregators
- You want data that lasts regardless of the SaaS product's business model
- You already run a homelab and adding one more container is trivial
- You want to customize or contribute to the codebase
It's less ideal if you want fully automated account syncing without any manual steps — the Plaid path works, but for the most privacy-conscious users, that defeats the purpose. For fully offline tracking, expect to spend 10–20 minutes a month on CSV imports.
Either way, the fact that a polished personal finance platform is available as a self-hosted option at all is worth noting. The open-source release of what was previously a $1M-funded SaaS product is a meaningful donation to the self-hosting community.
