selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

myfin logo

Self-host myfin

10.7.1

Personal finance manager with budgeting and investments

ReleaseOpen SourceGPL-3.0
Updated8 hours ago
LanguageTypescript
Setup difficultyModerate
MobileNative app
ThemeDark mode
Stars
316
Port
80 (web frontend (container port, mapped to host 8181 in compose))
Requires
MySQL
Docker
ghcr.io/afaneca/myfin
Install with Docker Compose
MyFin dashboard overviewMyFin transactions viewMyFin budgets viewMyFin stats and forecastingMyFin accounts managementMyFin categories and entitiesMyFin rules engineMyFin investments trackingMyFin goals trackingMyFin dark theme

What is myfin?

MyFin Budget is a self-hosted personal finance management platform that helps users track income, expenses, budgets, and investments. It consists of a React/TypeScript web frontend, a separate Node.js API backend, and an Android mobile app. Key capabilities include multi-language support (English and Portuguese), manual and CSV transaction import with auto-categorization rules, split transactions, multi-account tracking, Boonzi-style monthly budgeting, net worth forecasting, and investment portfolio tracking. Theming supports both light and dark modes. Deployment is primarily via Docker Compose (MySQL database, API on port 3001, frontend on port 80), with a one-click Hostinger option and manual installation guides. The project is licensed under GPL-3.0 and accepts donations via Ko-fi.

Should you self-host myfin?

myfin scores 49/100 on selfhost.directory (how scoring works) and ranks #27 of 62 in Personal Finance. It has 316 GitHub stars.

It shipped 19 stable releases in the past year. The latest, 10.7.1, came out on 24 October 2026. New versions land roughly every 2 weeks.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is GPL-3.0-licensed and written mostly in Typescript.

Its closest alternative on selfhost.directory is Firefly III (82/100, 25 022 stars). It scores higher overall, so compare the two before you pick. See myfin vs Firefly III side by side.

Features

  • Account management
  • Auto-categorization rules
  • Balance snapshots
  • Categories and entities
  • Financial statistics and forecasting
  • Goals tracking
  • Investment TrackingCurrently in beta
  • Monthly budgeting
  • Multi-account tracking
  • Multi-language Support
  • Split Transactions
  • Transaction Management

myfin README

How to install myfin

Install myfin with Docker Compose

Docker and Docker Compose installed
Environment variables
VITE_MYFIN_BASE_API_URL, DB_NAME, DB_USER, DB_PW, DB_PORT, DB_HOST, SMTP_HOST, SMTP_PORT, SMTP_SECURE, SMTP_USER, SMTP_PASSWORD, SMTP_FROM, PORT, LOGGING, BYPASS_SESSION_CHECK, ENABLE_USER_SIGNUP, TRUST_PROXY, MYSQL_ROOT_PASSWORD, MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD

docker compose up

Bootstraps the whole platform (API + web + MySQL) using the provided docker-compose.yml

How to configure myfin

  • BYPASS_SESSION_CHECKfalseBypass session check

    Bypass session check

  • DB_HOSTdbDatabase host

    Database host

  • DB_NAMEmyfinDatabase name

    Database name

  • DB_PORT3306Database port

    Database port

  • DB_PWmyfinpasswordDatabase password

    Database password

  • DB_USERmyfinDatabase user

    Database user

  • ENABLE_USER_SIGNUPfalseEnable user registration

    Enable user registration

  • LOGGINGfalseEnable logging

    Enable logging

  • MYSQL_DATABASEmyfinMySQL database name

    MySQL database name

  • MYSQL_PASSWORDmyfinpasswordMySQL password

    MySQL password

  • MYSQL_ROOT_PASSWORDmyfinrootpasswordMySQL root password

    MySQL root password

  • MYSQL_USERmyfinMySQL user

    MySQL user

  • PORT3001API server port

    API server port

  • SMTP_FROMSMTP from address

    SMTP from address

  • SMTP_HOSTSMTP server host

    SMTP server host

  • SMTP_PASSWORDSMTP password

    SMTP password

  • SMTP_PORTSMTP server port

    SMTP server port

  • SMTP_SECURESMTP secure connection

    SMTP secure connection

  • SMTP_USERSMTP username

    SMTP username

  • TRUST_PROXY1Trust proxy hops for Express

    Trust proxy hops for Express

  • VITE_MYFIN_BASE_API_URLhttps://myfin.domain.tld:3001Base URL for the API backend

    Base URL for the API backend

myfin releases & version history

FAQ

Why is my goal showing as underfunded?

Higher-priority goals consume available balance first. Increase account balance, reduce higher-priority allocations, or adjust priorities.

What happens when I reach 100% on a goal?

The goal shows as complete with a checkmark and remains active unless archived. You can continue to over-fund it.

Do I need to create separate accounts for each goal?

No, goals work as a virtual allocation layer on top of existing accounts. One account can fund multiple goals.

Why do I have to set the current value manually for investments?

The system is asset-agnostic and doesn't integrate with live price sources. Manual entry keeps flexibility and user control over valuation.

What happens if no rules match my transaction?

The engine attempts a fuzzy match fallback (entity first, then category). If that fails, the transaction is added without automatic categorization.

Can I have rules with OR logic (match this OR that)?

Currently all conditions within a rule use AND logic. To achieve OR behavior, create multiple separate rules.

Why isn't the correct rule being applied to my transaction?

Check rule setup on the rules page; all conditions use AND logic, so create separate rules for OR behavior. If no rules match, a fuzzy fallback tries entity then category.

Why do the values from the budget details differ from the evolution stats?

Budget details only count categorized transactions and treat excluded-account transfers as expenses, while evolution stats compare balance snapshots at month start and end for a realistic patrimony view.

More in Finance & Budgeting

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…