Phantom Embedded React Native Starter

Phantom Embedded Wallet - React Native Starter
An Expo starter for integrating Phantom's embedded wallet SDK on mobile. Users can sign in with Google, Apple, email, or their existing Phantom wallet—no browser extension required.
Note: This template requires a custom development build and will NOT work with Expo Go. The Phantom React Native SDK requires native modules that are not available in Expo Go.
Quick Start
1. Prerequisites
- Node.js 18+
- Phantom Portal App ID — Register at phantom.com/portal and add:
- Your app's URL scheme (e.g.,
phantomwallet://phantom-auth-callback) as an allowed redirect URL
- Your app's URL scheme (e.g.,
2. Create and configure
npx create-solana-dapp@latest <your-app-name> --template phantom-embedded-react-native
cd <your-app-name>
cp .env.example .envAdd your App ID and configuration to .env:
EXPO_PUBLIC_PHANTOM_APP_ID=your-app-id-here
EXPO_PUBLIC_APP_SCHEME=your-app-scheme
EXPO_PUBLIC_SOLANA_RPC_URL=your-prefered-rpc3. Run
For iOS:
pnpm run iosFor Android:
pnpm run androidWhat's in This Template
├── app/
│ ├── _layout.tsx # PhantomProvider setup (polyfill import must be first)
│ ├── index.tsx # Demo page with connect button
│ └── wallet.tsx # Wallet screen with account info
├── components/
│ ├── ConnectButton.tsx # Example wallet UI
│ └── WalletInfo.tsx # Balance and address display
├── lib/
│ ├── solana.ts # Solana balance fetching
│ └── utils.ts # Utility functions
└── .env.exampleThe template is pre-configured with:
- Google, Apple, and injected wallet auth providers
- Solana address type enabled
- Deep linking for OAuth callbacks
- Dark theme
Common Issues
"Invalid redirect URL" — Your redirect URL in .env must exactly match what's in Phantom Portal. The format is {scheme}://phantom-auth-callback (e.g., phantomwallet://phantom-auth-callback).
"Module not found: react-native-get-random-values" — Ensure the polyfill is imported first in app/_layout.tsx before any other imports.
"Expo Go not working" — Expected behavior. Expo Go doesn't support the native modules required by Phantom SDK. You must create a development build.
"Deep linking not working" — Rebuild the app after changing the URL scheme in app.json or .env. Verify the redirect URI is added in Phantom Portal.
"Failed to fetch balance" — Check that your RPC endpoint is reachable. For production, consider using a dedicated RPC provider like Helius, QuickNode, or Alchemy.
Deployment
Add these environment variables to your build configuration:
EXPO_PUBLIC_PHANTOM_APP_IDEXPO_PUBLIC_APP_SCHEME(must match your app's URL scheme)EXPO_PUBLIC_SOLANA_RPC_URL(update to your production RPC endpoint)
Remember to add your production redirect URL to Phantom Portal.
Claude / AI Agent Setup
This template works with the Phantom MCP server, giving AI assistants like Claude direct access to your embedded wallet — checking balances, sending transactions, signing messages, and trading perpetuals on Hyperliquid.
Setup (Claude Desktop)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"phantom": {
"command": "npx",
"args": ["-y", "@phantom/mcp-server@latest"]
}
}
}Restart Claude Desktop. On first use, a browser window opens to authenticate your Phantom wallet. No Phantom Portal App ID required — the MCP server handles its own authentication.
Available tools (28)
Wallet & balances
get_connection_status— Local connection check (no API call)get_wallet_addresses— Solana, Ethereum, Bitcoin, and Sui addressesget_token_balances— All token balances with live USD pricesget_token_allowance— ERC-20 allowance for a spender on EVM
Transactions
send_solana_transaction— Sign and broadcast a Solana transaction (with simulation preview)send_evm_transaction— Sign and broadcast an EVM transactiontransfer_tokens— Transfer SOL, SPL tokens, or EVM native/tokensbuy_token— Swap via Phantom routing (Solana, EVM, cross-chain)simulate_transaction— Preview asset changes without submitting
Signing
sign_solana_message— Sign a UTF-8 message on Solanasign_evm_personal_message— EIP-191 personal sign on EVMsign_evm_typed_data— EIP-712 typed data (DeFi permits, order signing)
Auth & misc
phantom_login— Trigger wallet authenticationpay_api_access— Pay for API accessportfolio_rebalance— Rebalance token portfolio
Perpetuals — Hyperliquid (13 tools)
deposit_to_hyperliquid— Bridge tokens into your Hyperliquid perp accountget_perp_account— Account balance and available marginget_perp_markets— Markets with price, funding rate, open interest, and max leverageget_perp_positions— Open positions with PnL and liquidation priceget_perp_orders— Open limit, take-profit, and stop-loss ordersget_perp_trade_history— Historical fills and closed PnLopen_perp_position— Open a long/short with configurable leverageclose_perp_position— Full or partial close via market ordercancel_perp_order— Cancel an open order by IDupdate_perp_leverage— Change leverage and margin type (isolated/cross)transfer_spot_to_perps— Move USDC from Hypercore spot to perpwithdraw_from_perps— Move USDC from perp back to spotwithdraw_from_hyperliquid_spot— Withdraw from Hyperliquid spot to wallet
Learn More
- Phantom SDK Documentation — Full API reference, hooks, and examples
- Phantom Portal — Manage your app settings
- @phantom/react-native-sdk — Package details and changelog
- Recipes & Code Snippets — Common patterns for signing, transactions, multi-chain
License
MIT
