> For the complete documentation index, see [llms.txt](/llms.txt).

# Multichain quickstart

Get started with MetaMask Connect Multichain in your JavaScript (Vite) dapp.

## Prerequisites[​](#prerequisites "Direct link to Prerequisites")

- [Node.js](https://nodejs.org/) version 19 or later installed.
- [Vite](https://vite.dev/) installed and configured.
- A package manager installed, such as [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm), [Yarn](https://yarnpkg.com/), [pnpm](https://pnpm.io/installation), or [Bun](https://bun.sh/).
- [MetaMask](https://metamask.io/download) installed in your browser or on mobile.
- An [Infura API key](/developer-tools/dashboard/get-started/create-api/) from the [Infura dashboard](https://app.infura.io).

note

This quickstart uses [Vite](https://vite.dev/) as the build tool for convenience, but MetaMask Connect Multichain works with vanilla JavaScript or any build tool of your choice.

## Steps[​](#steps "Direct link to Steps")

### 1. Install MetaMask Connect Multichain[​](#1-install-metamask-connect-multichain "Direct link to 1. Install MetaMask Connect Multichain")

Install the multichain client in an existing JavaScript (Vite) project:

- npm
- Yarn
- pnpm
- Bun

```
npm install @metamask/connect-multichain

```

```
yarn add @metamask/connect-multichain

```

```
pnpm add @metamask/connect-multichain

```

```
bun add @metamask/connect-multichain

```

### 2. Initialize MetaMask Connect Multichain[​](#2-initialize-metamask-connect-multichain "Direct link to 2. Initialize MetaMask Connect Multichain")

Initialize the multichain client using [createMultichainClient](/metamask-connect/multichain/reference/methods/#createmultichainclient). The following is an example of initializing the client in a JavaScript (Vite) project:

```
import { createMultichainClient } from '@metamask/connect-multichain'

const client = await createMultichainClient({
  dapp: {
    name: 'My Multichain Dapp',
    url: window.location.href,
    iconUrl: 'https://mydapp.com/icon.png', // Or use base64Icon for embedded icons (e.g., React Native)
  },
  api: {
    supportedNetworks: {
      'eip155:1': 'https://mainnet.infura.io/v3/YOUR_INFURA_API_KEY',
      'eip155:137': 'https://polygon-mainnet.infura.io/v3/YOUR_INFURA_API_KEY',
      'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp':
        'https://solana-mainnet.infura.io/v3/YOUR_INFURA_API_KEY',
    },
  },
})

```

This example configures MetaMask Connect Multichain with the following options:

- `dapp` - Ensures trust by showing your dapp's `name`, `url`, and `iconUrl` during connection.
- `api.supportedNetworks` - A map of [CAIP-2](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) chain IDs to RPC URLs for all networks supported by the dapp.

### 3. Connect and use the Multichain client[​](#3-connect-and-use-the-multichain-client "Direct link to 3. Connect and use the Multichain client")

Connect to MetaMask, get accounts from the session, and invoke RPC methods on a chain of your choice:

```
await client.connect(['eip155:1', 'eip155:137', 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp'], [])

const session = await client.provider.getSession()
const ethAccounts = session.sessionScopes['eip155:1']?.accounts || []
const solAccounts = session.sessionScopes['solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp']?.accounts || []
console.log('ETH accounts:', ethAccounts)
console.log('SOL accounts:', solAccounts)

if (ethAccounts.length > 0) {
  const ethAddress = ethAccounts[0].split(':')[2]
  const ethBalance = await client.invokeMethod({
    scope: 'eip155:1', // Ethereum Mainnet
    request: {
      method: 'eth_getBalance',
      params: [ethAddress, 'latest'],
    },
  })
  console.log('ETH balance:', ethBalance)
}

```

The user sees a single approval prompt for all requested chains. Use [invokeMethod](/metamask-connect/multichain/reference/methods/#invokemethod) to call RPC methods on any chain in the session by specifying a [scope](/metamask-connect/multichain/concepts/scopes/).

## Multichain client methods at a glance[​](#multichain-client-methods-at-a-glance "Direct link to Multichain client methods at a glance")

| Method                                                                                                 | Description                                                                                             |
| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- |
| [connect(scopes, caipAccountIds)](/metamask-connect/multichain/reference/methods/#connect)             | Connects to MetaMask with multichain [scopes](/metamask-connect/multichain/concepts/scopes/)            |
| [getSession](/metamask-connect/multichain/reference/methods/#getsession)                               | Returns the current [session](/metamask-connect/multichain/concepts/sessions/) with approved accounts   |
| [invokeMethod({ scope, request })](/metamask-connect/multichain/reference/methods/#invokemethod)       | Calls an RPC method on a specific chain using a [scope](/metamask-connect/multichain/concepts/scopes/)  |
| [disconnect](/metamask-connect/multichain/reference/methods/#disconnect)                               | Disconnects all [scopes](/metamask-connect/multichain/concepts/scopes/) and ends the session            |
| [disconnect(scopes)](/metamask-connect/multichain/reference/methods/#disconnect)                       | Disconnects specific [scopes](/metamask-connect/multichain/concepts/scopes/) without ending the session |
| [on(event, handler)](/metamask-connect/multichain/reference/methods/#on)                               | Registers an event handler                                                                              |
| [off(event, handler)](/metamask-connect/multichain/reference/methods/#off)                             | Removes an event handler                                                                                |
| [getInfuraRpcUrls({ infuraApiKey })](/metamask-connect/multichain/reference/methods/#getinfurarpcurls) | Generates Infura RPC URLs keyed by CAIP-2 chain ID                                                      |

## Next steps[​](#next-steps "Direct link to Next steps")

- Understand [scopes](/metamask-connect/multichain/concepts/scopes/), [accounts](/metamask-connect/multichain/concepts/accounts/), and [sessions](/metamask-connect/multichain/concepts/sessions/) for CAIP-2 chain identifiers, CAIP-10 account IDs, and CAIP-25 sessions.
- [Send transactions on EVM and Solana](/metamask-connect/multichain/guides/send-transactions/) from a single multichain session.
- [Sign messages on EVM and Solana](/metamask-connect/multichain/guides/sign-transactions/) using `invokeMethod`.
- See [Create a multichain dapp](/metamask-connect/multichain/tutorials/create-multichain-dapp/) for a full step-by-step tutorial with React.
