Phantom React SDK

The Phantom React SDK provides React hooks for integrating Phantom wallet functionality into your React applications with native transaction support across multiple blockchains.

Features

  • React Hooks Integration: Native hooks for seamless React integration
  • Multi-Chain Support: Solana, Ethereum, Bitcoin, and Sui networks
  • Native Transaction Support: Direct transaction object handling
  • Multiple Provider Types: Browser extension and embedded wallets
  • TypeScript Support: Full TypeScript definitions included

Security

The React SDK uses IndexedDB with non-extractable crypto keys for secure key storage in the browser environment. This approach ensures:
  • Private keys never leave the user’s browser
  • Keys are stored using Web Crypto API with non-extractable properties
  • Hardware-backed security when available
  • User maintains full control of their assets

Installation

npm install @phantom/react-sdk

Network Dependencies

Install additional dependencies based on the networks you plan to support:
# Solana
npm install @solana/web3.js
# or
npm install @solana/kit

# Ethereum/EVM
npm install viem

# Bitcoin
npm install bitcoinjs-lib

# Sui
npm install @mysten/sui.js

Quick Start

1. Wrap Your App with PhantomProvider

import { PhantomProvider, AddressType } from "@phantom/react-sdk";

function App() {
  return (
    <PhantomProvider
      config={{
        providerType: "embedded",
        embeddedWalletType: "user-wallet",
        addressTypes: [AddressType.solana],
        apiBaseUrl: "https://api.phantom.app/v1/wallets",
        organizationId: "your-organization-id"
      }}
    >
      <YourApp />
    </PhantomProvider>
  );
}

2. Connect to Wallet

import { useConnect, useAccounts, useDisconnect } from "@phantom/react-sdk";

function WalletComponent() {
  const { connect, isLoading } = useConnect();
  const accounts = useAccounts();
  const { disconnect } = useDisconnect();

  const handleConnect = async () => {
    try {
      const result = await connect();
      console.log("Connected:", result);
    } catch (error) {
      console.error("Connection failed:", error);
    }
  };

  const isConnected = accounts && accounts.length > 0;

  return (
    <div>
      {!isConnected ? (
        <button onClick={handleConnect} disabled={isLoading}>
          {isLoading ? "Connecting..." : "Connect Phantom"}
        </button>
      ) : (
        <div>
          <p>Connected: {accounts[0].address}</p>
          <button onClick={disconnect}>Disconnect</button>
        </div>
      )}
    </div>
  );
}

Configuration Options

OptionTypeDescription
providerType"injected" | "embedded"Wallet connection type
embeddedWalletType"app-wallet" | "user-wallet"Embedded wallet creation strategy
addressTypesAddressType[]Supported blockchain networks
organizationIdstringYour organization identifier
apiBaseUrlstringPhantom API endpoint

Supported Networks

  • Solana: Mainnet, Devnet, Testnet
  • Ethereum: Mainnet, Sepolia
  • Bitcoin: Mainnet, Testnet
  • Sui: Mainnet, Testnet, Devnet
  • Polygon, Arbitrum, Base

Next Steps