This release delivers significant performance improvements, enhanced analytics capabilities, and a comprehensive overhaul of authentication and wallet management. Key highlights include real-time portfolio streaming, a dual analytics pipeline with persistent queueing, one-click sign-in, Z-HTLC support, SIA support, dynamic coin-type filters, and extensive optimisations that reduce RPC usage while improving responsiveness across all platforms.
🚀 New Features
- Realtime Portfolio Streaming ([@CharlVS], #3253) - Live balance updates throughout the app via
CoinsBlocstreaming, eliminating the need for manual refreshes - One-Click "Remember Me" Sign-In ([@CharlVS], #3041) - Securely cache wallet metadata for instant access with improved post-login routing
- Dual Analytics Pipeline ([@CharlVS], #2932) - Firebase and Matomo integration with persistent event queueing, CI toggles, and comprehensive event tracking
- Z-HTLC Support ([@takenagain], #3158) - Full support for privacy-preserving Hash Time Locked Contracts with configurable activation toggles and optional sync parameters
- Enhanced Feedback System ([@CharlVS], #3017) - Comprehensive feedback portal overhaul with provider plugins, opt-out contact handling, screenshot scrubbing, and analytics integration
- Geo-blocking Bouncer ([@CharlVS], #3150) - Privacy coin restrictions with regulated build overrides for compliance
- Transaction Broadcast Details ([@smk762], #3308) - View transaction details immediately after broadcasting withdrawals
- Market Maker Mobile Improvements ([@takenagain], #3220) - Status indicators and start/stop controls now available in mobile view
- Swap Data Export ([@ca333], #3220) - Copy and export swap data for reference and debugging
- Tendermint Faucet Support ([@takenagain], #3206) - Request test coins for Tendermint-based assets with activation guardrails
- Optional Verbose Logging ([@ca333], #3332) - Configurable logging levels for development and troubleshooting
- SDK Log Integration ([@CharlVS], #3159) - SDK logs now route through the app logger for unified log management
- BASE Token Support ([@smk762], #3354) - Added support for BASE blockchain network tokens in filters and tagging functionality
- F-Droid Metadata ([@DeckerSU], #3381) - Added F-Droid metadata (descriptions, summaries, and localized text) for app store inclusion
- SIA Withdrawal Support ([@smk762], #3400, #3398, #3408) - Full Sia withdrawal flow implementation with preview-then-execute workflow and balance sync improvements for non-streaming assets
- Dynamic Coin-Type Filters ([@CharlVS], #3398) - Derives asset filter list directly from
CoinSubClassso new SDK coin families become selectable without wallet-side changes - Cross-Platform JSON Export ([@smk762], #3348) - Adds
_saveAsJsonFilefor Android, iOS, desktop, and web platforms enabling consistent swap/order export with prettified JSON - Prioritized Coins for users not logged in ([@DeckerSU], #3351) - Priority-based sorting for unauthenticated user asset lists with popular coins (BTC, KMD, ETH, BNB, LTC, DASH, ZEC, DOGE) displayed first for better onboarding
SDK Updates (komodo-defi-sdk-flutter)
This release integrates komodo-defi-sdk v1.0.0-pre.1 with 82 commits bringing substantial improvements:
- Flutter Web WASM Support (SDK#176) - WASM support with OPFS integration and unified storage. The SDK is now Flutter wasm-ready, but will still require some changes for Komodo Komodo wallet which will bring performance improvements.
- Enhanced RPC Coverage (SDK#179, #188, #191) - Trading, orderbook, and Lightning RPC support
- Streaming Infrastructure (SDK#178, #232, #269) - Pubkey and balance watch streams with comprehensive caching
- Multi-Provider Market Data (SDK#145, #224) - CoinPaprika fallback and refined Binance quotes
- Custom Token Storage (SDK#225, #190) - Runtime coin updates integration
- Platform Support (SDK#237, #247) - macOS universal binary and packaging updates
See the full SDK changelog for complete details.
🎨 UI/UX Improvements
- Fiat Value Display ([@takenagain], #3049) - Coin detail pages now show fiat balance for individual addresses
- Withdraw Form Enhancements ([@takenagain], #3274) - Vertical responsive layout, fiat value previews for amount and fee, and alignment improvements
- Loading State Placeholders ([@takenagain], #3134) - Hide asset lists and show placeholders until fiat prices are available for better UX
- Transaction History Ordering ([@CharlVS], #9900372) - Unconfirmed transactions now appear first in the list
- Token Parent Labelling ([@dragonhound], #2988) - Parent coins now tagged as "native" for clearer asset hierarchy
- Trezor Visibility Toggles ([@smk762], #3214) - Password and PIN visibility controls for Trezor authentication
- Market Maker Value Display ([@smk762], #3215) - Fixed bot maker order values display
- Activation Filter Compatibility ([@smk762], #3249) - Only show compatible activation filter options to prevent errors
- Buy Coin List Sorting ([@smk762], #3328) - Market maker buy coin list now sorted with price filters and "add assets" footer
- Keyboard Dismissal ([@takenagain], #3225) - Dismiss keyboard on scroll for fiat and swap inputs
- Mobile Seed Backup Banner ([@takenagain], #3225) - Seed backup banner now visible in mobile view
- Post-Login Navigation ([@smk762], #3262) - Consistent routing to wallet page after login or logout with delayed navigation for Trezor PIN/passphrase entry
- Custom Seed Toggle ([@smk762], #3260) - Hide custom seed toggle unless BIP39 validation fails
- NFT Withdraw QR Scanning ([@smk762], #3243) - QR code scan button added to NFT withdrawal address input
- Consistent Pill Styling ([@dragonhound], #2974) - Applied uniform "swap address" pill style throughout the app
- Thoughtful Scrollbar Disposal ([@dragonhound], #3008) - Improved scrollbar lifecycle management
- Manual Withdraw Confirmation Guard ([@smk762], #3296) - Prompts for confirmation when typed amount matches max balance to avoid accidental full-balance sends; on confirm, switches to Max mode (fee deducted) and retries preview
- Swap Export UI Polish ([@smk762], #3348) - Repositioned export button into pair header block, removed duplicate UUID copy row, and shorter labels to avoid second line
- Password Visibility Simplification ([@smk762], #3388) - Removed timer on password visibility toggle for simpler UX
- Withdrawal Confirmation Copy Fix ([@DeckerSU], #3406) - Fixed typo in English "Confirm Sending" caption
⚡ Performance Enhancements
- RPC Spam Reduction ([@CharlVS], #3253) - Comprehensive SDK-side caching and streaming support drastically reduces redundant RPC calls
- Fiat On-Ramp Debouncing ([@takenagain], #3125) - Reduced API calls on user input changes for smoother fiat amount entry
- Balance Watch Streams (SDK, #178) - Realtime balance updates from SDK eliminate polling
- Pubkey Caching ([@CharlVS], #3251) - Prefer cached pubkeys before RPC across the app with post-swap fetch delays
- Best Orders Optimization ([@smk762], #3328) - Avoid best_orders calls unless on DEX/bridge; fail gracefully and retry
- Activation Patience ([@smk762], #3272) - Await initial activations and avoid duplicated activation tasks with proper parent/child coin sync
🐛 Bug Fixes
- Transaction History Cross-Asset Bleed ([@CharlVS], #3289) - Isolated
TransactionHistoryBlocper-coin to prevent history mixing - Balance Update State Preservation ([@CharlVS], #3253) - Realtime balance updates now preserve coin activation state to avoid turning off the Send button
- Transaction Sorting ([@CharlVS], #3253) - Fixed transaction history list sorting logic
- Dropdown Null Safety ([@cursor Agent], #3050) - Fixed null safety issues in
UiDropdownwidget, preventing app freeze on logout - Legacy Wallet Migration ([@CharlVS], #3207) - Preserve legacy flag, sanitise wallet names, ensure uniqueness, and avoid duplicate imports during migration
- Wallet Coin Restoration ([@takenagain], #3126) - Restore wallet coins for legacy wallet migrations and seed file imports
- Password Length Validation ([@CharlVS], #3141, #3149) - Consistent 128-character password handling across all flows with hardened validation
- Custom Token Import ([@takenagain], #3129) - Check platform in deduplication and correctly update fields; refresh asset list on import
- Precision Loss in Wallet ([@CharlVS], #3123) - Resolved DEX precision regression with comprehensive tests
- Withdraw Form Fixes ([@takenagain], #3274) - Fixed fiat alignment, max value detection, and use signed hex from preview for broadcast
- ZHTLC Activation Toggle ([@smk762], #3283) - Revert toggle on ZHTLC activation config cancel
- Coin Variant Sum ([@smk762], #3317) - Fixed coin variant sum display in dropdowns
- Decimals Precision ([@ca333], #3297) - Added unit tests and fixed decimal handling with proper fiat amount input refactoring
- Trading Bot Improvements ([@takenagain], #3223, #3328) - Remove price URL parameter to default to KDF URL list; add guard against swap button spamming; use
max_maker_volfor spendable balance - Market Maker Dropdown ([@takenagain], #3187) - Fixed sell coin dropdown reverting to previous coin with occasional flickering
- ARRR Reactivation ([@takenagain], #3184) - Fixed ARRR not reappearing in coins list after deactivation and reactivation
- Pubkey Clearing ([@CharlVS], #3144) - Clear pubkeys on wallet change or logout to prevent cross-wallet contamination
- Unban Pubkeys Null Check ([@smk762], #3276) - Avoid null check error on unban_pubkey button press
- Timer Leaks ([@ca333], #3305) - Fixed timer leaks preventing proper cleanup
- SSE Lifecycle ([@ca333], #3313, #3318) - Tie SSE to the auth state lifecycle and remove the SSE package for better stability
- iOS/macOS KDF Reinitialization ([@ca333], #3286) - Proper KDF health check and reinitialisation on iOS/macOS
- Withdrawal Form ([@ca333], #3288) - Fixed withdrawal regression
- KDF Disposal Crash ([@DeckerSU], #3117) - Fixed crash when
KomodoDefiSdkis disposed during periodic fetch - Fiat On-Ramp CSP ([@takenagain], #3225) - Disable overly restrictive CSP with limited platform support; add Komodo and sandbox domains to allowlist
- NFT IPFS Loading ([@takenagain], #3020) - Add IPFS gateway resolution, retry, and fallback to improve NFT image loading
- macOS File Picker ([@CharlVS], #3111) - Show file picker by adding user-selected read-only entitlement
- Settings Version Isolation ([@smk762], #3324) - Isolate version settings in shared_preferences.json for backwards compatibility
- Unconfirmed Transaction Detection ([@takenagain], #3328) - Only consider empty timestamps and confirmations as unconfirmed
- ARRR Autoactivation Guard ([@smk762], #3370) - Bypass ZHTLC coins (ARRR) from auto-activation list if sync params have not been previously set, preventing crash on login
- NFT Page Disable ([@smk762], #3362) - Disable NFT page in sidebar menu to prevent access to non-functional feature with tooltip on hover
- macOS App Icons ([@smk762], #3363) - Fixed incorrect macOS app logo and icons display
- iOS Download Logs Dialog ([@DeckerSU], #3374) - Fix "Download logs" button not opening share dialog on iOS by migrating from deprecated Share API to SharePlus with proper iPad support
- iOS Private Key Retrieval ([@DeckerSU], #3375) - Fix private keys not displaying correctly on iOS due to state loss during async callback execution; improved handling for empty private keys with better user feedback during asset activation
- Import Error Fix ([@smk762], #3371) - Fixed missing import error
- F-Droid Filename Compatibility ([@DeckerSU], [@ca333], #3387, #3393) - Fix F-Droid full description being empty due to Windows-incompatible filename with trailing space
- Linux Window Close Crash ([@DeckerSU], #3339) - Workaround for crash on application exit due to Flutter implicit view removal; added delete-event handler for GTK and removed unused flutter_view pointer
- Transaction History Timestamp Updates ([@takenagain], #3352) - Cache/state entries now update timestamps when refreshed without requiring navigation away
- Sia Balance Sync ([@smk762], #3408) - Fixed balance address/total sync for non-streaming assets with SDK-level
watchPubkeyshint pipeline and burst refresh for immediate balance updates - SIA Private Key Export Exclusion ([@smk762], #3404) - Excludes SIA coins from private key export until hardware support lands
- Null Safety on Taker Swap Init - Improved null safety handling on taker swap initialization
- Better Error Messages - Less vague error messages providing clearer feedback to users
🔒 Security & Compliance
- 128-Character Password Support ([@CharlVS], #3141, #3149) - Increased password length limit to 128 characters with consistent validation across all auth flows
- Pubkey Hygiene ([@CharlVS], #3144, #3251) - Purge cached pubkeys on wallet change, prefer cached pubkeys before RPC, and add post-swap delays
- Geo-blocking Bouncer ([@CharlVS], #3150) - Privacy coin restrictions with FD monitoring and regulated build overrides
- Legacy Wallet Sanitisation ([@CharlVS], #3207) - Sanitise names, preserve flags, and prevent duplicate imports during legacy wallet migration
💻 Platform-Specific Changes
All Platforms
- Flutter 3.35.1 Upgrade ([@CharlVS], #3108) - Updated Flutter SDK with dependency roll and improved roll script
- SDK Submodule Integration ([@takenagain], #3110) - SDK adopted as a git submodule with path overrides and deterministic roll script
macOS
- Production Scheme & Signing ([@DeckerSU], #3185) - Added macOS production scheme and Developer ID Application signing support for standalone distribution
- Universal Binary Support (SDK, #237) - macOS universal binary (Intel + Apple Silicon) support
- Development Team Update ([@DeckerSU], #3177, [@DeckerSU] SDK #239) - Changed development team to production identifier (WDS9WYN969→8HPBYKKKQP)
- KDF Binary Placement (SDK, #247) - Streamlined KDF binary placement and updated signing flow
Linux
- GLib Compatibility ([@DeckerSU], #3105) - Guard
G_APPLICATION_DEFAULT_FLAGSbehind GLib ≥ 2.74 with fallback for older versions - Single-Instance Enforcement ([@CharlVS], #3063) - Enforce single-instance; focus existing window; prevent zombie processes
- Build Script Validation ([@DeckerSU], #3106) - Added GitHub Actions workflow to validate Linux build script
- Window Close Handling ([@DeckerSU], #3339) - Enhanced window close handling with delete-event signal handler; removed unused flutter_view references for cleaner code and stability
Windows
iOS
- FD Monitoring ([@ca333], #3259) - File descriptor monitoring for release mode
- Health Check Integration ([@ca333], #3257) - Added KDF health check with reinitialization support
- Xcode Configuration ([@DeckerSU], #3324) - Added FdMonitor.swift to Xcode project configuration and updated DEVELOPMENT_TEAM identifier
- Build Artifact Cleanup ([@DeckerSU], #3058) - Removed .dgph build artifacts from iOS project
- Ruby Installation Guide ([@takenagain], #3128) - Added Ruby installation step for iOS builds
- Photo Library Usage Description ([@DeckerSU], #3372) - Added required photo library usage description to Info.plist for QR code import functionality to prevent App Store rejection
Android
- F-Droid Support ([@DeckerSU], #3381, #3387, #3393) - Added F-Droid metadata directory with app descriptions, summaries, and localized text files for F-Droid app store inclusion
Web
- WASM Support (SDK, #176) - Flutter Web WASM support with OPFS integration and unified storage implementation
- CDN Disable ([@DeckerSU], #3055) - Add
--no-web-resources-cdnto web build in build.sh
Docker & DevOps
- DevContainer Modernization ([@CharlVS], #3114) - Switched to .docker images and Linux-only devcontainer
- Environment Variable Passing ([@DeckerSU], #3037) - Correct env vars passing to Docker and Dart via --dart-define
- Matomo Validation ([@DeckerSU], #3165) - Added Matomo tracking params validation in build script
- CI Improvements ([@CharlVS], #3167, #3336) - Fix missing secrets, remove duplicate steps; fix CI issues
- Artifact Naming ([@dragonhound], #3181) - Append short commit hash to upload-artifact filenames
- Submodule Updates ([@DeckerSU], #3139) - Clean submodules before update to fix build errors
🔧 Technical Improvements
SDK Integration (komodo-defi-sdk v1.0.0-pre.1)
- RPC Coverage Expansion (SDK#179, #188, #191) - Implemented missing RPCs, including trading-related endpoints and Lightning support
- Message Signing (SDK#198, #231) - HD wallet support for message signing with derivation path; added AddressPath type and refactored to use Asset/PubkeyInfo
- Multi-Provider Market Data (SDK#145, #215) - Support for multiple market data providers with CoinPaprika fallback option
- Custom Token Integration (SDK#225, #190) - Custom token support in coin config manager; integrate komodo_coin_updates into komodo_coins
- Balance & Pubkey Streaming (SDK#178, #232, #262, #269) - Add pubkey watch function similar to balance watch; comprehensive caching and streaming support
- ETH-BASE Support (SDK#254) - Add support for ETH-BASE and derived assets
- Asset Tagging Fixes (SDK#244) - Correct UTXO coins incorrectly tagged as Smart Chain
- ZHTLC Fixes (SDK#227, #264) - ZHTLC activation fixes with optional sync params and sign-out cleanup
- Binance Quote Fixes (SDK#224) - Use per-coin supported quote currency list instead of global cache
- Market Metrics Logging (SDK#223) - Reduce market metrics log verbosity and duplication
- Etherscan URLs (SDK#217) - Fix Etherscan URL formatting
- Sparkline Configuration (SDK#248) - Add configurable sparkline baseline
- Dragon Charts Migration (SDK#164) - Migrate dragon_charts_flutter to monorepo packages
- Trezor Polling (SDK#126) - Poll Trezor connection status and sign out when disconnected
- KDF Version Updates (SDK#218, #237, #249, #241, #247) - Roll KDF to latest releases with checksum updates
- Runtime Fetch Libraries (SDK#280) - Use runtime fetch libraries with updated checksums
- BASE Token Support (SDK#283) - Add support for BASE blockchain network in SDK (related to #3354)
- SDK Execute Withdrawal Workflow ([@CharlVS], #3325) - Uses SDK's
executeWithdrawal()instead of manualsendRawTransaction(), eliminating duplicate transaction signing with proper SDK abstraction and built-in progress tracking - KDF v2.6.0 Update - Updated SDK to use KDF v2.6.0 release with Sia RPC additions and execute/preview workflow improvements
Analytics & Monitoring
- Persistent Event Queue ([@CharlVS], #2932) - Analytics events persist across sessions with a standardised event structure
- CI Analytics Toggles ([@CharlVS], #2932, #3165) - Disable analytics in CI builds with Matomo validation
- NFT Analytics Integration ([@dragonhound], #3202) - Use AnalyticsRepo to enqueue NFT analytics events
- Updated Events ([@CharlVS], #3194) - Update completed events and remove scroll attempt tracking
- Settings Logging ([@takenagain], #3324) - Add logging and avoid silent skipping in settings
Developer Experience
- PR Body Template ([@CharlVS], #3207) - Add PR_BODY.md helper file for CLI editing
- SDK Submodule Management ([@takenagain], #3110) - Deterministic SDK roll script with path overrides
- API Commit Hash Display ([@DeckerSU], #3115) - Fix logging of apiCommitHash to output actual value instead of closure
- Dependency Documentation ([@takenagain], #3128) - Ruby installation guide for iOS/macOS builds
- Optional Verbose Logging ([@ca333], #3332, SDK #278) - Configurable logging levels for debugging
Code Quality
- Null Safety Improvements ([@cursor Agent], #3050) - Fixed null safety issues in UiDropdown widget
- Type Safety ([@ca333], #3279, #3280) - Bound checking, non-nullable type tweaks, explicit enum mapping, defensive array access guards, cast num to int
- Error Propagation ([@smk762], #3328) - Propagate best_orders failures, avoid masking as no liquidity
- Unused Code Cleanup ([@takenagain], #3225) - Remove unused widgets and update enum docs
- Code Formatting ([@CharlVS], #3251) - Run dart format on pubkey cache call-sites and taker delay
- Logging Improvements ([@takenagain], #3328) - Add logging for errors not propagated to UI layer
📚 Documentation
- SDK Changelog Cross-Linking ([@CharlVS], #3172) - Link SDK PRs with short labels and mark SDK items in wallet changelog
- Ruby Installation Guide ([@takenagain], #3128) - Added Ruby installation step for iOS and macOS builds
- SDK Documentation (SDK#201) - Document project and packages for pub.dev release
⚠️ Known Issues
- Full automated test suite remains triaged; manual QA recommended per
docs/MANUAL_TESTING_DEBUGGING.md - Some analytics events may require additional validation on specific platforms
- Large portfolios (>100 assets) may experience slower initial loading times during first activation
🙏 Contributors
This release includes contributions from 11 developers:
- @CharlVS
- @takenagain
- @ca333
- @smk762
- @DeckerSU
- @gcharang
- @TazzyMeister
- @naezith
- Cursor Agent (automated refactoring)
Full Changelog: 0.9.2...0.9.3
For developers building with Komodo DeFi SDK: This release includes komodo-defi-sdk v1.0.0-pre.1 with breaking changes related to streaming APIs and caching behaviour. Review the SDK changelog for migration guidance.
Checksum & VirusTotal Analysis:
| Link | SHA256 |
|---|---|
| komodo-wallet-windows-71169e3cb.zip | 3b00e52bda5d05f9dfbdab31a4e67efe445244268302eabf9130451757857f65 |
| komodo-wallet-linux-71169e3cb.tar.gz | 5b97912daceaccf8e7b42768666e780921bfadf81f2dd44b84c07139f0a8b342 |
| komodo-wallet-web-71169e3cb.tar.gz | 695aeaa9b14ffa3c80e343ca6cedc4be4042f62e60d7f1477d451b464c89236b |
| komodo-wallet-macos-71169e3cb.dmg | 0c064a1e057b92f75c91d6d05c9bf733f8e3e200a0a42767eca20e989f8957e3 |
This release was signed by https://keybase.io/deckersu (GPG fingerprint: FD9A 772C 7300 F4C8 94D1 A819 FE50 4808 62E6 451C).