Skip to content

Conversation

@enesozturk
Copy link
Contributor

@enesozturk enesozturk commented Jan 16, 2026

Description

This PR improves the mobile wallet connection experience with several enhancements:

1. Coinbase/Base Wallet EVM Deeplink Support

Added support for Coinbase wallet's native deeplink schema on EVM chains. When users select Coinbase wallet from the wallet list on a mobile device whi
le connected to an EVM network (Ethereum, Base, Polygon, etc.), the app now redirects using cbwallet://miniapp?url={REDIRECT_URL} to open the dApp di
rectly in Coinbase Wallet's in-app browser.

This complements the existing Solana deeplink support (go.cb-w.com/dapp?cb_url=) that was already implemented.

2. Custom Deeplink Wallet UX Improvement

Certain wallets (Phantom, Solflare, Coinbase, Binance) use Universal Links for mobile connections instead of WalletConnect's standard deeplink flow. Pr eviously, when users selected these wallets on mobile:

  • The deeplink would trigger and redirect to the wallet app
  • If the user returned to the browser, they'd see a confusing "Not Detected" screen
  • This was misleading since the wallet isn't meant to be "detected" as an injected provider—it connects via Universal Links

Before: Users saw "Not Detected" with download prompts, which was incorrect and confusing since the connection flow was already in progress in the wallet app.

After: Users now see a purpose-built connecting screen with:

  • Wallet logo and "Continue in {wallet name}" heading
  • "Complete the connection in the wallet app" instruction
  • "Open {wallet name}" button to re-trigger the deeplink if it failed or the user needs to return to the wallet

3. enableCoinbase Support for Headless Mode

Fixed headless mode (useAppKitWallets hook) to properly handle Coinbase wallet connections:

  • When enableCoinbase: true (default): Opens Coinbase web wallet (keys.coinbase.com) via Base Account connector
  • When enableCoinbase: false: Uses deeplinks to open Coinbase in-app browser

The fix involves a fallback connector lookup by wallet ID via explorerId, which allows API wallets (without pre-populated connectors) to find the cor rect connector.

4. Namespace-Aware Custom Deeplink Validation

isCustomDeeplinkWallet() now validates wallet-chain combinations to prevent showing custom deeplink UI for unsupported chains:

Wallet Supported Chains
Phantom Solana only
Solflare Solana only
Coinbase Solana and EVM
Binance Bitcoin only

Changes Summary

File Change
packages/controllers/src/utils/MobileWallet.ts Added evmDeeplink to Coinbase config, namespace-aware isCustomDeeplinkWallet(), enableCoinbase check in deeplink redirect
packages/controllers/exports/index.ts Exported MobileWalletUtil
packages/controllers/exports/react.ts Fixed headless connect() to find Base Account connector via explorerId fallback
packages/controllers/src/utils/TypeUtil.ts Added 'customDeeplink' to Platform type
packages/controllers/src/controllers/OptionsController.ts Added setEnableCoinbase setter
packages/appkit/src/client/appkit-base-client.ts Initialize enableCoinbase state
packages/scaffold-ui/src/partials/w3m-connecting-wc-custom-deeplink/ New partial for custom deeplink wallet UI
packages/scaffold-ui/src/partials/w3m-connecting-header/index.ts Added customDeeplink case in generateTabs
packages/scaffold-ui/src/views/w3m-connecting-wc-view/index.ts Detect and render custom deeplink wallets with namespace validation
packages/controllers/tests/utils/MobileWallet.test.ts Added tests for new functionality and namespace validation

Type of change

  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • Code in this PR is covered by automated tests (Unit tests, E2E tests)
  • My changes generate no new warnings
  • I have reviewed my own code
  • I have filled out all required sections
  • I have tested my changes on the preview link
  • Approver of this PR confirms that the changes are tested on the preview link

Note

