WYGIWYH logo

WYGIWYH

Opinionated, no-budget personal finance tracker with multi-currency support

Alternative to: ynab, mint, monarch money, actual budget


WYGIWYH (What You Get Is What You Have) is a principles-first finance tracker for people who prefer a no-budget, straightforward approach to managing money. It offers multi-currency accounts, custom currencies, automated transaction rules, a built-in dollar-cost-averaging tracker, and an automation-ready API, all through a self-hosted web app.

WYGIWYH Docker Compose example

Self-host WYGIWYH on your own server, homelab, or VPS starting from this Docker Compose example. It runs WYGIWYH in Docker containers using the official eitchtee/wygiwyh:latest, postgres:15-bookworm images, with persistent volumes and automatic restarts preconfigured. Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.

services:
  web:
    image: eitchtee/wygiwyh:latest
    depends_on:
      - db
    environment:
      # Timezone used by scheduled/async tasks
      TZ: "UTC"
      # Enable Django debug mode — keep false in production
      DEBUG: "false"
      # Public URL where users reach WYGIWYH (used for CSRF/allowed origins)
      URL: "changeme"
      # Whether the app is served over HTTPS
      HTTPS_ENABLED: "true"
      # Secret key used to sign sessions and tokens
      SECRET_KEY: "changeme"
      # Space-separated list of allowed hostnames
      DJANGO_ALLOWED_HOSTS: "localhost 127.0.0.1 [::1]"
      # PostgreSQL database name
      SQL_DATABASE: "wygiwyh"
      # PostgreSQL user
      SQL_USER: "wygiwyh"
      # PostgreSQL password
      SQL_PASSWORD: "changeme"
      # PostgreSQL host (service name on the compose network)
      SQL_HOST: "db"
      # PostgreSQL port
      SQL_PORT: "5432"
      # Number of Gunicorn worker processes
      WEB_CONCURRENCY: "4"
      # Number of background task workers (single-container mode)
      TASK_WORKERS: "1"
    volumes:
      - media:/usr/src/app/attachments/
    restart: unless-stopped

  db:
    image: postgres:15-bookworm
    environment:
      POSTGRES_DB: "wygiwyh"
      POSTGRES_USER: "wygiwyh"
      POSTGRES_PASSWORD: "changeme"
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    restart: unless-stopped

volumes:
  media:
  postgres_data:

Values set to changeme are required — replace them with your own values before starting WYGIWYH.

Prefer a managed setup? WinterFlow installs, configures, and updates WYGIWYH for you using this same Docker Compose configuration.