Releases: rainbow-me/rainbowkit
@rainbow-me/[email protected]
Minor Changes
-
9ce75a6: The new
WalletButton
component helps dApps with custom wallet list implementations adopt RainbowKit and all of it's maintenance-free benefits.import { WalletButton } from '@rainbow-me/rainbowkit'; <WalletButton wallet="rainbow" /> <WalletButton wallet="metamask" /> <WalletButton wallet="coinbase" />
Like the
ConnectButton
, theWalletButton.Custom
component is available for custom implementations and styling.<WalletButton.Custom wallet="rainbow"> {({ ready, connect }) => { return ( <button type="button" disabled={!ready} onClick={connect}> Connect Rainbow </button> ); }} </WalletButton.Custom>
Most dApps are best served by the ConnectButton. Reference the docs here for more information about
WalletButton
adoption and usecases.
@rainbow-me/[email protected]
@rainbow-me/[email protected]
Minor Changes
-
9ce75a6: The
RainbowButton
component is the simplest way to add support for Rainbow Wallet to dApps that usewagmi
and prefer a more custom connector experience over RainbowKit.1. Install
@rainbow-me/rainbow-button
and its peer dependenciesThe package is compatible with Next.js, React, and Vite. Ensure that you follow peer dependency warnings.
npm install @rainbow-me/rainbow-button wagmi viem
2. Configure with Wagmi and install the RainbowButton
Pass an instance of the
RainbowConnector
to your Wagmi connector list, and wrap your app in theRainbowButtonProvider
. Then drop-in theRainbowButton
component into your wallet list.import "@rainbow-me/rainbow-button/styles.css"; import { RainbowButtonProvider, RainbowConnector, } from "@rainbow-me/rainbow-button"; const wagmiClient = createConfig({ connectors: [new RainbowConnector({ chains, projectId })], publicClient, }); function MyApp({ Component, pageProps }: AppProps) { return ( <WagmiConfig config={wagmiClient}> <RainbowButtonProvider>{/* Your App */}</RainbowButtonProvider> </WagmiConfig> ); } export const YourApp = () => { return <RainbowButton />; };
You can also use the
RainbowButton.Custom
component for custom implementations and styling.<RainbowButton.Custom> {({ ready, connect }) => { return ( <button type="button" disabled={!ready} onClick={connect}> Connect Rainbow </button> ); }} </RainbowButton.Custom>
3. And that's it!
Now your users can enjoy a seamless connection experience for Rainbow — without any maintenance or headaches.
A
WalletButton
component is also available in RainbowKit if you'd like to adopt support for additional wallets.
@rainbow-me/[email protected]
Patch Changes
-
74ead9d: Tokenary Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { tokenaryWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [tokenaryWallet({ chains })], }, ]);
-
94dce82: Fixed scroll bar inconsistencies in the Chain selector for large chain lists or when animating upon user interaction
-
39d81e9: Fixed a bug where the avatar loading indicator had used excessive CPU cycles
@rainbow-me/[email protected]
Minor Changes
-
ef64a22: Improved desktop wallet download support
RainbowKit wallet connectors now support desktop download links and desktop
wallet instructions.Dapps that utilize the Custom Wallets API can reference the updated docs here.
{ downloadUrls: { windows: 'https://my-wallet/windows-app', macos: 'https://my-wallet/macos-app', linux: 'https://my-wallet/linux-app', desktop: 'https://my-wallet/desktop-app', } }
We've also introduced a new 'connect'
InstructionStepName
type in theinstructions
API to provide wallet connection instructions.return { connector, desktop: { getUri, instructions: { learnMoreUrl: 'https://my-wallet/learn-more', steps: [ // ... { description: 'A prompt will appear for you to approve the connection to My Wallet.' step: 'connect', title: 'Connect', } ] }, }, }
@rainbow-me/[email protected]
@rainbow-me/[email protected]
Patch Changes
-
02e796c: SafePal Wallet Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { safepalWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [safepalWallet({ projectId, chains })], }, ]);
-
efb8566: SubWallet Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { subWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains, projectId }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [subWallet({ chains, projectId })], }, ]);
-
4b7a44c: Okto Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { oktoWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, projectId, chains }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [oktoWallet({ projectId, chains })], }, ]);
-
2c8abbb: Zeal Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { zealWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [zealWallet({ chains })], }, ]);
-
e41103f: CLV Wallet Support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { clvWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [clvWallet({ chains, projectId })], }, ]);
-
b0022ae: Desig Wallet support
Example usage
import { getDefaultWallets, connectorsForWallets, } from "@rainbow-me/rainbowkit"; import { desigWallet } from "@rainbow-me/rainbowkit/wallets"; const { wallets } = getDefaultWallets({ appName, chains, projectId }); const connectors = connectorsForWallets([ ...wallets, { groupName: "Other", wallets: [desigWallet({ chains })], }, ]);
@rainbow-me/[email protected]
Patch Changes
- 6cbd9a5: Added
zkSync
andzkSyncTestnet
network support - b2b69dc: Added
holesky
testnet support - 7d97860: Fixed an issue where a user would not get automatically logged out from the Authentication API after switching their wallet in MetaMask or other browser wallets. Users must now sign a new SIWE message after switching wallets.
@rainbow-me/[email protected]
Patch Changes
- b60e335: Fixed a dependency resolution issue for
ESModule
projects related toi18n-js
@rainbow-me/[email protected]
Minor Changes
-
b37f5d6: RainbowKit is now localized in 13 languages and counting 🌎
A user's preferred language is automatically detected and the wallet linking experience will be fully localized out of the box, including the
ConnectButton
. Developers can always customize the language selection or allow their users to choose a different language by passing alocale
prop toRainbowKitProvider
like so:<RainbowKitProvider locale="zh-CN">
RainbowKit's localization support works even better alongside i18n support in Next.js, so that locale selection can be specifed with custom domains or a subpath like
/zh-CN/
. Reference our guide to learn more.If you would like to see support for an additional language, please open a GitHub Discussion and we'll work to support it as soon as possible.