Repository navigation
3.10.0 introduces a new calculation engine and adds cost basis methods, loan tracking and encrypted cloud backups.

Highlights
- New portfolio engine. Holdings, cash, valuations and returns now come from one engine on desktop, mobile and the server. It fixes many edge cases in transfers, shorts, splits, FX and rounding. (#1847, #1875, #1880, #1894, #1897, #1905, #1923, #1990)
- Cost basis methods. Each transaction-tracked account can use FIFO, weighted average cost (WAC), LIFO or HIFO. Not yet supported: cross-account ACB and picking specific lots. (#1872, #1898, #1904)
- Loans and mortgages. A liability can be tracked as a loan, with an amortization schedule, payments from a cash account, extra repayments, renewals and confirmed balances. (#1868, #1869, #1888, #1895, #1900, #1903, #1909, #1991)
- Encrypted cloud backups for Wealthfolio Connect subscribers: a daily backup of one profile, plus Back up now. Backups are encrypted before upload, so the cloud only sees ciphertext, and can be up to 256 MiB. Restore works on desktop only; the web server restores with the offline CLI. (#1918, #1980)
- Return of capital and notional distributions adjust cost basis instead of counting as income. (#1902)
- Money flow chart in Spending Insights. You can zoom into a category's subcategories, and subcategories also show in the spending plan. (#1935, #2004)
- AI agent (MCP) tools for linking transfers, importing quotes, updating activities and categorizing transactions. (#1896, #1911, #1913, #1937)
Upgrading
- The first launch recalculates your history, after making a backup. On a 13-account portfolio this took about 20 seconds.
- Where the old calculation was wrong, some derived numbers can change slightly: cost basis, realized gains and past values. Your activities and prices are not changed.
- If you use device sync, update all your devices. 3.9.1 can't calculate accounts set to WAC, LIFO or HIFO, or read the new return-of-capital entries.
- Self-hosting needs no configuration changes.
Improvements
- Activities: clicking a row opens it for editing. Duplicating an activity uses today's date and keeps its notes. (#1864, #1929)
- CSV import: investment imports no longer require an Amount column. (#1528, #1979)
- Transfers: credit card accounts can send cash transfers, and a cash transfer can use a different currency on each side. (#1796, #1901)
- Exchanges come from the full ISO 10383 list. Four old non-standard exchange codes are updated. (#1828)
- Custom price providers: new ones apply only to the securities assigned to them. Existing ones keep their fallback. (#1887, #1921)
- Investments dashboard: filter by a saved portfolio; the choice is remembered per profile. (#1940)
- Hidden accounts count in their group's total. (#1428, #1882, #1917)
- Health Center flags accounts with negative cash. (#1926)
- Long performance charts load faster. (#1930)
- Backups: a simpler Backups tab. (#1971, #1826)
- Connect moves above Settings in the desktop sidebar, with links where data is entered by hand. The Sync & Connections page is redesigned around what needs attention. Broker sync requests now include each account's type and the broker's account label, which Connect stores to diagnose mapping problems. (#1984, #1995, #1941)
- Spending: merchant rules for France, Germany and the Netherlands. (#1829, #1998, #1997)
- Formatting regions: India, Austria, Romania and Bulgaria are new. (#1968, #1908)
- Windows: installers are signed (Teymz Inc.). SmartScreen may still warn for a while. (#1910)
Fixes
- Asset and loan details: unsaved edits are no longer reset by a background portfolio update. (#1994)
- Linux AppImage: no longer opens a blank window on distributions with recent Mesa, such as Ubuntu 26.04. It now runs natively on Wayland; set
GDK_BACKEND=x11to use X11. (#223, #2005) - Connect: a brief connection drop no longer signs you out. "Last synced" now shows when sync last ran, not the broker's latest activity date. (#1843, #1995)
- Self-hosted server: CSV imports over 2 MB (a few thousand rows) no longer fail with
413 Payload Too Large, and an unusable secrets file gives a clear error. (#2000, #1932, #1886) - Fund classification: ETFs no longer show part of their value as Unknown in Sectors. Weights reported above 100% (rounding or leverage) are read correctly, and a fund's sectors are saved together. (#1854, #1855)
- Asset pages: after a full transfer to another account, income and gains from both accounts are shown, not only the receiving account's. (#1919)
- Accented, Chinese or emoji characters no longer make some operations fail: AI assistant replies, holdings export, symbol search, and entering or importing activities whose symbol contains them. (#1879)
- Transactions: the table remembers which columns you show. (#1999)
- Benchmarks: all-time benchmarks start where your accounts start. (#1933)
- Bonds: a synced bond reported by CUSIP and by ISIN stays one security. Treasury prices are no longer calculated from incomplete terms. (#1838, #1891)
- Quotes: the quote CSV import shows the server's error, no longer gets stuck after a failed import, and no longer mixes up two files picked one after the other. An Open, High or Low left untouched saves as the close. (#1950, #1951, #1966, #1973, #1993, #1994)
- Mobile: Theme "System" follows the phone. Editing a quote keeps focus in the field and saves. (#1959, #1685, #1989)
- Linux: the app starts with a
CorPOSIXlocale. (#1726, #1876) - Desktop: the database is closed cleanly on exit. (#1890)
- Recovery screen: when the device's secure storage is locked, it suggests unlocking it and trying again before restoring a backup. (#1996)
- Schwab "as of" dates import correctly. (#1878)
- Spending: completed months compare against the full previous month, and savings categories appear in the rule editor. (#1858, #1827)
- AI assistant and MCP: activities added west of UTC keep their date, and imports report failed rows correctly. (#1892)
- Dependencies: security updates. (#1899, #1927)
- Other: fixes to layout, translations, toasts, transfer editing, and navigation after a page error. (#1755, #1798, #1964, #1981, #1846, #1865, #1893, #1928, #1955, #1914)
Thanks to everyone who contributed and reported issues, including @jay-tau, @daviddphillips, @theluckystrike, @kryofin, @Jonjon-prog, @Bubbles840, @tiann, @salmonumbrella, @oliviertassinari, @markrickert, @kinhsman, @giovacalle, @bogdanr, @blastik, @Neallin-917, @DamienKCorp and @taufderl.
Full changelog: v3.9.1...v3.10.0