Appearance
Integrating the cross-app wallet connector
Privy makes it easy to integrate cross-app wallets from various Privy apps into existing setups with RainbowKit, ConnectKit, wagmi and more using the @privy-io/cross-app-connect
SDK.
Integrating apps do not need to use Privy themselves to integrate cross-app wallets; instead, they can import a Privy cross-app connector directly from the SDK to configure with their wallet connector library. Simply follow the instructions below to get set up!
TIP
See our privy-io/cross-app-connect-demo
repo for an example set up.
1. Install dependencies
Install the @privy-io/cross-app-connect
SDK and its peer dependencies:
bash
npm i @privy-io/cross-app-connect wagmi @rainbow-me/rainbowkit @tanstack/react-query
2. Create the connector
Import the toPrivyWallet
connector function from @privy-io/cross-app-connect/rainbow-kit
:
tsx
import {toPrivyWallet} from '@privy-io/cross-app-connect/rainbow-kit';
Use the toPrivyWallet
method to create a wallet connector. The function takes id
, name
, and iconUrl
(described below) and returns a connector that RainbowKit will use to connect to the provider wallet.
Field | Type | Description |
---|---|---|
id | string | Privy app id for the provider application. |
name | string | The name of the Privy provider application. |
iconUrl | string | The URL for the icon that will appear in the modal |
You might call this method within RainbowKit's connectorsForWallets
function like so:
tsx
import {connectorsForWallets} from '@rainbow-me/rainbowkit';
import {toPrivyWallet} from '@privy-io/cross-app-connect/rainbow-kit';
const connectors = connectorsForWallets(
[
{
groupName: 'Recommended',
wallets: [
toPrivyWallet({
id: 'privy-wallet-app-id',
name: 'Privy wallet app name',
iconUrl: 'https://example.com/image.png',
}),
],
},
],
{
appName: 'Privy',
projectId: 'Demo',
},
);
Then, pass this array of connectors to your wagmi configuration.
tsx
import {createConfig, http} from 'wagmi';
import {mainnet} from 'wagmi/chains';
export const config = createConfig({
chains: [mainnet],
transports: {
[mainnet.id]: http(),
},
connectors,
ssr: true,
});
This config
will be passed to the WagmiProvider
in the next step.
3. Wrap app with providers
At the highest level of your applications, wrap the component with the wagmi, QueryClient, and RainbowKit providers. Pass the configuration you created in step 2 to the wagmi provider.
tsx
import {RainbowKitProvider} from '@rainbow-me/rainbowkit';
import {QueryClient, QueryClientProvider} from '@tanstack/react-query';
import type {AppProps} from 'next/app';
import {WagmiProvider} from 'wagmi';
import {config} from '../wagmi';
const client = new QueryClient();
function MyApp({Component, pageProps}: AppProps) {
return (
<WagmiProvider config={config}>
<QueryClientProvider client={client}>
<RainbowKitProvider>
<Component {...pageProps} />
</RainbowKitProvider>
</QueryClientProvider>
</WagmiProvider>
);
}
export default MyApp;
Complete example
All together, this should look like:
tsx
import {connectorsForWallets} from '@rainbow-me/rainbowkit';
import {createConfig, http} from 'wagmi';
import {mainnet} from 'wagmi/chains';
import {toPrivyWallet} from '@privy-io/cross-app-connect/rainbow-kit';
const connectors = connectorsForWallets(
[
{
groupName: 'Recommended',
wallets: [
toPrivyWallet({
id: 'privy-wallet-app-id',
name: 'Privy wallet app name',
iconUrl: 'https://example.com/image.png',
}),
],
},
],
{
appName: 'Privy',
projectId: 'Demo',
},
);
export const config = createConfig({
chains: [mainnet],
transports: {
[mainnet.id]: http(),
},
connectors,
ssr: true,
});
4. Use the ConnectButton
Import the ConnectButton
and use to prompt users to connect to their provider Privy wallet.
tsx
import {ConnectButton} from '@rainbow-me/rainbowkit';
function Page() {
return (
<div>
<h1> My app </h1>
...
<ConnectButton />
</div>
);
}
Thats it! You can now use any wagmi hook in your application to interact with the connected wallet. When users connect and transact with their wallet, Privy will open a pop-up for users to authorize any actions.