Skip to content

Latest commit

 

History

History
201 lines (151 loc) · 6.6 KB

File metadata and controls

201 lines (151 loc) · 6.6 KB
title JavaScript Quickstart - MetaMask Connect Solana
description Set up MetaMask Connect Solana in a vanilla JavaScript dapp using Wallet Standard features, signAndSendTransaction, and createSolanaClient.
sidebar_label JavaScript
keywords
connect
MetaMask
JavaScript
SDK
dapp
Wallet SDK
vanilla javascript
wallet-standard
solana browser dapp
signAndSendTransaction
connect solana

Connect to Solana quickstart

This quickstart gets you up and running with MetaMask Connect Solana in a JavaScript dapp.

Prerequisites

Steps

1. Install MetaMask Connect Solana

Install the Solana Client in an existing JavaScript project:

npm install @metamask/connect-solana

2. Initialize MetaMask Connect Solana

Initialize the Solana client using createSolanaClient. The following is an example of initializing the client in a JavaScript project:

import { createSolanaClient, getInfuraRpcUrls } from '@metamask/connect-solana'

const solanaClient = await createSolanaClient({
  dapp: {
    name: 'Example JavaScript Solana dapp',
    url: window.location.href,
    iconUrl: 'https://mydapp.com/icon.png', // Optional
  },
  api: {
    supportedNetworks: getInfuraRpcUrls({
      infuraApiKey: 'YOUR_INFURA_API_KEY',
      networks: ['devnet'],
    }),
  },
})

:::info createSolanaClient is async and uses a singleton multichain core under the hood. Calling it multiple times returns the same underlying session, so you can safely call it during initialization without worrying about duplicate connections. :::

This example configures MetaMask Connect Solana with the following options:

  • dapp - Ensures trust by showing your dapp's name, url, and iconUrl during connection.
  • api.supportedNetworks - A map of network names (mainnet, devnet, testnet) to RPC URLs for all networks supported by the dapp.

3. Connect and use the wallet

Get the Wallet Standard wallet instance and connect:

const wallet = solanaClient.getWallet()

const { accounts } = await wallet.features['standard:connect'].connect()
console.log('Connected account:', accounts[0].address)

The client handles cross-platform connection (desktop and mobile), including deeplinking.

Solana client methods at a glance

Method Description
getWallet Returns a Wallet Standard compatible wallet instance
registerWallet Registers MetaMask with the Wallet Standard registry (no-op if auto-registered)
disconnect Disconnects Solana scopes without terminating the broader multichain session

Usage example

const wallet = solanaClient.getWallet()

// 1. Connect and get accounts
try {
  const { accounts } = await wallet.features['standard:connect'].connect()
  console.log('Connected:', accounts[0].address)

  // 2. Sign a message
  const message = new TextEncoder().encode('Hello from my dapp')
  const [{ signature }] = await wallet.features['solana:signMessage'].signMessage({
    account: accounts[0],
    message,
  })
  console.log('Signature:', signature)
} catch (err) {
  if (err.code === 4001) {
    console.log('User rejected the request')
  } else if (err.code === -32002) {
    console.log('A request is already pending — check MetaMask')
  } else {
    console.error('Unexpected error:', err)
  }
}

// 3. Disconnect
await solanaClient.disconnect()

Next steps