Improves mobile connection flows and headless behavior.

  • Adds Coinbase EVM deeplink (cbwallet://miniapp) and refines Solana/BTC deeplinks with enableCoinbase gating in MobileWalletUtil; exports utility
  • Introduces customDeeplink platform and new UI (w3m-connecting-wc-custom-deeplink) with header/tab support; w3m-connecting-wc-view detects wallets via isCustomDeeplinkWallet() (namespace-aware)
  • Wires enableCoinbase into OptionsController and initializes it in appkit-base-client; adds lab config flag-no-coinbase and menu entry
  • Fixes headless connect() to fall back to connectors by explorerId (e.g., open Coinbase web wallet via Base Account), and defaults namespace to active chain
  • Updates types (Platform), tests for deeplink behavior and detection across Solana/EVM/Bitcoin

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

enesozturk and others added 2 commits January 16, 2026 15:34
When users select Coinbase wallet from the all wallets list on mobile
for EVM chains, use the cbwallet://miniapp?url={REDIRECT_URL} deeplink
schema to open the Base app's in-app browser.

This extends the existing Coinbase deeplink support which only worked
for Solana to also work for EVM chains.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
For wallets that use Universal Links instead of WalletConnect deeplinks
(Phantom, Solflare, Coinbase, Binance), show a proper connecting UI
with "Continue in {wallet name}" message and an "Open" button to retry
the deeplink, instead of showing "Not Detected".

Changes:
- Add isCustomDeeplinkWallet() helper to MobileWalletUtil
- Export MobileWalletUtil from controllers package
- Add 'customDeeplink' Platform type
- Create w3m-connecting-wc-custom-deeplink partial
- Update w3m-connecting-wc-view to detect and show custom deeplink UI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@changeset-bot
Copy link

changeset-bot bot commented Jan 16, 2026

⚠️ No Changeset found

Latest commit: 6502848

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link

vercel bot commented Jan 16, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
appkit-basic-html Ready Ready Preview, Comment Jan 19, 2026 1:40pm
appkit-demo Ready Ready Preview, Comment Jan 19, 2026 1:40pm
appkit-gallery Ready Ready Preview, Comment Jan 19, 2026 1:40pm
appkit-headless-sample-app Ready Ready Preview, Comment Jan 19, 2026 1:40pm
appkit-laboratory Ready Ready Preview Jan 19, 2026 1:40pm
10 Skipped Deployments
Project Deployment Review Updated (UTC)
appkit-basic-example Ignored Ignored Jan 19, 2026 1:40pm
appkit-basic-sign-client-example Ignored Ignored Jan 19, 2026 1:40pm
appkit-basic-up-example Ignored Ignored Jan 19, 2026 1:40pm
appkit-ethers5-bera Ignored Ignored Jan 19, 2026 1:40pm
appkit-nansen-demo Ignored Ignored Jan 19, 2026 1:40pm
appkit-vue-solana Ignored Ignored Jan 19, 2026 1:40pm
appkit-wagmi-cdn-example Ignored Ignored Jan 19, 2026 1:40pm
ethereum-provider-wagmi-example Ignored Ignored Jan 19, 2026 1:40pm
next-wagmi-solana-bitcoin-example Ignored Ignored Jan 19, 2026 1:40pm
vue-wagmi-example Ignored Ignored Jan 19, 2026 1:40pm

Request Review

@github-actions
Copy link
Contributor

github-actions bot commented Jan 16, 2026

Visual Regression Test Results ✅ Passed

⚠️ 15 visual change(s) detected

Chromatic Build: https://www.chromatic.com/build?appId=6493191bf4b10fed8ca7353f&number=687
Storybook Preview: https://6493191bf4b10fed8ca7353f-raxwmlgejw.chromatic.com/

👉 Please review the visual changes in Chromatic and accept or reject them.

@enesozturk enesozturk changed the title fix: /coinbase mobile deeplink refactor: base wallet deeplink support & improve custom deeplink ux Jan 16, 2026
@github-actions
Copy link
Contributor

github-actions bot commented Jan 16, 2026

Warnings
⚠️

🌐 Non-company domain introduced (host: go.cb-w.com) in packages/controllers/src/utils/MobileWallet.ts (line 23): https://go.cb-w.com

Generated by 🚫 dangerJS against 6502848

@github-actions
Copy link
Contributor

github-actions bot commented Jan 16, 2026

📦 Bundle Size Check

All bundles are within size limits

📊 View detailed bundle sizes

> @reown/appkit-monorepo@1.7.1 size /home/runner/work/appkit/appkit


> size-limit

@reown/appkit - Main Entry
Size limit:   80 kB
Size:         75.39 kB with all dependencies, minified and gzipped
Loading time: 1.5 s    on slow 3G
Running time: 184 ms   on Snapdragon 410
Total time:   1.7 s
@reown/appkit/react
Size limit:   235 kB
Size:         233.47 kB with all dependencies, minified and gzipped
Loading time: 4.6 s     on slow 3G
Running time: 357 ms    on Snapdragon 410
Total time:   5 s
@reown/appkit/vue
Size limit:   80 kB
Size:         75.39 kB with all dependencies, minified and gzipped
Loading time: 1.5 s    on slow 3G
Running time: 190 ms   on Snapdragon 410
Total time:   1.7 s
@reown/appkit-scaffold-ui
Size limit:   220 kB
Size:         213.57 kB with all dependencies, minified and gzipped
Loading time: 4.2 s     on slow 3G
Running time: 247 ms    on Snapdragon 410
Total time:   4.5 s
@reown/appkit-ui
Size limit:   500 kB
Size:         13.16 kB with all dependencies, minified and gzipped
Loading time: 258 ms   on slow 3G
Running time: 93 ms    on Snapdragon 410
Total time:   350 ms

@github-actions
Copy link
Contributor

github-actions bot commented Jan 16, 2026

Coverage Report

Status Category Percentage Covered / Total
🔵 Lines 78.6% 39474 / 50216
🔵 Statements 78.6% 39474 / 50216
🔵 Functions 76.26% 4249 / 5571
🔵 Branches 86.71% 9606 / 11078
File Coverage
File Stmts Branches Functions Lines Uncovered Lines
Changed Files
packages/appkit/src/client/appkit-base-client.ts 73.1% 85.58% 76.69% 73.1% 184-190, 210, 223-226, 229, 241-242, 248-249, 252, 261, 308-309, 355-356, 394-395, 397-398, 403-404, 485-486, 522-528, 599-600, 622-637, 640, 674-675, 678, 719-723, 730-731, 734-735, 740-741, 752-775, 784-785, 802-822, 826-847, 850-876, 879-885, 888-894, 897-903, 906-912, 915-925, 928-934, 937-944, 958-967, 970-976, 979-980, 983-984, 1003-1004, 1027-1067, 1074-1086, 1092-1119, 1122-1132, 1164-1165, 1190-1191, 1196, 1211-1227, 1241, 1245-1253, 1284-1285, 1304-1307, 1311-1312, 1314-1315, 1349-1351, 1355-1376, 1381-1382, 1390-1391, 1393-1394, 1488-1489, 1501-1502, 1507, 1530-1535, 1582, 1603-1604, 1613, 1615-1631, 1636, 1682-1683, 1695-1706, 1752-1765, 1810, 1816-1820, 1841-1856, 1859-1860, 1886-1889, 1925-1944, 1976, 2019-2020, 2026-2052, 2273-2274, 2311-2312, 2315-2316, 2332-2335, 2338-2339, 2359-2360, 2363-2364, 2385, 2406-2407, 2410-2417, 2421-2422, 2436, 2444, 2463-2464, 2470-2471, 2502-2507, 2525-2526, 2529-2530, 2577-2578, 2649-2650, 2653-2654, 2657-2660, 2663-2664, 2667-2668, 2671-2672, 2675-2676, 2679-2683, 2692-2701, 2710-2721, 1374
packages/controllers/exports/index.ts 100% 100% 100% 100%
packages/controllers/exports/react.ts 86.76% 89.61% 46.15% 86.76% 70-79, 100-108, 115-122, 145, 518, 520-526, 543-544, 137-163, 418-546
packages/controllers/src/controllers/OptionsController.ts 88% 98.43% 55.42% 88% 241, 270-271, 323, 327, 389-392, 396-399, 403-406, 410-413, 464, 368, 459
packages/controllers/src/utils/MobileWallet.ts 99.01% 94.11% 100% 99.01% 61
packages/scaffold-ui/src/partials/w3m-connecting-header/index.ts 88.63% 89.47% 66.66% 88.63% 22-23, 50-51, 33
packages/scaffold-ui/src/partials/w3m-connecting-wc-custom-deeplink/index.ts 21.73% 100% 0% 21.73% 32-48, 52-87, 91-104, 86
packages/scaffold-ui/src/partials/w3m-connecting-wc-custom-deeplink/styles.ts 100% 100% 100% 100%
packages/scaffold-ui/src/views/w3m-connecting-wc-view/index.ts 71.42% 63.93% 66.66% 71.42% 64-65, 86, 98-99, 108, 119-120, 122, 151-153, 156-169, 185-186, 205-206, 214-215, 218, 229, 233-234, 245, 247, 268-282, 77-264
Generated in workflow #16744 for commit 6502848 by the Vitest Coverage Report Action

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

- Add setEnableCoinbase setter to OptionsController
- Initialize enableCoinbase state during AppKit setup
- Add enableCoinbase check to mobile deeplink redirect for Coinbase
- Fix headless connect() to find Base Account connector via explorerId
  for API wallets (matches headful behavior)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

enesozturk and others added 2 commits January 19, 2026 14:48
- Add customDeeplink case to generateTabs in w3m-connecting-header
- Update isCustomDeeplinkWallet to validate wallet-chain combinations:
  - Phantom/Solflare: Solana only
  - Coinbase: Solana and EVM only
  - Binance: Bitcoin only
- Update tests for namespace-aware isCustomDeeplinkWallet

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
enesozturk and others added 2 commits January 19, 2026 15:26
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

…lflare

- Phantom supports Solana, EVM, and Bitcoin (doesn't support WalletConnect)
- Solflare only supports Solana, add namespace check in handleMobileDeeplinkRedirect
- Update tests accordingly

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@enesozturk enesozturk enabled auto-merge January 19, 2026 13:45
@enesozturk enesozturk added this pull request to the merge queue Jan 19, 2026
github-merge-queue bot pushed a commit that referenced this pull request Jan 19, 2026
…5479)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 19, 2026
@enesozturk enesozturk added this pull request to the merge queue Jan 19, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 19, 2026
@enesozturk enesozturk added this pull request to the merge queue Jan 19, 2026
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 19, 2026
@0xmkh 0xmkh merged commit 61fea82 into main Jan 19, 2026
45 checks passed
@0xmkh 0xmkh deleted the fix/coinbase-mobile-deeplink branch January 19, 2026 15:19
@github-actions github-actions bot locked and limited conversation to collaborators Jan 19, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants