finds.dev← search

// the find

ghostfolio/ghostfolio

★ 8,653 · TypeScript · AGPL-3.0 · updated Jun 2026

Open Source Wealth Management Software. Angular + NestJS + Prisma + Nx + TypeScript 🤍

Ghostfolio is a self-hostable personal portfolio tracker for stocks, ETFs, and crypto. It handles multi-account management, performance metrics across multiple time windows, and basic risk analysis. Built with Angular + NestJS + Prisma on Postgres, it's squarely aimed at DIY investors who want to own their data instead of handing it to Robinhood or a spreadsheet.

The Nx monorepo structure is well-organized — API modules are cleanly separated by domain (account, portfolio, import, auth) with no obvious coupling violations. The portfolio calculator has four distinct implementations (MWR, ROAI, ROI, TWR) with solid test coverage per algorithm, which is rare for OSS finance tools. Self-hosting via Docker Compose is genuinely straightforward — one compose file, documented env vars, migrations run on startup. The `.agents/skills` directory with Angular and NestJS best-practice references is an interesting pattern for LLM-assisted development on the codebase.

Redis is a hard runtime dependency for caching, which adds operational weight for self-hosters who just want Postgres. The data provider story is thin out of the box — Yahoo Finance is flaky for production use, CoinGecko requires an API key, and the 'Ghostfolio' data source is paywalled behind Premium, which creates a catch-22 for self-hosters who don't want to pay for the cloud version. The public API is minimal and experimental with no versioning guarantees, so building anything on top of it is risky. OIDC support is explicitly marked experimental after years of the project existing, suggesting auth complexity is being deferred rather than solved.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →