Wealthfolio logo Wealthfolio
Download
3.3.0
Apr 30, 2026

Wealthfolio 3.3.0 is a big release for planning. Goals get an editorial redesign with cover cards, a save-up projection engine, and a brand-new Retirement Planner backed by a Monte Carlo Risk Lab. The AI assistant gains live access to the Health Center, an inline CSV import review grid, and persistent attachments. Symbol mapping now validates in real time per provider, custom providers can finally point at self-hosted URLs, and dozens of fixes land across activities, holdings, mobile, and device sync.


Goals & Retirement Planning

Goals get an end-to-end redesign and a brand new retirement experience:

  • Editorial dashboard — cover cards, redesigned widget, and grouped plan sections
  • Save-up projection engine — backend-driven save-up overview with milestones, projection chart, and tax-aware funding
  • Retirement Planner — a new goals-first retirement experience with traditional vs FIRE goal types, default ages, and a not-financial-advice disclaimer
  • Risk Lab — Monte Carlo simulation (5k runs by default), stress tests, sensitivity heatmaps, and a layout-aware loading skeleton so plan inputs render before the heavy projection finishes
  • Plan documentation — collapsible plan tab sections summarising assumptions and inputs
  • Backend overhaul — new retirement simulation engine, tax bucket columns, consolidated goal migrations, and a dedicated RetirementPlan DTO

AI Assistant Improvements

  • Inline CSV import — the assistant now infers column mappings, parse config, and symbol translations, and the app drives the parse → validate → import pipeline inline in chat using the same review grid as the manual wizard, with bulk skip / unskip / force-import actions
  • Health Center tool (get_health_status) — the assistant can read your portfolio’s health issues, explain what each one means, and guide you to the fix
  • Cash balances tool (get_cash_balances) — per-account, per-currency cash positions
  • Attachments persisted across the session — CSV, image, and PDF attachments stay available for the active session in memory, with bounded session caches and redaction of persisted CSV content
  • Polished UI — attachment chips, continuation loader, activity confirmation, compact tool-card display mode, and a redesigned tool fallback as a collapsible one-liner
  • Better activity workflows — improved record-activity prompting (account / date), expanded tool access groups, and graceful per-account handling of CSV validation failures

Symbol Mapping Validation

The Market Data tab now validates each symbol in real time against the selected provider — Yahoo Finance, Börse Frankfurt, and any custom provider — with a debounced spinner → green check or red error icon. preferred_provider is threaded through the full stack so the validation hits the exact provider configured per row, and a non-blocking toast warns if you save with invalid mappings.

Custom Market Data Providers

  • Redesigned editor with click-to-map — the provider settings editor now shows a live preview pane of the fetched response next to your mapping fields; click any value (price, date, OHLCV, etc.) in the preview to instantly bind it to the matching field instead of typing CSS selectors or JSON paths by hand
  • Self-hosted / private-network URLs — the SSRF-style URL gate has been dropped; you can now point custom providers at localhost, LAN IPs, or any internal endpoint
  • OHLCV mapping — open / high / low / volume paths supported across models, storage, templates, preview, and runtime
  • ISO 8601 + Excel date detection — automatic detection of ISO datetimes and Excel day serials in scraped responses
  • Preview / runtime parity — shared browser-like headers, redirect handling, and template expansion ({FROM} / {TO} / {currency}) so providers that test green also work at sync time

Health Center

  • Negative balance details — per-account first-negative date, cash balance, investment value, and a likely cause (missing transfer, missing buy, etc.); CASH accounts that go negative now show INFO instead of ERROR
  • FX integrity affected pairs — the detail drawer now lists each affected currency pair (e.g. EUR → USD) instead of just a count
  • Timezone-aware staleness — price staleness now uses the asset’s exchange MIC for timezone calculations

Activities & Transfers

  • Link existing transfer activities — select two existing external transfers (one IN + one OUT) in the activity datagrid and click Link to retroactively pair them, with a confirmation dialog that warns on currency mismatch, amount drift > 1%, or date drift > 7 days
  • Transfer unlink flow — unlink linked transfer pairs from the activity grid with confirmation
  • Transfer In cost basis edit — editing an external Transfer In with securities now pre-populates the cost basis field instead of failing validation
  • Securities transfers display — activity grid amounts for transfers now show qty × price instead of stale stored amounts
  • DRIP amount inference — DRIP rows without an amount now compute it from price × quantity

Holdings & Dashboard

  • Hide expired options toggle — global Holdings filter (and mobile filter sheet) to hide expired option holdings; expired options are also filtered out at the holdings service layer and from the assets settings view
  • Top holdings widget — now shows the top 7 holdings (up from 5), with a persisted Symbol vs Name display choice and truncation for long names
  • Account snapshot history — new history tab for account snapshots
  • ISIN on asset profile — ISIN is now shown in the About tab and editable in the General tab of the edit sheet, persisted under metadata.identifiers.isin without clobbering other metadata
  • Dashboard performance % — dashboard percentage now matches the account page

Bug Fixes

  • Symbol quote currency — fixed crypto/FX resolution for assets like BTC quoted in EUR; the resolver now respects explicit quote-currency context and recognises CRYPTOCURRENCY instrument labels (#814)
  • Sell edit holdings — fixed incorrect holdings warning when editing a sell (#861)
  • Avg cost overwriting today’s price — manual holdings no longer have today’s quote overwritten by avg cost (#846)
  • Holding weights for expired options — corrected weight calculation when expired options are present
  • FX rate direction hint — clarified FX rate direction in the activity form
  • History chart Y-axis — material portfolio moves keep zero-context while low-volatility ranges stay readable
  • Manual activity duplicate saves — fixed
  • Mobile activity update validation — tightened
  • Mobile activity asset link guard — fixed hasAsset guard on the mobile activity table
  • Mobile chart drag — chart scrubbing on asset profile, performance, and income history charts no longer triggers page swipes
  • Mobile device sync pairing — pairing dialog width fixed on mobile
  • Activity asset identity edge cases — fixed
  • CSV import asset review timeoutpreview_import_assets and check_activities_import now allow up to 10 minutes for large Options imports instead of hitting the global 2-minute / 5-minute timeout
  • Asset (de)activation on close/reopen — assets are now deactivated when positions close and reactivated when they reopen, with errors propagated correctly
  • Metal symbols with weight suffix — Metal Price API now supports weight-suffixed metal symbols using the exact troy ounce constant
  • AI health tool friendlinessget_health_status payload simplified for LLM consumption
  • Sync replay — legacy goal and allocation payloads are migrated on sync replay; sync table rebase fixed
  • FX valuation parsing — hardened
  • Connect excluded sync copy — clarified copy for excluded Connect accounts
  • Docker Compose — fixed auth hash escaping in compose env (#865)
  • AI CSV review — hardened review grid against stale state, account validation failures, and stale import summaries; live import session caches are bounded so old tool calls cannot grow memory unbounded

Infrastructure & Performance

  • rust-toolchain.toml added to lock the Rust version across contributors and CI
  • Claude Code hooks added to run CI checks before commit / push
  • Decoupled retirement dashboard loading states for faster perceived responsiveness
  • Lighter risk-lab outcome calculations and delayed sensitivity maps
  • Foreground sync paused on desktop while the window is unfocused
  • Improved device sync liveness and pairing safety across desktop and web
  • Bumped to version 3.3.0