Skip to main content

MetaMask SDK documentation

Seamlessly connect to the MetaMask extension and mobile app.

Connect to MetaMask using JavaScript

Get started with MetaMask SDK in your JavaScript dApp.

Steps

1. Install the SDK

Install the SDK in an existing JavaScript project using npm, Yarn, pnpm, or Bun:

npm install @metamask/sdk

2. Initialize the SDK

The following are examples of using the SDK in various JavaScript environments:

import { MetaMaskSDK } from "@metamask/sdk"

const MMSDK = new MetaMaskSDK({
dappMetadata: {
name: "Example JavaScript dApp",
url: window.location.href,
// iconUrl: 'https://mydapp.com/icon.png' // Optional
},
infuraAPIKey: process.env.INFURA_API_KEY,
})
    • dappMetadata ensures trust by showing your dapp’s name, url, and iconUrl during connection.
    • infuraAPIKey enables read-only RPC and load‑balancing.

3. Connect and use provider

Connect to MetaMask and get the provider for RPC requests:

const provider = MMSDK.getProvider()

const accounts = await MMSDK.connect()
console.log("Connected account:", accounts[0])

const result = await provider.request({
method: "eth_accounts",
params: [],
})
console.log("eth_accounts result:", result)

Use the provider to make RPC request to get accounts, chainId, etc.

  • MMSDK.connect() handles cross-platform connection (desktop and mobile), including deeplinking.
  • Use provider.request() for arbitrary RPC calls like eth_chainId, eth_getBalance, or batching via metamask_batch.

4. Common SDK methods at a glance

MethodDescription
connect()Triggers wallet connection flow
connectAndSign({ msg: '...' })Connects and prompts user to sign a message
getProvider()Returns the provider object for RPC requests
provider.request({ method, params })Any Ethereum JSON‑RPC call
Batched RPCUse metamask_batch to group multiple calls

5. Usage example

// 1. Connect and get accounts
const accounts = await MMSDK.connect()

// 2. Connect and sign in one step
const signResult = await MMSDK.connectAndSign({
msg: "Sign in to Dapp",
})

// 3. Get provider for RPC requests
const provider = MMSDK.getProvider()

// 4. Make an RPC request
const result = await provider.request({
method: "eth_accounts",
params: [],
})

// 5. Batch multiple RPC requests
const batchResults = await provider.request({
method: "metamask_batch",
params: [
{ method: "eth_accounts" },
{ method: "eth_chainId" }
]
})