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_PASSWORD and POSTGRES_PASSWORD to the same strong password
  • Generate SECRET_KEY_BASE with: openssl rand -hex 64

Start the stack:

docker compose up -d

Initial Setup

  1. Open http://your-server-ip:3000 in your browser
  2. Create your account with email and password (default login: user@maybe.local / password may work on some builds — change immediately)
  3. Add your financial accounts — bank accounts, credit cards, investments, property
  4. Set your base currency
  5. Enter initial balances or import transaction history

Configuration

SettingWhereWhat It Does
SECRET_KEY_BASEEnvironmentRails encryption key — must be 64+ hex chars
RAILS_FORCE_SSLEnvironmentSet true behind HTTPS reverse proxy
GOOD_JOB_EXECUTION_MODEEnvironmentasync runs background jobs in-process
Base currencyWeb UI → SettingsPrimary currency for net worth calculations

Reverse Proxy

Example Nginx Proxy Manager configuration:

FieldValue
Domainfinance.yourdomain.com
Schemehttp
Forward Hostmaybe
Forward Port3000
SSLRequest 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

ResourceUsage
RAM~300-500 MB (Rails + PostgreSQL)
CPULow 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.

Comments