Getting started with the Web SDK
Embedded Wallets SDKs were previously known as Web3Auth Plug and Play SDKs. Package names and APIs remain Web3Auth (for example, @web3auth/modal).
Overview
Embedded Wallets provide a seamless authentication experience for web applications with social logins, external wallets, and more. Our JavaScript SDK simplifies how you connect users to their preferred wallets and manage authentication state.
Requirements
- This is a frontend SDK and must be used in a browser environment
- Node.js 22+ and npm 10+
- Basic knowledge of JavaScript
Prerequisites
- Set up your project on the Embedded Wallets dashboard
See the dashboard setup guide to learn more.
Installation
Install the Web3Auth Modal SDK using npm or yarn:
- npm
- Yarn
- pnpm
- Bun
npm install --save @web3auth/modal
yarn add @web3auth/modal
pnpm add @web3auth/modal
bun add @web3auth/modal
1. Configuration
Create an instance of Embedded Wallets containing the basic required configuration. This configuration will contain your Embedded Wallets Client ID and network details from the Embedded Wallets dashboard.
import { Web3Auth, WEB3AUTH_NETWORK } from '@web3auth/modal'
const web3auth = new Web3Auth({
clientId: 'YOUR_WEB3AUTH_CLIENT_ID', // Pass your Web3Auth Client ID, ideally using an environment variable // Get your Client ID from MetaMask Developer Dashboard
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, // or WEB3AUTH_NETWORK.SAPPHIRE_DEVNET
})
2. Initialize Embedded Wallets
Initialize the Web3Auth instance before using any authentication methods:
await web3auth.init()
Advanced configuration
The Web3Auth Modal SDK offers a rich set of advanced configuration options:
- Smart accounts: Configure account abstraction parameters.
- Custom authentication: Define authentication methods.
- Whitelabeling and UI customization: Personalize the modal's appearance.
- Multi-Factor Authentication (MFA): Set up and manage MFA.
- Wallet Services: Integrate additional Wallet Services.
See the advanced configuration section to learn more about each configuration option.
- Basic Configuration
- Advanced Configuration
import { Web3Auth, WEB3AUTH_NETWORK } from '@web3auth/modal'
const web3auth = new Web3Auth({
clientId: 'YOUR_WEB3AUTH_CLIENT_ID', // Pass your Web3Auth Client ID, ideally using an environment variable
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, // or WEB3AUTH_NETWORK.SAPPHIRE_DEVNET
})
import { Web3Auth, WEB3AUTH_NETWORK, WALLET_CONNECTORS, MFA_LEVELS } from '@web3auth/modal'
const web3auth = new Web3Auth({
clientId: 'YOUR_WEB3AUTH_CLIENT_ID', // Pass your Web3Auth Client ID, ideally using an environment variable
web3AuthNetwork: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET,
modalConfig: {
connectors: {
[WALLET_CONNECTORS.AUTH]: {
label: 'auth',
loginMethods: {
google: {
name: 'google login',
// logoDark: "url to your custom logo which will shown in dark mode",
},
facebook: {
name: 'facebook login',
showOnModal: false, // hides the facebook option
},
email_passwordless: {
name: 'email passwordless login',
showOnModal: true,
authConnectionId: 'w3a-email_passwordless-demo',
},
sms_passwordless: {
name: 'sms passwordless login',
showOnModal: true,
authConnectionId: 'w3a-sms_passwordless-demo',
},
},
showOnModal: true, // set to false to hide all social login methods
},
},
hideWalletDiscovery: true, // set to true to hide external wallets discovery
},
mfaLevel: MFA_LEVELS.MANDATORY,
})
Blockchain integration
Web3Auth is blockchain agnostic, enabling integration with any blockchain network. Out of the box, Web3Auth offers robust support for both Solana and Ethereum, each with dedicated provider methods.
Solana integration
To interact with Solana networks, use the Solana wallet from the connection object after sign-in:
await web3auth.connect()
const solanaWallet = web3auth.connection?.solanaWallet ?? null
For building and signing transactions, use @solana/kit with the hooks or composables in the React and Vue SDKs, or see Solana on JavaScript.
Ethereum integration
For Ethereum integration, use the EIP-1193 provider from connection with ethers or viem:
await web3auth.connect()
const provider = web3auth.connection?.ethereumProvider ?? null
if (!provider) return
// Use with ethers.js
const ethProvider = new ethers.BrowserProvider(provider)
// OR
// Use with viem
const walletClient = createWalletClient({
chain: getViewChain(provider),
transport: custom(provider),
})
Troubleshooting
JWT errors
When using custom authentication, you may encounter JWT errors: