Skip to content

chore(release): Re-land v0.9.3 release#3349

Merged
ca333 merged 66 commits intomainfrom
dev
Nov 7, 2025
Merged

chore(release): Re-land v0.9.3 release#3349
ca333 merged 66 commits intomainfrom
dev

Conversation

@CharlVS
Copy link
Copy Markdown
Collaborator

@CharlVS CharlVS commented Nov 3, 2025

Blocked on currently pending issues/PRs. Deadline of Tuesday, 4 November.

Komodo Wallet v0.9.3 Release Notes

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, and extensive optimisations that reduce RPC usage while improving responsiveness across all platforms.

🚀 New Features

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

⚡ Performance Enhancements

🐛 Bug Fixes

🔒 Security & Compliance

💻 Platform-Specific Changes

All Platforms

macOS

Linux

Windows

iOS

Web

Docker & DevOps

🔧 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

Analytics & Monitoring

Developer Experience

Code Quality

📚 Documentation

⚠️ 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:

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.


Note

Updates v0.9.3 changelog, adjusts CI for desktop builds (macOS bundle ID, disable codesigning on PRs), hardens web WASM validation, ignores generated KDF binaries, bumps SDK submodule, and fixes macOS app data path in tests.

  • Docs:
    • Overhaul CHANGELOG.md for v0.9.3 with expanded features, fixes, and platform notes.
  • CI/CD:
    • /.github/workflows/desktop-builds.yml: change macOS bundle-id to com.komodo.wallet; disable macOS code signing on PR builds via env flags.
    • .github/actions/validate-build/action.yml: replace fragile WASM file check with glob-based discovery and targeted directory listings; echo found files.
  • Repo:
    • .gitignore: ignore web/kdf/kdf/bin/ generated binaries; keep dist/ ignored.
    • sdk: update submodule to 61a4170.
  • Tests:
    • test_integration/runners/app_data.dart: update macOS app data container path to com.komodo.wallet.

Written by Cursor Bugbot for commit cefa1e6. This will update automatically on new commits. Configure here.

Summary by CodeRabbit

  • New Features

    • Compact trade-amount label component; four new English messages (no-swap, no-cross-network, NFT disabled tooltip, empty private-keys).
    • iOS photo-library permission prompt for QR imports.
  • Bug Fixes

    • Avoids balance spinners and extraneous network calls when unauthenticated; more resilient order fetching with retries and graceful no-orders handling.
  • Performance Enhancements

    • Reduced duplicate swap-coin processing and refined max-volume/balance flows.
  • UI/UX Improvements

    • Empty-state CTAs navigate to maker orders; clearer minimum-volume/error messages; spinner shown while loading maker volume; NFT menu forcibly disabled with tooltip.
  • Chores

    • Settings storage back-compat and legacy writes; build validation and ignore-list updates; macOS bundle identifier updated.

smk762 and others added 30 commits October 27, 2025 18:07
original widget was made as a text input field, delaying updates to post frame updates to avoid state update conflicts.

it is currently being used as a label, so no such complications are necessary.

