# Connect to Core Mobile

Core Mobile connects to dapps over [WalletConnect](https://walletconnect.network/).
It is **not** an injected wallet: none of the
[extension detection methods](/docs/connect-your-dapp/detect-core) will find
it, and `window.avalanche` does not exist in mobile browsers.

## How the flow works

1. Your dapp displays a WalletConnect pairing — a QR code on desktop, or a
   deep link on mobile.
2. The user scans or taps it and approves the session in Core Mobile.
3. Your dapp gets a session and sends requests (`eth_sendTransaction`,
   `personal_sign`, …) over the WalletConnect relay; each one appears in
   Core Mobile for approval.

## Using Reown AppKit

WalletConnect's client SDK is [Reown AppKit](https://docs.reown.com/appkit/overview)
(the successor to Web3Modal — older guides may still use that name). With the
Wagmi adapter:

```js
import { createAppKit } from '@reown/appkit/react';
import { WagmiAdapter } from '@reown/appkit-adapter-wagmi';
import { avalanche, avalancheFuji } from '@reown/appkit/networks';

// Get a projectId at https://dashboard.reown.com
const projectId = 'YOUR_PROJECT_ID';

const wagmiAdapter = new WagmiAdapter({
  networks: [avalanche, avalancheFuji],
  projectId,
});

createAppKit({
  adapters: [wagmiAdapter],
  networks: [avalanche, avalancheFuji],
  projectId,
  metadata: {
    name: 'Example dapp',
    description: 'Example dapp description',
    url: 'https://example.com',
    icons: ['https://example.com/icon.png'],
  },
});
```

AppKit renders the connection modal; users find Core in the wallet list, or
scan the QR code directly from Core Mobile.

Already using [Wagmi or RainbowKit](/docs/connect-your-dapp/library-guides)?
Both bundle WalletConnect support — configure a `projectId` and Core Mobile
works alongside the extension with no extra code.

## Session behaviour worth knowing

- Sessions survive app restarts, but the relay requires the wallet to come
  online to receive requests — prompt mobile users to open Core when a
  request seems stuck.
- `chainChanged` and `accountsChanged` arrive over the session like their
  injected counterparts; handle them the same way.
