{"id":"EIP-1328","name":"WalletConnect URI Format","status":"Final","chain":"both","category":{"id":"onboarding","name":"Onboarding & Access","description":"Getting users into web3 without friction"},"journeyStages":[{"id":"discovery","name":"Discovery & Connection","description":"Finding and connecting wallet to dApp"}],"uxImpact":"QR codes and deep links connect mobile wallets to desktop dApps via standardized URI format. Design implications: generate scannable QR codes from wc: URIs, design mobile-friendly deep link buttons that open wallet apps directly, show connection status with pairing expiration timers, handle both WalletConnect v1 (bridge-based) and v2 (relay-based) protocols. Design decisions: choose QR code size and error correction level for reliable scanning, decide whether to show raw URI for manual copy, design timeout and retry flows when relay connection fails, consider showing which relay/bridge is being used for transparency.","hasDetailedContent":true,"content":{"id":"EIP-1328","summary":"EIP-1328 defines the WalletConnect URI format - the QR code that connects your mobile wallet to desktop dApps. When you scan a QR code to connect, you're scanning a URI that contains encrypted connection details. This standard ensures any WalletConnect-compatible wallet can scan any dApp's QR code.","applicability":{"whenToUse":["Your product addresses: no standard way to connect mobile wallet to desktop.","Your users couldn't use preferred wallet.","The flow should deliver: universal QR code format works with any compatible wallet.","Connect flows must list wallets with names, icons, and explicit user choice."],"whenToAvoid":["Minimum 200x200px, offer \"enlarge\" option.","Detect mobile and show wallet list with deep links.","Show countdown and auto-refresh QR before expiry.","Wallet or chain support is fixed and users cannot choose providers."]},"designerTakeaways":["You can design UI that delivers universal QR code format works with any compatible wallet.","You can design UI that delivers any WalletConnect wallet works with any WalletConnect dApp.","You can design UI that delivers scan QR, approve connection, done."],"problemsSolved":[{"problem":"No standard way to connect mobile wallet to desktop","oldWay":"Each wallet had proprietary connection methods","newWay":"Universal QR code format works with any compatible wallet","impact":"critical"},{"problem":"Users couldn't use preferred wallet","oldWay":"DApp only supported specific wallets","newWay":"Any WalletConnect wallet works with any WalletConnect dApp","impact":"high"},{"problem":"Complex pairing process","oldWay":"Manual key exchange, multiple steps","newWay":"Scan QR, approve connection, done","impact":"high"},{"problem":"Security concerns with connection","oldWay":"Unclear what permissions were being granted","newWay":"Encrypted channel, explicit approval in wallet","impact":"medium"}],"uxPatterns":[{"name":"QR Code Connection","description":"Classic WalletConnect flow with QR scanning","mockup":"concept/wallet","userFlow":["User clicks \"Connect Wallet\"","QR code displayed with WalletConnect URI","User opens mobile wallet","Scans QR code","Wallet shows connection request","User approves, connection established"]},{"name":"Mobile Deep Link Connection","description":"One-tap connection on mobile devices","mockup":"concept/wallet","userFlow":["User on mobile browser","Wallet list shown instead of QR","User taps preferred wallet","Deep link opens wallet app","Connection request shown","Approve and return to dApp"]},{"name":"Connection Status","description":"Show pairing progress and state","mockup":"generic/token-approval","userFlow":["QR scanned or deep link opened","Show pairing in progress","Guide user to approve in wallet","Update status as connection proceeds","Show connected state when complete"]},{"name":"Session Management","description":"Show and manage active WalletConnect sessions","mockup":"concept/wallet","userFlow":["User views connected sessions","See all active WalletConnect pairings","View session details and expiry","Disconnect any session","Manage multiple connections"]}],"uiComponents":[{"name":"WalletConnectQR","description":"QR code component for WalletConnect URI","states":["generating","ready","scanned","expired"],"props":["uri","size","onScanned","expiryTime"]},{"name":"ConnectionProgress","description":"Shows pairing status steps","states":["scanning","pairing","approving","connected","failed"],"props":["currentStep","onCancel"]},{"name":"WalletSelector","description":"List of compatible wallets with deep links","states":["idle","loading","selected"],"props":["wallets[]","uri","onSelect"]},{"name":"SessionManager","description":"Manage active WalletConnect sessions","states":["empty","has-sessions"],"props":["sessions[]","onDisconnect","onSwitch"]}],"antiPatterns":[{"pattern":"QR code too small to scan","why":"Mobile cameras struggle with tiny QR codes","instead":"Minimum 200x200px, offer \"enlarge\" option","severity":"high"},{"pattern":"No mobile deep link option","why":"Mobile users can't scan their own screen","instead":"Detect mobile and show wallet list with deep links","severity":"high"},{"pattern":"QR expires without warning","why":"User scans expired QR, nothing happens","instead":"Show countdown and auto-refresh QR before expiry","severity":"medium"},{"pattern":"No connection status feedback","why":"User doesn't know if QR was scanned","instead":"Show progress: scanned → pairing → approving → connected","severity":"medium"},{"pattern":"Can't copy URI for manual connection","why":"Some users prefer pasting into wallet","instead":"Offer \"Copy link\" as alternative to QR","severity":"low"}],"onMonad":[{"aspect":"Chain Support in URI","ethereum":"WalletConnect v2 includes chain ID in session","monad":"Monad chain ID included in WalletConnect session","designImplication":"Ensure Monad chain ID is properly configured in WalletConnect setup"},{"aspect":"Fast Transaction Signing","ethereum":"Transaction approval takes time, user waits","monad":"Sub-second confirmation after approval","designImplication":"Return to dApp quickly after wallet approval"},{"aspect":"Multi-Chain Sessions","ethereum":"WalletConnect v2 supports multiple chains per session","monad":"Can include Monad alongside other chains","designImplication":"Show all connected chains in session info"}],"relatedStandards":[{"id":"EIP-1193","relationship":"WalletConnect provides the transport for EIP-1193 provider API"},{"id":"EIP-6963","relationship":"EIP-6963 handles injected wallets, WalletConnect handles remote"},{"id":"EIP-155","relationship":"Chain ID in WalletConnect ensures transactions go to correct chain"},{"id":"EIP-695","relationship":"eth_chainId called over WalletConnect to verify chain"}]},"sources":[{"label":"Official specification","url":"https://eips.ethereum.org/EIPS/eip-1328","type":"official-spec"},{"label":"Discussion","url":"https://ethereum-magicians.org/search?q=EIP-1328","type":"discussion"}],"urls":{"canonical":"https://www.eipsfordesigners.com/standards/EIP-1328","markdown":"https://www.eipsfordesigners.com/standards/EIP-1328/content.md","agent":"https://www.eipsfordesigners.com/standards/EIP-1328/agent.md","api":"https://www.eipsfordesigners.com/api/standards/EIP-1328","official":"https://eips.ethereum.org/EIPS/eip-1328","discussion":"https://ethereum-magicians.org/search?q=EIP-1328"},"freshness":{"lastReviewed":"2026-04-05","lastUpdated":"2026-04-05"}}