How to Self-Host Maybe with Docker Compose
What Is Maybe?
Maybe is an open-source personal finance app originally built as a commercial SaaS product. After the company was acqui-hired by ElevenLabs in July 2025, the repository was archived and development stopped at v0.6.0. The app still works — it tracks net worth, budgets, accounts, and investments through a clean modern UI built with Ruby on Rails. It replaces Mint or Personal Capital for basic financial dashboards.
Important: Maybe is no longer maintained. No security patches, no new features, no bug fixes. Self-host it if the current feature set meets your needs, but plan to migrate to Actual Budget or Firefly III if you need ongoing development.
GitHub: github.com/maybe-finance/maybe (archived)
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 1 GB of free RAM
- A domain name (optional, for remote access)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
maybe:
image: ghcr.io/maybe-finance/maybe:0.6.0
container_name: maybe
restart: unless-stopped
ports:
- "3000:3000"
environment:
RAILS_ENV: production
SECRET_KEY_BASE: generate_a_64_char_hex_string_here
DB_HOST: postgres
DB_PORT: "5432"
DB_USERNAME: maybe
DB_PASSWORD: change_this_strong_password
DB_NAME: maybe_production
RAILS_FORCE_SSL: "false"
RAILS_ASSUME_SSL: "false"
GOOD_JOB_EXECUTION_MODE: async
depends_on:
postgres:
condition: service_healthy
networks:
- maybe
postgres:
image: postgres:16-alpine
container_name: maybe-db
restart: unless-stopped
environment:
POSTGRES_USER: maybe
POSTGRES_PASSWORD: change_this_strong_password
POSTGRES_DB: maybe_production
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U maybe"]
interval: 10s
timeout: 5s
retries: 5
networks:
- maybe
volumes:
postgres_data:
networks:
maybe:
Before starting:
- Change
DB_PASSWORDandPOSTGRES_PASSWORDto the same strong password - Generate
SECRET_KEY_BASEwith:openssl rand -hex 64
Start the stack:
docker compose up -d
Initial Setup
- Open
http://your-server-ip:3000in your browser - Create your account with email and password (default login:
user@maybe.local/passwordmay work on some builds — change immediately) - Add your financial accounts — bank accounts, credit cards, investments, property
- Set your base currency
- Enter initial balances or import transaction history
Configuration
| Setting | Where | What It Does |
|---|---|---|
SECRET_KEY_BASE | Environment | Rails encryption key — must be 64+ hex chars |
RAILS_FORCE_SSL | Environment | Set true behind HTTPS reverse proxy |
GOOD_JOB_EXECUTION_MODE | Environment | async runs background jobs in-process |
| Base currency | Web UI → Settings | Primary currency for net worth calculations |
Reverse Proxy
Example Nginx Proxy Manager configuration:
| Field | Value |
|---|---|
| Domain | finance.yourdomain.com |
| Scheme | http |
| Forward Host | maybe |
| Forward Port | 3000 |
| SSL | Request a new certificate |
Set RAILS_FORCE_SSL=true and RAILS_ASSUME_SSL=true when behind HTTPS.
For more options: Reverse Proxy Setup
Backup
Back up the PostgreSQL database:
docker exec maybe-db pg_dump -U maybe maybe_production > maybe_backup.sql
Restore:
docker exec -i maybe-db psql -U maybe maybe_production < maybe_backup.sql
For automated backup strategies: Backup Strategy
Troubleshooting
App Won’t Start — SECRET_KEY_BASE Error
Symptom: Container exits immediately with a Rails error about missing secret key.
Fix: Generate a proper key:
openssl rand -hex 64
Set this as SECRET_KEY_BASE in your docker-compose.yml.
Database Connection Refused
Symptom: “PG::ConnectionBad” error in container logs.
Fix: Ensure DB_HOST is set to postgres (the service name), DB_PASSWORD matches POSTGRES_PASSWORD, and the PostgreSQL container is healthy.
Slow Initial Load
Symptom: First page load takes 30+ seconds.
Fix: Normal for Rails apps on first request — assets compile on first access. Subsequent loads are fast. Wait for the initial compilation.
Resource Requirements
| Resource | Usage |
|---|---|
| RAM | ~300-500 MB (Rails + PostgreSQL) |
| CPU | Low to moderate |
| Disk | ~500 MB for application, minimal for data |
Verdict
Maybe has the best-looking UI of any self-hosted finance app — clean, modern, and intuitive. But it’s archived software with no future updates. For a financial tracking dashboard that looks great and does the basics, it works. For anything requiring active development, bank syncing, or long-term reliability, use Actual Budget (envelope budgeting) or Firefly III (full-featured accounting). For investment tracking specifically, Ghostfolio is actively maintained and purpose-built.
FAQ
Is Maybe still maintained?
No. Maybe was open-sourced when the company was acqui-hired by ElevenLabs in July 2025. The GitHub repository is archived at v0.6.0. There are no security patches, bug fixes, or new features coming. It works as-is, but plan for a long-term alternative.
Can I connect my bank accounts to Maybe?
The open-source version has limited bank sync support. The original SaaS used Plaid for bank connections, but this requires your own Plaid API key. For automatic bank syncing, Actual Budget with SimpleFIN is a better maintained option.
Should I use Maybe or Actual Budget?
If you want a modern financial dashboard with investment tracking and don’t mind abandoned software, Maybe works. For active development, budgeting features, and bank sync, Actual Budget is the better choice. For comprehensive accounting with double-entry bookkeeping, use Firefly III.
How do I import transaction data?
Maybe supports CSV import for transaction history. Export from your bank as CSV, then upload through the web UI under the account settings. Column mapping is available for matching your CSV format to Maybe’s expected fields.
Is my financial data safe in Maybe?
Your data is stored locally in PostgreSQL on your server — it never leaves your infrastructure. However, since the software is no longer maintained, any security vulnerabilities discovered after July 2025 will not be patched. Keep your server and Docker images updated and limit network exposure.
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