Skip to main content

Overview

WalletConnect integration lets your end-users connect their Dynamic embedded wallet to any WalletConnect-compatible dApp. Users scan a QR code (or paste a URI) from a dApp, approve the session, and can then sign transactions and messages directly from your app. This turns your app into a full-featured wallet that works across the web3 ecosystem.
This feature supports EVM and Solana embedded wallets.

Prerequisites

  • Dynamic SDK initialized with a Reown Project ID (see Quickstart)
  • User authenticated (see Authentication)
  • An EVM or Solana embedded wallet created (see Wallet Creation)
  • Camera permission in AndroidManifest.xml for QR scanning:
  • QR scanning dependencies in build.gradle.kts:

How It Works

  1. User opens a dApp on desktop or another device and clicks “Connect Wallet”
  2. The dApp shows a WalletConnect QR code
  3. User scans the QR code (or pastes the wc: URI) in your app
  4. Your app shows a session proposal with the dApp’s details and requested chains
  5. User approves or rejects the connection
  6. Once connected, signing requests from the dApp appear as approval dialogs in your app
  7. User approves or rejects each request

Setup

1. Configure the Reown Project ID

Pass your Reown (formerly WalletConnect) project ID when initializing the SDK. Get one at cloud.reown.com.

2. Add the Global Listener

The WcGlobalListener is a Composable that handles the entire WalletConnect lifecycle: initialization, session proposals, signing requests, and disconnection events. Place it at the root of your app so it can show approval dialogs from any screen.

3. Implement the WcGlobalListener

This is the full implementation. It auto-initializes WC when the user logs in and shows dialogs for session proposals and signing requests.

4. Build the WalletConnect Screen

This screen provides the UI for scanning QR codes, pasting URIs, and managing active sessions.

5. Build the QR Scanner

The QR scanner uses CameraX and ML Kit Barcode Scanning to detect WalletConnect QR codes.

WalletConnect API Reference

WalletConnectModule

Properties & Flows

Data Models

Best Practices

  • Place WcGlobalListener at the app root so session proposals and signing requests are handled regardless of which screen the user is on.
  • Wait for both auth token and initializedChanges before calling wc.initialize() — the Kotlin SDK requires both the user to be authenticated and the internal WebView to be ready.
  • Show clear approval UIs — display the dApp name, URL, and requested chains so users can make informed decisions.
  • Handle disconnections gracefully — collect onSessionDelete and update your UI accordingly.

Security

When users connect to third-party dApps, always encourage them to verify the dApp URL and details shown in the session proposal before approving. For enhanced security, Dynamic integrates with Blockaid for transaction simulation on the web SDK — consider warning users about unfamiliar dApps on mobile.

Next Steps

Last modified on April 3, 2026