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

# Build with AI

Speed up MetaMask Embedded Wallets integrations by giving your AI coding assistant access to the documentation and SDK reference information.

You'll set up the following:

- **Skill**: Guides your AI assistant on how to reason about the SDK (for example, architecture, framework-specific considerations, key derivation rules, and common pitfalls). There's no code in the skill; the MCP provides that.
- **MCP server**: Provides real-time access to documentation search, code examples, and SDK types.

## Skill[​](#skill "Direct link to Skill")

The Skill guides your AI assistant by providing a mental model for MetaMask Embedded Wallets. It includes SDK selection logic, key derivation rules, authentication concepts, platform quirks, and common mistakes that aren't obvious from the docs alone. The Skill contains no code. The MCP server provides up-to-date code examples and implementation references.

tip

For the best experience, use the MCP server alongside the skill so that your LLM can fetch live docs and examples rather than relying on static text.

### Universal install (recommended)[​](#universal-install-recommended "Direct link to Universal install (recommended)")

Run the following in your project directory:

```
npx skills add web3auth/skill

```

The skills CLI detects your active AI agent and installs to the correct directory automatically. Works with Cursor, Claude Code, Copilot, Cline, Codex, Antigravity, and 40+ more agents. See the [web3auth/skill README](https://github.com/Web3Auth/skill) for global and per-agent install options.

### Manual install[​](#manual-install "Direct link to Manual install")

If you prefer to install the skill without the CLI, use the following per-tool instructions.

**Cursor**

```
npx skills add web3auth/skill -a cursor

```

Or copy the skill directly into your project:

```
npx degit Web3Auth/web3auth-mcp/skills/web3auth .cursor/skills/web3auth

```

Cursor picks up each `SKILL.md` under `.cursor/skills/<skill-name>/` automatically and activates it when relevant.

**Claude Code CLI**

```
npx skills add web3auth/skill -a claude-code

```

**Antigravity**

```
npx skills add web3auth/skill -a antigravity

```

Or copy the skill directly into your project:

```
npx degit Web3Auth/web3auth-mcp/skills/web3auth .agent/skills/web3auth

```

Antigravity picks up skills inside `.agent/skills/` automatically. For global installation across all projects, use `~/.gemini/antigravity/skills/` instead.

**Claude Desktop and other tools**

Open **Claude Desktop → Settings → Custom Instructions** (or your tool's equivalent system prompt or custom instructions field) and paste the skill content below directly.

<details class="details_lb9f alert alert--info details_b_Ee" data-collapsed="true"><summary>View <code>SKILL.md</code> file</summary><div><div class="collapsibleContent_i85q"><div class="language-markdown codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_OeMC">SKILL.md</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-markdown codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">name</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> web3auth</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block front-matter yaml language-yaml"></span><span class="token front-matter-block front-matter yaml language-yaml key atrule">description</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">:</span><span class="token front-matter-block front-matter yaml language-yaml"> Complete knowledge for integrating MetaMask Embedded Wallets (Web3Auth SDK). Covers SDK selection</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> platform capabilities (React</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Vue</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> React Native</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Android</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> iOS</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Flutter</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Unity</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Unreal</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Node.js)</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> authentication setup (social login</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> custom JWT</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> grouped connections)</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> key derivation rules</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> and troubleshooting. Use whenever the user mentions @web3auth/modal</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Web3Auth</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> MetaMask Embedded Wallets</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> social login wallets</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> useWeb3AuthConnect</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> Sapphire network</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> embedded wallet integration</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> or is building an app where users get a crypto wallet through OAuth/social login. Also use for Web3Auth dashboard configuration</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> client IDs</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> verifiers/connections</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> or migrating from PnP/CoreKit/Torus. Do NOT trigger for MetaMask browser extension usage</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> standalone RainbowKit/ConnectKit setups without Web3Auth</span><span class="token front-matter-block front-matter yaml language-yaml punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token front-matter-block front-matter yaml language-yaml"> or general blockchain development unrelated to embedded wallet authentication.</span><span class="token front-matter-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token front-matter-block"></span><span class="token front-matter-block punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">#</span><span class="token title important"> MetaMask Embedded Wallets (Web3Auth) — Complete Guide</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Before writing any code, always use the MCP tools to fetch live docs and real examples. Do not guess package names, API signatures, or configuration.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> MCP Tool Usage</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Use these tools in this order:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">1.</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_docs`</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> — Find relevant documentation pages and example projects.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> SDK questions → </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_docs query="react SDK quick start"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Feature questions → </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_docs query="grouped connections custom auth"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> With filters → </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_docs query="solana" platform="react" chain="solana"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">2.</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_doc`</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> — Read the full content of a doc page returned by </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_docs`</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Always read the SDK doc for the user's platform before generating code.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Read troubleshooting pages when a user reports an error.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">3.</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_example`</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> — Fetch complete source code of the best matching example.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Always fetch a quick-start example before generating integration code.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Fetch the exact auth-method example when custom auth is involved.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Example: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_example platform="react" category="quick-start"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Example: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_example name="React Firebase" auth_method="firebase"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">4.</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_community`</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> — Search the MetaMask Builder Hub for real user issues.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Always search the community when the user reports an error or unexpected behavior.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`topic_id`</span><span class="token plain"> to read the full thread when you find a relevant topic.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Example: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_community query="popup blocked safari iOS"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Example: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`search_community topic_id=2751`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">5.</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_sdk_reference`</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> — Fetch SDK source code (types, interfaces, hooks) from the open-source repos.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use for verifying exact type shapes when adapting example code.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use for debugging errors by checking what the SDK actually expects.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use only the released versions on GitHub, or the version you are currently integrating according to the example. Since active development goes on the SDK code on main branch can be related to a future unreleased version.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use for confirming parameter types when docs are ambiguous.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Do NOT use to discover new features or flags.</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> Many SDK options are internal, legacy, or unnecessary. Examples (</span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_example`</span><span class="token plain">) show what to actually use.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Default call returns type definitions: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_sdk_reference platform="react"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Targeted: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`get_sdk_reference platform="react" module="react-hooks"`</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">   </span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Call without </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`module`</span><span class="token plain"> first to see available modules for a platform.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Decision workflow</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token code punctuation" style="color:rgb(248, 248, 242)">```</span><span class="token code"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code"></span><span class="token code code-block">For ALL workflows: first review Key Derivation Rules, Authentication Concepts,</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">Platform Capability, and Platform Quick Reference for the user's platform.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">User asks "which SDK?" or "how do I integrate?"</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; search_docs for the SDK doc page</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_doc to read the full SDK page</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_example for the matching quick-start</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; Build from the example, guided by the doc</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">User asks about a specific feature (custom auth, Wagmi, Solana, etc.)</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; search_docs with feature keywords</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_doc for the feature page</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_example with matching auth_method or category</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">User reports an error or unexpected behavior</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; search_community with the error message / symptom</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; Read relevant topics with topic_id</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; search_docs for troubleshooting pages</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_doc for the specific pages</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">User needs to verify a type signature or debug an SDK error</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; get_sdk_reference for the platform's type definitions</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; Use a specific module if you know what you need (e.g., "react-hooks")</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code code-block">  -&gt; NEVER use SDK source to discover features — use examples instead</span><span class="token code"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token code"></span><span class="token code punctuation" style="color:rgb(248, 248, 242)">```</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Product Overview</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">MetaMask Embedded Wallets (formerly Web3Auth Plug and Play) provides </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">non-custodial social login wallets</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> using Shamir Secret Sharing (SSS).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Users authenticate with OAuth (Google, Facebook, etc.) or custom JWT. Their private key is derived from multiple key shares — one held by the user's device, one by Web3Auth nodes (further divided by another SSS into a network of nodes distributed globally), and optionally a third or more depending on MFA factors. </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> If no MFA is there, one share is held by Web3Auth nodes, another is stored encrypted on Web3Auth Metadata store via user's unique auth id.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> It is a 2 step shamir secret sharing. No single party (including Web3Auth / MetaMask) holds the full key. It is fully non-custodial.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> The wallet address is deterministic: same user + same config = same wallet every time. Configurations can change keys, better to refer to docs if changing anything.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Old product names (PnP, Core Kit, Torus) are deprecated. Everything is now "MetaMask Embedded Wallets."</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Dashboard: https://dashboard.web3auth.io  </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Docs: https://metamask-docs-git-imp-agt-scr-90-100-consensys-ddffed67.vercel.app/embedded-wallets/  </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Community: https://builder.metamask.io/c/embedded-wallets/5</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Key Derivation Rules (CRITICAL — memorise these)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Same wallet address requires ALL of:</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Same Client ID</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Same Sapphire network (devnet OR mainnet — not both)</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Same connection configuration (same verifier id/ connection id)</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Different any of these = different wallet address forever.</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> NEVER change the Client ID or Sapphire network in production.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Sapphire Devnet/Mainnet are Web3Auth key-reconstruction networks — completely separate from blockchain devnet/mainnet. Do not confuse them.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Sapphire Devnet allows localhost. Sapphire Mainnet does NOT allow localhost.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Always use Devnet for local development. Switch to Mainnet only when deploying.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Do not use Devnet for production ever, it can cause loss in user wallets.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Do not use extra flags randomly across integrations, like useSFAKey (earlier useCoreKitKey). This flag was introduced for compatibility with Wallet Pregeneration, causes change in address.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Authentication Concepts</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Connections</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> (formerly "verifiers"): Configured on the dashboard. Each connection has an Auth Connection ID, a JWT user identifier field (e.g. </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`sub`</span><span class="token plain">, </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`email`</span><span class="token plain">), a JWKS endpoint, and optional validation fields.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Social logins</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain">: Pre-configured connections for Google, Facebook, Discord, Twitch, Apple, etc. Default are configured for all which use Web3Auth's own social provider. You can add your OAuth app credentials for Google, Facebook, Discord and Twitch. Others are configured via Auth0. Auth0 can be easily configured as well for every social login directly as well. Users using Web3Auth own social providers can access their account on https://accounts.web3auth.io as well.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Custom connections</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain">: For Firebase, AWS Cognito, or any JWT provider with a JWKS endpoint, compatible with OAuth2. You bring the JWT; Web3Auth validates it.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Grouped connections</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> (CRITICAL): Link multiple social login methods so the same user gets the </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">same wallet address</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> regardless of how they sign in. Without this, </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`Google login`</span><span class="token plain"> and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`Email passwordless`</span><span class="token plain"> produce </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">different wallets</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain">. Requires compatible user identifier fields across sub-connections. Ideally works in the case of Google + Email Passwordless + Auth0, or grouping 2 separate connections of same social logins, like Google + Google, Discord + Discord etc. It can also work for Custom but you need to make sure the user id is always the same across both individual providers.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">JWT </span><span class="token bold content code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`iat`</span><span class="token bold content"> constraint</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain">: Custom JWT must have an </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`iat`</span><span class="token plain"> (issued-at) claim within 60 seconds of current time, regardless of </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`exp`</span><span class="token plain">. Issue a fresh JWT on every login attempt.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Platform Capability</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Shared across all SDKs:</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> Private key can be reconstructed for EVM (secp256k1) and Solana (ed25519). The curve can be changed for any other blockchain, making integration chain-agnostic — use any standard library for blockchain calls.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Web SDK (@web3auth/modal)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Supports social login, external wallets (MetaMask Extension, WalletConnect, Coinbase, etc.), modal UI (can be used without modal as well, with web3auth completely hidden), smart accounts, multi-factor authentication (MFA), session management. Additionally has extra features like wallet UI, funding, walletconnect interoperability (your dapp wallet connected into other dapps supporting walletconnect), server side verification for users etc.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Everything is done with an iframe embedded within the user's web app. All frontend key management to be totally non custodial.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Built-in EVM and Solana providers. Chain config via dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Most feature-complete SDK. Works in any web framework and vanilla JS. Has sub-SDKs for React and Vue:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">####</span><span class="token title important"> React Hooks (@web3auth/modal/react)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Provider built in hooks for easier integration for React, Next.js etc. It has native wagmi integration, helping make calls for EVM chains seamlessly. It also has native Solana Hooks, which help easy implementation for Solana integrations as well.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">####</span><span class="token title important"> Vue Composables (@web3auth/modal/vue)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Very similar to React with support for wagmi vue composables and built in solana composables as well. It is the only SDK in the market with such native Vue support for embedded wallets.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> React Native SDK (@web3auth/react-native-sdk) </span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Invisible SDK for Social logins in React Native environment. Generates private key using socials within the frontend itself. No external wallets supported, user has to create their own UI as well. </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Smart accounts, server side verification and session management are available. Features like MFA, Wallet UI, Funding, Wallet Connect Interoperability, etc are supported via in app browser for security. </span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration is not supported. Built-in EVM and Solana providers included.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Mobile &amp; Game Engine SDKs (Android, iOS, Flutter, Unity, Unreal Engine)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">All mobile and game engine SDKs share a common pattern:</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Invisible SDK for social logins. Generates private key using socials within the frontend. No external wallets supported; developers must create their own UI.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Server-side verification and session management are available. Features like MFA, Wallet UI, Funding, and WalletConnect Interoperability are supported via in-app browser. Smart accounts are supported via browser transaction functions.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration is not supported. No built-in providers — must export private key and use platform-native libraries.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Node SDK (@web3auth/node-sdk) </span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Backend-only SDK. Custom auth only (JWT mandatory — no social login UI). Stateless per-request key derivation.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Smart accounts and server side verification are available. MFA, Wallet UI, Funding, WalletConnect Interoperability are not supported (backend integration).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration supported. Built-in EVM and Solana providers included.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Custodial to the dApp, non-custodial to Web3Auth — key reconstruction happens on dApp backend.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> SDK Recommendation Logic</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose React</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building React / Next.js / Vite web apps. Best DX, Wagmi support, full feature set.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose Vue</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building Vue / Nuxt apps. Same feature set as React via composables.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose JavaScript</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building Angular, Svelte, vanilla JS, or any web framework without a dedicated SDK. Same core, no wrappers.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose React Native</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building cross-platform mobile with Expo or bare React Native. Has built-in EVM/Solana providers unlike native mobile SDKs.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose Android / iOS / Flutter</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building native mobile. No built-in blockchain provider — you must export the private key and use a platform-specific library (web3j, ethers-swift, web3dart, etc.).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose Unity</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building a game with C#. No built-in provider; export private key and use a Unity-compatible blockchain library.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose Unreal</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Building a game with C++/Blueprints. SDK is under the MetaMask org (not Web3Auth). Same pattern: export key, use Unreal library.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Choose Node.js</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> when: Server-side wallet operations, AI agents, backend custody. Custom auth only (no social login UI). Stateless per-request key derivation.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Setup Flow</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">1.</span><span class="token plain"> Create project at dashboard.web3auth.io → get Client ID.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">2.</span><span class="token plain"> Choose environment: </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Sapphire Devnet</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> (testing, localhost allowed) or </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">Sapphire Mainnet</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> (production, no localhost).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">3.</span><span class="token plain"> Allowlist domains/URLs for web; bundle identifiers + deep link schemes for mobile.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">4.</span><span class="token plain"> Configure chains (EVM/Solana) with RPC endpoints on dashboard itself (free Infura available for supported chains on dashboard). Android, iOS, React Native, Flutter, Unity, Unreal Engine: configure chain and RPC URLs manually in code.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">5.</span><span class="token plain"> Set up authentication: default social logins or custom connections.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">6.</span><span class="token plain"> Optional: session management duration, test accounts, key export toggle, whitelabel/branding.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Platform Quick Reference</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Platform-specific setup notes, gotchas, and configuration steps. Always read the relevant section before generating integration code — each platform has unique polyfill, deep-link, or provider requirements that cause failures if missed.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> React / Next.js / Vite</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Provider-based architecture. All hooks must be within the provider tree. Never put the provider in a Next.js server component.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Two modes: Modal (pre-built UI) and No-Modal (headless). The </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`useWeb3AuthConnect`</span><span class="token plain"> hook can define that.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Vite: needs </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`buffer`</span><span class="token plain"> and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`process`</span><span class="token plain"> polyfills + </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`define: { global: globalThis }`</span><span class="token plain"> in </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`vite.config.ts`</span><span class="token plain">. Read the Vite troubleshooting doc and refer to the example before configuring.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Next.js App Router: provider must be in a </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`"use client"`</span><span class="token plain"> component.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Env var prefix: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`VITE_`</span><span class="token plain"> for Vite, </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`NEXT_PUBLIC_`</span><span class="token plain"> for Next.js.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Do not use generic Wagmi hooks for Web3Auth state — use the dedicated Web3Auth Wagmi hooks for </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`isConnected`</span><span class="token plain">, </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`address`</span><span class="token plain">, etc.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Vue / Nuxt</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Composables-based API. Must be called inside </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`setup()`</span><span class="token plain"> or </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`&lt;script setup&gt;`</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Two modes: Modal (pre-built UI) and No-Modal (headless). The </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`useWeb3AuthConnect`</span><span class="token plain"> composable can define that.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Needs </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`buffer`</span><span class="token plain"> and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`process`</span><span class="token plain"> polyfills in </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`vue.config.js`</span><span class="token plain">. Read the Vue troubleshooting doc and refer to the example before configuring.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Nuxt: add </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`ssr: false`</span><span class="token plain"> to the plugin. Load a client-only plugin to polyfill Buffer/process.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Do not use generic Wagmi composables for Web3Auth state — use the dedicated Web3Auth Wagmi composables.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> JavaScript (Angular / Svelte / Vanilla)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Direct instantiation, no hooks/composables. Initialize before calling connect.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Angular: polyfill in </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`tsconfig`</span><span class="token plain"> paths + dedicated </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`polyfills.ts`</span><span class="token plain">.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Every bundler needs </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`define global`</span><span class="token plain"> set correctly.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Read the polyfill troubleshooting doc and refer to the example before configuring.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> React Native (Bare / Expo)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Deep link URL scheme must match exactly between app config and dashboard allowlist.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Has built-in EVM and Solana providers (unlike native mobile SDKs).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure deep links in both </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`Info.plist`</span><span class="token plain"> (iOS) and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`AndroidManifest.xml`</span><span class="token plain"> (Android).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Allowlist both bundle identifier (iOS) and package name (Android) in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Expo Go does not support the required Web3Auth polyfills. Use a Custom Dev Client or EAS build.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Import order is critical: polyfills and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`react-native-get-random-values`</span><span class="token plain"> must come before any app code in the entry point.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Metro bundler polyfill configuration is entirely different from Vite or Webpack. Read the React Native Metro troubleshooting doc and refer to the example.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Android (Kotlin)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> No built-in providers. After login: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`web3Auth.getPrivKey()`</span><span class="token plain">, then use web3j or similar.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure deep link in </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`AndroidManifest.xml`</span><span class="token plain">. Allowlist package name in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration NOT supported. Copy RPC URLs manually.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> iOS (Swift)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> No built-in providers. After login: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`web3Auth.getPrivKey()`</span><span class="token plain">, then use web3swift or similar.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure URL scheme in </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`Info.plist`</span><span class="token plain">. Set up </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`onOpenURL`</span><span class="token plain"> handler for OAuth callback.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Allowlist bundle identifier in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration NOT supported. Copy RPC URLs manually.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Flutter (Dart)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> No built-in providers. After login: </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`web3auth.getPrivKey()`</span><span class="token plain">, then use web3dart or similar.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure deep links in both </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`Info.plist`</span><span class="token plain"> (iOS) and </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`AndroidManifest.xml`</span><span class="token plain"> (Android).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Allowlist both bundle identifier (iOS) and package name (Android) in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Install via </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`flutter pub add`</span><span class="token plain">, not npm.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration NOT supported. Copy RPC URLs manually.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Unity (C#)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> No built-in providers. Export private key after login; use a Unity-compatible EVM library.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure deep link scheme for OAuth. Allowlist bundle ID and scheme in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Wallet Services UI is webview-based, not a native Unity component.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration NOT supported. Copy RPC URLs manually.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Unreal Engine (C++/Blueprints)</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> SDK is under the </span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token bold content">MetaMask</span><span class="token bold punctuation" style="color:rgb(248, 248, 242)">**</span><span class="token plain"> org on GitHub (not Web3Auth).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> No built-in providers. Export private key after login; use an Unreal-compatible library.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Configure deep link. Allowlist bundle ID and scheme in dashboard.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Wallet Services UI is webview-based, not a native Unreal component.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration NOT supported. Copy RPC URLs manually.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">###</span><span class="token title important"> Node.js</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Server-side only. No UI. Custom auth only (no social login).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Each request reconstructs the key from the JWT — stateless by design.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use built-in EVM and Solana providers for signing. Export key for other chains.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard chain configuration is supported. Configure chains on dashboard as usual.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Create a separate project on dashboard to avoid mixing server-side and client-side keys.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Best for: AI agents, server-side custody, automated transactions.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Private Key Export</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Controlled by a dashboard toggle (Key Export Settings).</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Even when export is disabled, the built-in providers (Web, React Native, Node.js) can still sign transactions, just not export keys.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> For platforms without built-in providers (Android, iOS, Flutter, Unity, Unreal), key export is the ONLY way to interact with blockchains, hence this function doesn't work in those platforms.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Wallet Pregeneration</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Uses </span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`useCoreKitKey`</span><span class="token plain">/</span><span class="token code-snippet code keyword" style="color:rgb(189, 147, 249);font-style:italic">`useSFAKey`</span><span class="token plain"> flag. Requires custom authentication.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> WARNING: Toggling this flag in production changes ALL user wallet addresses.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Use case: airdrops, pre-generating wallets before users log in.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Server-Side Verification</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Server-side verification enables developers to securely authenticate users on the backend by validating the ownership of a wallet address. This process involves the use of a JSON Web Token (JWT) issued upon user authentication, which contains claims about the end user, including proof of ownership over a wallet public address.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">Upon a user's successful connection of their wallet, Web3Auth generates a JWT, signed with a private key using the ES256 algorithm, that is unique to your application. This token serves as a verifiable credential that you can use to authenticate the user on your backend.</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token hr punctuation" style="color:rgb(248, 248, 242)">---</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token title important punctuation" style="color:rgb(248, 248, 242)">##</span><span class="token title important"> Additional Resources</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Docs: https://metamask-docs-git-imp-agt-scr-90-100-consensys-ddffed67.vercel.app/embedded-wallets/</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Dashboard: https://dashboard.web3auth.io</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Community (Builder Hub): https://builder.metamask.io/c/embedded-wallets/5</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token list punctuation" style="color:rgb(248, 248, 242)">-</span><span class="token plain"> Examples: https://github.com/Web3Auth/web3auth-examples</span><br></div></code></pre></div></div></div></div></details>

## MCP server[​](#mcp-server "Direct link to MCP server")

The [MetaMask Embedded Wallets MCP server](https://github.com/Web3Auth/web3auth-mcp) connects your AI coding assistant directly to the documentation. It provides five tools:

| Tool              | What it does                                         |
| ----------------- | ---------------------------------------------------- |
| search_docs       | Search documentation and example projects            |
| get_doc           | Fetch the full content of any doc page               |
| get_example       | Fetch complete source code of an integration example |
| get_sdk_reference | Fetch SDK types and hooks from the open-source repos |
| search_community  | Search the MetaMask Builder Hub for real user issues |

### Cursor[​](#cursor "Direct link to Cursor")

Select the following button to install the MCP server in Cursor automatically:

[![Add MetaMask Embedded Wallets MCP to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=web3auth&config=eyJ1cmwiOiJodHRwczovL21jcC53ZWIzYXV0aC5pbyJ9)

You can also add it manually. Open **Cursor Settings → Tools & Integrations → MCP** and add:

```
{
  "mcpServers": {
    "web3auth": {
      "url": "https://mcp.web3auth.io"
    }
  }
}

```

### Claude Code CLI[​](#claude-code-cli "Direct link to Claude Code CLI")

Run the following in your terminal:

```
claude mcp add --transport http web3auth https://mcp.web3auth.io

```

Or add manually to your project's `claude.json`:

```
{
  "mcpServers": {
    "web3auth": {
      "url": "https://mcp.web3auth.io"
    }
  }
}

```

### Claude Desktop[​](#claude-desktop "Direct link to Claude Desktop")

Open your Claude Desktop configuration file:

- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

Add the server to the `mcpServers` section:

```
{
  "mcpServers": {
    "web3auth": {
      "url": "https://mcp.web3auth.io"
    }
  }
}

```

Restart Claude Desktop and ask: _"Search MetaMask Embedded Wallets docs for React quick start"_ to verify the connection.

### Antigravity[​](#antigravity "Direct link to Antigravity")

Open your MCP configuration file:

- **macOS/Linux**: `~/.config/antigravity/mcp.json`
- **Windows**: `%APPDATA%\antigravity\mcp.json`

Add the server to the `mcpServers` section:

```
{
  "mcpServers": {
    "web3auth": {
      "url": "https://mcp.web3auth.io"
    }
  }
}

```

Antigravity automatically reloads MCP configuration changes. You don't need to restart it.

### Codex CLI[​](#codex-cli "Direct link to Codex CLI")

For Codex CLI or any stdio-only agent, use [mcp-remote](https://github.com/modelcontextprotocol/mcp-remote) to bridge the HTTP endpoint:

```
npm install -g mcp-remote

```

Then add to your agent's configuration:

```
{
  "mcpServers": {
    "web3auth": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.web3auth.io"]
    }
  }
}

```

## Static docs (llms.txt)[​](#static-docs-llmstxt "Direct link to Static docs (llms.txt)")

If your AI tool doesn't support MCP yet, use the static documentation file instead. This gives your AI assistant the full MetaMask Embedded Wallets documentation as a single text file.

warning

The static file is a snapshot and may not include the latest updates. Use the MCP server when possible for always-current docs.

Add the following URL as a custom doc source in your tool's settings, or paste it directly into your AI chat:

```
https://metamask-docs-git-imp-agt-scr-90-100-consensys-ddffed67.vercel.app/llms-embedded-wallets-full.txt

```

For tools that support the [llms.txt spec](https://llmstxt.org/) and can index docs automatically, add:

```
https://metamask-docs-git-imp-agt-scr-90-100-consensys-ddffed67.vercel.app/llms-embedded-wallets.txt

```

## Start building[​](#start-building "Direct link to Start building")

Once the skill and MCP are set up, ask your AI assistant directly. Good starting prompts include:

- _"Add MetaMask Embedded Wallets to my React app with Google login."_
- _"Set up social login wallets in my Next.js app using Wagmi."_
- _"Integrate embedded wallets in my Flutter app."_
- _"Why are my users getting different wallet addresses after I changed the login method?"_

The MCP server will search the docs and fetch real working examples. The skill will ensure the correct SDK is chosen and common pitfalls are avoided before a line of code is written.

tip

Use planning mode (where available) for your initial prompt. Review the plan before generating code; this catches architecture mistakes early and avoids config errors that would change wallet addresses in production.
