Wallet Adapter
Set up @solana/wallet-adapter-react hooks for connection and signing.
Search across all documentation pages
Set up @solana/wallet-adapter-react hooks for connection and signing.
npm install @solana/wallet-adapter-react @solana/wallet-adapter-react-ui @solana/wallet-adapter-wallets"use client";
import { ConnectionProvider, WalletProvider } from "@solana/wallet-adapter-react";
import { WalletModalProvider } from "@solana/wallet-adapter-react-ui";
import "@solana/wallet-adapter-react-ui/styles.css";When to reach for this:
useWallet state."use client";
import { useMemo } from "react";
import { ConnectionProvider, WalletProvider } from "@solana/wallet-adapter-react";
import { WalletModalProvider } from "@solana/wallet-adapter-react-ui";
import { PhantomWalletAdapter, SolflareWalletAdapter } from "@solana/wallet-adapter-wallets";
export function SolanaProviders({ children }: { children: React.ReactNode }) {
const endpoint = process.env.NEXT_PUBLIC_RPC_URL!;
const wallets = useMemo(
() => [new PhantomWalletAdapter(), new SolflareWalletAdapter()],
[]
);
return (
<ConnectionProvider endpoint={endpoint}>
<WalletProvider wallets={wallets} autoConnect>
<WalletModalProvider>{children}</WalletModalProvider>
</WalletProvider>
</ConnectionProvider>
);
}What this demonstrates:
ConnectionProvider still wraps HTTP endpoint (migrate reads to kit separately).autoConnect restores prior session.useWallet exposes publicKey, connected, signTransaction."use client" boundary only.| Alternative | Use When | Don't Use When |
|---|---|---|
| @wallet-ui/react | New create-solana-dapp templates | Heavy investment in adapter hooks |
| Wallet Standard direct | Custom modal, no UI pkg | Need quick modal |
Match RPC URL, wallet network, and program IDs to one cluster.
Use @solana/kit 7.0.0 for new frontend code.
Surfpool 0.12.0 or devnet with faucet SOL.
confirmed for UX; finalized for high-value reads.
Providers in client layout; reads can be server-side.
Show retry; never assume approval.
Compute budget instructions on congested mainnet.
Use Mobile Wallet Adapter for React Native apps.
Never expose server keypairs to the browser.
Regenerate typed clients in CI.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026