CoinTradeAmountFormField has no references and can be removed
…ty (#3328)

- Propagate errors from best_orders instead of returning empty results
- Treat P2P 'No response from any peer' (including wrapped Exception) as no orders
- Add debug-only failure simulator toggled via kSimulateBestOrdersFailure

feat(ui): CTA to Maker when no orders; contextual localized messages

- Taker: show CTA when no swap offers available
- Bridge: show CTA when no cross-network routes exist
- Add locale keys: dexNoSwapOffers, bridgeNoCrossNetworkRoutes
…logging

chore(settings): add logging and avoid silent skipping
* fix ci

* add wasm libs for CI

* cp wasm

* echo ls kdf bins

* fix typo

* rm ls

* fix typo

* fix macOS CI build

* cp wasm files manually

* update sdk

* update sdk

* update sdk

* use komodo earth libs

* build(web): ignore KDF generated binaries and remove accidentally committed files under web/kdf/kdf/bin

---------

Co-authored-by: CharlVS <77973576+CharlVS@users.noreply.github.com>
no references to the DI, but good to fix for consistency & to avoid any surprises down the line
This reverts the changes from 9900372 that
attempted to show unconfirmed transactions first. The previous approach
caused transactions to appear in a chaotic order during synchronization,
creating confusion until all transactions are fully loaded.
smk762
smk762 approved these changes Nov 5, 2025
@smk762 smk762 self-requested a review November 5, 2025 11:47
DeckerSU and others added 5 commits November 5, 2025 17:26
…n and updating share method to use SharePlus with appropriate parameters for text and compressed files.
…gin and correct import path for app configuration.
fix(ios): fix download logs dialog not opening on iOS
feat: add photo library usage description to Info.plist for QR code i…
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f439819 and ef2925e.

📒 Files selected for processing (2)
  • ios/Runner/Info.plist (1 hunks)
  • lib/services/file_loader/mobile/file_loader_native_ios.dart (4 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.dart

📄 CodeRabbit inference engine (AGENTS.md)

**/*.dart: Run flutter analyze and resolve issues before committing code
Format Dart code with dart format (on changed files) before committing

Files:

  • lib/services/file_loader/mobile/file_loader_native_ios.dart
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (9)
  • GitHub Check: Build Mobile (Android)
  • GitHub Check: build_and_preview
  • GitHub Check: Build Desktop (macos)
  • GitHub Check: unit_tests
  • GitHub Check: Build Desktop (linux)
  • GitHub Check: Build Desktop (windows)
  • GitHub Check: validate_code_guidelines
  • GitHub Check: Test web-app-linux-profile
  • GitHub Check: Test web-app-macos
🔇 Additional comments (2)
ios/Runner/Info.plist (1)

34-35: Photo library permission copy looks correct.

Clear justification for importing QR codes—good addition for App Store privacy review.

lib/services/file_loader/mobile/file_loader_native_ios.dart (1)

50-61: SharePlus migration and metadata look solid.

Nice move to the new SharePlus.instance.share API with explicit filenames, MIME types, and anchor rect—this should give a smoother iOS share sheet experience.

Also applies to: 77-88

Comment on lines +15 to +23
Rect? _getSharePositionOrigin() {
final context = scaffoldKey.currentContext;
if (context == null) return null;

final box = context.findRenderObject() as RenderBox?;
if (box == null) return null;

return box.localToGlobal(Offset.zero) & box.size;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Guard the share origin cast to avoid runtime crashes.

context.findRenderObject() can return a RenderView (or other non-RenderBox) when the keyed context points at the navigator/root overlay. Casting it straight to RenderBox? will throw before the null-check, crashing the share flow on iOS tablets. Bail out when the render object isn’t a RenderBox before computing the rect.

-    final box = context.findRenderObject() as RenderBox?;
-    if (box == null) return null;
+    final renderObject = context.findRenderObject();
+    if (renderObject is! RenderBox) return null;
+    final box = renderObject as RenderBox;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Rect? _getSharePositionOrigin() {
final context = scaffoldKey.currentContext;
if (context == null) return null;
final box = context.findRenderObject() as RenderBox?;
if (box == null) return null;
return box.localToGlobal(Offset.zero) & box.size;
}
Rect? _getSharePositionOrigin() {
final context = scaffoldKey.currentContext;
if (context == null) return null;
final renderObject = context.findRenderObject();
if (renderObject is! RenderBox) return null;
final box = renderObject as RenderBox;
return box.localToGlobal(Offset.zero) & box.size;
}
🤖 Prompt for AI Agents
In lib/services/file_loader/mobile/file_loader_native_ios.dart around lines 15
to 23, the code currently casts context.findRenderObject() directly to RenderBox
which can throw if the render object is a RenderView or any non-RenderBox;
update the function to first capture the renderObject, check whether it is a
RenderBox (e.g. if (renderObject is! RenderBox) return null), then safely
cast/use it to compute the rect and return the share origin; ensure you do not
perform a direct as RenderBox cast before this type check so the function bails
out safely when the render object is not a RenderBox.

…ys handling (#3375)

* refactor: improve handling of private keys in security settings to prevent state loss during async operations
* debug: private key retrieval and cache
* feat: add handling for empty private keys in security settings to improve user feedback
* feat: clear previously stored private keys to prevent stale data in security settings
* refactor: remove redundant clearing of fetched keys in security settings to streamline error handling
* fix: ensure state preservation by updating private keys within setState in security settings
Copy link
Copy Markdown
Collaborator

@smk762 smk762 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Multi-OS testing completed (including iOS build 23). Testing on https://walletrc.web.app/wallet is also passing, though a couple of commits behind on cf8bdfa.

v0.9.3 contains many valuable improvements wrt performance and UX which are sorely needed.
The only remaining issues are known problems with a solution on the way (most notably ios sleep issues), or otherwise deferable to v0.9.4 (e.g. minor cosmetic issues or UX enhancements which need more review or implementation)

Big thanks to all involved with the strategic planning, code contribution & testing, along with the community members sending us valuable & actionable feedback towards improving and enhancing the Komodo Wallet.

@ca333 ca333 merged commit 50f16bf into main Nov 7, 2025
7 of 13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants