| title | Use Framework Kit - MetaMask Connect Solana | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| sidebar_label | Use Framework Kit | ||||||||||
| description | Set up Framework Kit with MetaMask Connect Solana in a React dapp for simplified RPC connections, wallet management, and hook-based state. | ||||||||||
| keywords |
|
Framework Kit is a React library that simplifies Solana dapp development. It handles RPC connections, wallet adapters, and state management, so you can interact with Solana using React hooks.
Framework Kit supports MetaMask out-of-the-box. This guide walks you through setting it up.
- Node.js version 19 or later
- A package manager such as npm, Yarn, pnpm, or bun
- A React or Next.js project
Install Framework Kit's Solana client and React hooks:
npm install @solana/client @solana/react-hooksCreate a SolanaProviderWrapper component that initializes the Solana client with MetaMask support:
'use client';
import { createClient, metamask } from "@solana/client";
import { SolanaProvider } from "@solana/react-hooks";
import { FC, ReactNode } from 'react';
// Create a client pointing to Solana devnet
const client = createClient({
endpoint: "https://solana-devnet.infura.io/v3/YOUR_INFURA_API_KEY",
walletConnectors: [...metamask()],
});
interface SolanaProviderWrapperProps {
children: ReactNode;
}
export const SolanaProviderWrapper: FC<SolanaProviderWrapperProps> = ({ children }) => {
return (
<SolanaProvider client={client}>
{children}
</SolanaProvider>
);
};Wrap your application with SolanaProviderWrapper so all components can access Solana hooks:
import './globals.css';
import { SolanaProviderWrapper } from '@/components/SolanaProvider';
export default function RootLayout({
children
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html>
<body>
<SolanaProviderWrapper>{children}</SolanaProviderWrapper>
</body>
</html>
);
}Use the useWalletConnection hook in any component to connect to the user's wallet:
import { useWalletConnection } from "@solana/react-hooks";
export const ConnectWallet = () => {
const { wallet, connect, disconnect } = useWalletConnection();
if (wallet) {
return (
<div>
<p>Connected: {wallet.accounts[0].address}</p>
<button onClick={disconnect}>Disconnect</button>
</div>
);
}
return <button onClick={() => connect("metamask")}>Connect MetaMask</button>;
};See how to send a legacy transaction and a versioned transaction.