# Solana wallet configuration

Configure Solana (SVM) embedded wallets through the `solana` key of `walletConfig`. For shared options and the Ethereum setup, see [Wallet configuration](/docs/products/embedded-wallet/react/wallet).

Solana does not use wagmi — no `WagmiProvider` or `OpenfortWagmiBridge` needed. You still need `QueryClientProvider` because `@openfort/react` uses TanStack Query internally:

```tsx [Providers.tsx]
import { OpenfortProvider } from "@openfort/react"
import { QueryClient, QueryClientProvider } from "@tanstack/react-query"

const queryClient = new QueryClient()

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <QueryClientProvider client={queryClient}>
      <OpenfortProvider  // [!code focus]
        publishableKey="YOUR_OPENFORT_PUBLISHABLE_KEY"
        walletConfig={{  // [!code focus]
          shieldPublishableKey: "YOUR_SHIELD_PUBLISHABLE_KEY",  // [!code focus]
          solana: {  // [!code focus]
            cluster: "devnet",  // [!code focus]
            rpcUrls: { devnet: "https://api.devnet.solana.com" },  // [!code focus]
            commitment: "confirmed",  // [!code focus]
          },  // [!code focus]
          connectOnLogin: true,  // [!code focus]
        }}  // [!code focus]
      >
        {children}
      </OpenfortProvider>  // [!code focus]
    </QueryClientProvider>
  )
}
```

## SolanaConfig

```ts
export type SolanaConfig = {
  /** Solana cluster to connect to */
  cluster: SolanaCluster
  /** RPC URLs per cluster (mirrors ethereum.rpcUrls) */
  rpcUrls?: Partial<Record<'mainnet-beta' | 'devnet' | 'testnet', string>>
  /** Commitment level for transactions (default: 'confirmed') */
  commitment?: SolanaCommitment
  /** UI options for Solana-connected screens */
  ui?: SolanaUIOptions
}
```

## Cluster configuration

* `cluster` — **Required.** One of `'mainnet-beta'`, `'devnet'`, or `'testnet'`.
* `rpcUrls` — Optional. Maps cluster name to an RPC endpoint. When omitted, the SDK uses default Solana RPC URLs (`getDefaultSolanaRpcUrl` from `@openfort/react`).
* `commitment` — Optional. Transaction commitment level. Default: `'confirmed'`. Options: `'processed'` | `'confirmed'` | `'finalized'`.
* `ui` — Optional. `{ customAvatar?: React.ComponentType<{ address: string }> }` — custom avatar component shown in Solana-connected screens, receives the wallet address.

:::info
On Solana, the account type is always an EOA. Smart accounts and delegated accounts are Ethereum-only — see [Account types](/docs/products/embedded-wallet/account-types).
:::

## Next steps

* [Send a transaction (Solana)](/docs/products/embedded-wallet/react/wallet/actions/send-transaction/solana)
* [Sign a message (Solana)](/docs/products/embedded-wallet/react/wallet/actions/sign-message-solana)
