New Features
Custom Market Data Providers (Scrapers)
Fetch price data from any website or API. Define custom scraper-based providers with
CSS selectors or JSON paths to pull quotes from sources not covered by built-in
providers. Assign custom providers to individual assets or use them as exchange
rate sources. Full CRUD management UI in Market Data settings. Includes SSRF
protection, redirect blocking, and provider priority ordering.
Revamped CSV Import
The CSV import wizard has been substantially rebuilt:
- ISIN support — resolve assets by ISIN, not just ticker symbols
- Non-UTF-8 encoding detection — automatically transcodes files in other
encodings - Fallback columns — map multiple CSV columns to a single field with
priority - Sign inference — automatically detect buy/sell from signed amounts
- Skip rows — mark individual rows to skip before importing
- Per-row force import — bypass duplicate detection for specific rows
- Subtype display — see activity subtypes (DRIP, etc.) during review
- Grouped template selector — templates organized by broker
- Wealthsimple template — built-in support for Wealthsimple exports
- Smart defaults — auto-switch template when changing accounts
- Concurrent symbol resolution — significantly faster asset lookups
- Currency-aware resolution — correctly resolves exchange suffixes for
non-USD assets - Event-driven validation — real-time feedback as you map columns
- Mark Custom assets — mark individual or all unresolved symbols as custom
assets during import - Asset review step for holdings import — review and resolve unrecognized
assets before importing holdings CSV data
Income Page Improvements
- Account filter — filter income history by account, with mobile-friendly
drawer - "By Account" stacked chart — new chart view showing income broken down by
account - Improved stacked bar chart rendering and Y-axis scaling
AI Assistant Enhancements
- File attachments — attach CSV, images, and PDF files to your AI
conversations - History windowing — prevents context overflow in long conversations
- Vision capability gating for image analysis
Market Data Improvements
- Boerse Frankfurt provider rewrite — rebuilt using TradingView UDF API for
more reliable German market data - Metal Price API historical quotes — precious metals now have full price
history, not just spot prices - Aquis Exchange (XAQE) added to the exchange registry
- MarketData.app real-time supplement — current-day candles now include the
latest real-time price - BF fallback for ISIN-only equities — assets with only an ISIN and no
exchange MIC can now resolve via Boerse Frankfurt - Periodic market data sync scheduler — quotes refresh automatically on a
schedule - Relaxed Yahoo rate limits — burst of 10 requests, up to 2,000/min for
faster syncs - Renamed "Refetch quotes" to "Refetch price history" in asset tables for
clarity
Bug Fixes
- Expired options handling — expired options now show zero valuation with a
UI badge; added a confirm action for expiry - OCC options — fixed duplicate asset creation when selling OCC options;
corrected fallback key format and match priority - Valuation accuracy — fixed days being skipped when an asset has partial
quote coverage; restored full-gap skip while allowing partial gaps - Dashboard — correct performance display for accounts with negative start
value; exclude null-return accounts from group weighted-average; fixed nested
account rows always showing a secondary metric line - Contribution limits — internal transfers from outside a limit's scope now
correctly count as contributions; page is now responsive on mobile - DRIP dividends — added price and quantity fields to dividend form for DRIP
subtype - Broker-synced accounts — fixed chart marker clicks and holdings editing
- Net worth — fall back to display code when asset name is empty
- Fallback quotes — fixed income amounts being incorrectly used as asset
prices - Precious metals — restored proper domain split between market metals and
physical precious metals - Future activities — allow future manual activity dates on web
- Duplicate menu item — removed duplicate "Check for update" menu entry
- Activity notes — fixed missing serde alias for notes field on activity
updates - CSV import price reconciliation — correctly reconcile unit price when CSV
amount disagrees with qty × price - Migration cleanup — added safeguards to prevent incorrect deletion of
broker quotes during income quote cleanup - Custom scraper errors — custom scraper failures no longer mask real
provider errors - Activity grid amounts — correctly compute amount as qty × price for DRIP
and asset-backed activity subtypes; rounded auto-computed amounts - DataGrid column visibility — column visibility toggle now applies without
requiring a page reload - Import asset resolutions — new-asset resolutions now carry forward
correctly; fixed stale mapping overwrites - Duplicate badge styling — duplicates now show a warning badge instead of
error; removed placeholder TICKER text - Mobile charts — fixed chart scrubbing interactions and interval selector
sizing on mobile
Infrastructure & Performance
- Node.js upgraded from 20 to 24 LTS
- Concurrent symbol resolution during import (up to 10 parallel lookups)
- Deduplicated provider quote-currency lookups during validation and sync
- Improved Docker deployment auth setup documentation
- Addon archive path traversal security fix
- DataGrid re-rendering fix when columns change dynamically