Skip to content

MobileWalletProvider

The MobileWalletProvider is the shared app-level entrypoint for both React Native packages. It makes wallet connection state and app identity available to child components. The main difference is how each package configures the Solana client.

The provider always supplies app identity, authorization state, and wallet access to child components. The package choice mainly changes the network configuration props and the client that gets exposed downstream.

NameTypeDescriptionDefault
cacheWalletAuthorizationCacheOptional. A cache instance for storing authorization data. Defaults to a cache that uses AsyncStorage.
childrenReactNodeChild components that should receive the mobile wallet context.
clusterPick<SolanaCluster, 'id' | 'url' | 'urlWs'>Cluster configuration. Helpers like createSolanaDevnet() create the expected shape.
createClient(cluster: Pick<SolanaCluster, 'url' | 'urlWs'>) => ClientOptional. A function to create a custom RPC client. By default the provider creates one with createSolanaRpc() and createSolanaRpcSubscriptions().
identityAppIdentityThe application identity shown to the wallet.

Kit expects a cluster object with:

NameTypeDescription
idSolanaClusterIdThe cluster identifier, for example 'solana:devnet'.
urlstringThe Solana RPC endpoint.
urlWsstringOptional WebSocket endpoint for subscriptions.

Helpers available in the docs include:

  • createSolanaDevnet()
  • createSolanaMainnet(url)
  • createSolanaTestnet()
  • createSolanaLocalnet()
import { MobileWalletProvider, createSolanaDevnet } from '@wallet-ui/react-native-kit';
import React from 'react';
import { AppRegistry } from 'react-native';
import App from './App';
const cluster = createSolanaDevnet();
const appIdentity = {
name: 'My Wallet App',
uri: 'https://mywalletapp.com',
icon: 'https://mywalletapp.com/icon.png',
};
function Root() {
return (
<MobileWalletProvider cluster={cluster} identity={appIdentity}>
<App />
</MobileWalletProvider>
);
}
AppRegistry.registerComponent('MyWalletApp', () => Root);

Advanced client customization is available for @wallet-ui/react-native-kit.

import { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';
import { MobileWalletProvider, Client, createSolanaDevnet } from '@wallet-ui/react-native-kit';
const cluster = createSolanaDevnet();
function createMyClient(cluster: { url: string; urlWs?: string }): Client {
const rpc = createSolanaRpc(cluster.url);
const wsUrl = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');
const rpcSubscriptions = createSolanaRpcSubscriptions(wsUrl);
return { rpc, rpcSubscriptions };
}
function Root() {
return (
<MobileWalletProvider cluster={cluster} createClient={createMyClient} identity={{ name: 'My App' }}>
<App />
</MobileWalletProvider>
);
}
Terminal window
npm install @solana/kit-plugins
import { createEmptyClient } from '@solana/kit';
import { rpc } from '@solana/kit-plugins';
import { MobileWalletProvider, createSolanaDevnet } from '@wallet-ui/react-native-kit';
const cluster = createSolanaDevnet();
async function createMyClient(cluster: { url: string; urlWs?: string }) {
const urlWs = cluster.urlWs ?? cluster.url.replace(/^http/, 'ws');
const client = await createEmptyClient().use(rpc(cluster.url, { url: urlWs }));
return { rpc: client.rpc, rpcSubscriptions: client.rpcSubscriptions };
}
function Root() {
return (
<MobileWalletProvider cluster={cluster} createClient={createMyClient} identity={{ name: 'My App' }}>
<App />
</MobileWalletProvider>
);
}