# EIP-1328: WalletConnect URI Format

Source: https://www.eipsfordesigners.com/standards/EIP-1328
Agent brief: https://www.eipsfordesigners.com/standards/EIP-1328/agent.md
Machine-readable JSON: https://www.eipsfordesigners.com/api/standards/EIP-1328
Last reviewed: 2026-04-05
Last updated: 2026-04-05

| Field | Value |
| --- | --- |
| Status | Final |
| Chain | both |
| Category | Onboarding & Access |
| Journey stages | Discovery & Connection |
| Detailed guide | Yes |
| Official specification | https://eips.ethereum.org/EIPS/eip-1328 |
| Discussion search | https://ethereum-magicians.org/search?q=EIP-1328 |

## UX Impact

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.

## 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.

## For Designers

- 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.

## Applicability

### When to Use

- 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.

### When to Avoid

- 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.

## Problems It Solves

### No standard way to connect mobile wallet to desktop

Impact: critical

Old way: Each wallet had proprietary connection methods

New way: Universal QR code format works with any compatible wallet

### Users couldn't use preferred wallet

Impact: high

Old way: DApp only supported specific wallets

New way: Any WalletConnect wallet works with any WalletConnect dApp

### Complex pairing process

Impact: high

Old way: Manual key exchange, multiple steps

New way: Scan QR, approve connection, done

### Security concerns with connection

Impact: medium

Old way: Unclear what permissions were being granted

New way: Encrypted channel, explicit approval in wallet

## Anti-Patterns

### QR code too small to scan

Severity: high

Mobile cameras struggle with tiny QR codes

Instead: Minimum 200x200px, offer "enlarge" option

### No mobile deep link option

Severity: high

Mobile users can't scan their own screen

Instead: Detect mobile and show wallet list with deep links

### QR expires without warning

Severity: medium

User scans expired QR, nothing happens

Instead: Show countdown and auto-refresh QR before expiry

### No connection status feedback

Severity: medium

User doesn't know if QR was scanned

Instead: Show progress: scanned → pairing → approving → connected

### Can't copy URI for manual connection

Severity: low

Some users prefer pasting into wallet

Instead: Offer "Copy link" as alternative to QR

## UI Components

### WalletConnectQR

QR code component for WalletConnect URI
States: generating, ready, scanned, expired
Props: uri, size, onScanned, expiryTime

### ConnectionProgress

Shows pairing status steps
States: scanning, pairing, approving, connected, failed
Props: currentStep, onCancel

### WalletSelector

List of compatible wallets with deep links
States: idle, loading, selected
Props: wallets[], uri, onSelect

### SessionManager

Manage active WalletConnect sessions
States: empty, has-sessions
Props: sessions[], onDisconnect, onSwitch

## On Monad

### Chain Support in URI

Ethereum: WalletConnect v2 includes chain ID in session

Monad: Monad chain ID included in WalletConnect session

Design implication: Ensure Monad chain ID is properly configured in WalletConnect setup

### Fast Transaction Signing

Ethereum: Transaction approval takes time, user waits

Monad: Sub-second confirmation after approval

Design implication: Return to dApp quickly after wallet approval

### Multi-Chain Sessions

Ethereum: WalletConnect v2 supports multiple chains per session

Monad: Can include Monad alongside other chains

Design implication: Show all connected chains in session info

## UX Patterns

### QR Code Connection

Classic WalletConnect flow with QR scanning

User flow:

- 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

Mockup registry key: `concept/wallet` (React UI on the live standard page).

### Mobile Deep Link Connection

One-tap connection on mobile devices

User flow:

- 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

Mockup registry key: `concept/wallet` (React UI on the live standard page).

### Connection Status

Show pairing progress and state

User flow:

- 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

Mockup registry key: `generic/token-approval` (React UI on the live standard page).

### Session Management

Show and manage active WalletConnect sessions

User flow:

- User views connected sessions
- See all active WalletConnect pairings
- View session details and expiry
- Disconnect any session
- Manage multiple connections

Mockup registry key: `concept/wallet` (React UI on the live standard page).

## Related Standards

- EIP-1193: WalletConnect provides the transport for EIP-1193 provider API

- EIP-6963: EIP-6963 handles injected wallets, WalletConnect handles remote

- EIP-155: Chain ID in WalletConnect ensures transactions go to correct chain

- EIP-695: eth_chainId called over WalletConnect to verify chain
