A collection of useful React hooks for Solana development, built with @solana/web3.js
and @tanstack/react-query
. This package provides a set of commonly used hooks for Solana React projects, making it easier to interact with the Solana blockchain.
- 🚀 Built with TypeScript for better type safety
- ⚡️ Powered by
@tanstack/react-query
for efficient data fetching and caching - 🔌 Seamless integration with
@solana/web3.js
- 📦 Lightweight and easy to use
- 🧩 Modular hooks for different Solana functionalities
pnpm add @gio-shara/solana-hooks
# or
npm install @gio-shara/solana-hooks
# or
yarn add @gio-shara/solana-hooks
-
useConnection
- Hook for managing Solana connection -
useBalance
- Hook for fetching account balance -
useMintTokenInfo
- Hook for fetching token mint information -
useLatestBlockhash
- Hook for getting the latest blockhash
-
formatLamports
- Converts lamports values to SOL -
isValidSolanaAddress
- Checks the validity of a Solana address
This package requires the following peer dependencies:
-
@solana/web3.js
(^1.98.0) -
@solana/spl-token
(^0.4.13) -
@tanstack/react-query
(^5.72.2) -
react
(^19.1.0)
Before using the hooks, you need to wrap your application with the required providers. Here's how to set it up:
import { Connection } from "@solana/web3.js";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { SolanaHooksProvider } from "@gio-shara/solana-hooks";
// Create a QueryClient instance
const queryClient = new QueryClient();
// Create a Solana connection
const connection = new Connection("https://api.mainnet-beta.solana.com");
function App() {
return (
<QueryClientProvider client={queryClient}>
<SolanaHooksProvider config={{ connection }}>
{/* Your app components */}
</SolanaHooksProvider>
</QueryClientProvider>
);
}
import { formatLamports } from "@gio-shara/solana-hooks/utils";
import { useBalance } from "@gio-shara/solana-hooks";
export const ShowBalance = () => {
const { data: balance = 0, isLoading: isBalanceLoading } = useBalance({
address: "7cbGX6WKXakVrDLpGWM4b9M29YbUqToEcyWu3VitmZQS",
});
const formattedBalance = formatLamports(balance);
return <div>
<h2 className="text-lg font-bold">Show Balance</h2>
{!isBalanceLoading ? `Balance: ${formattedBalance}`: "Loading..."}</div>;
};
- Node.js >= 18.0.0
- React >= 19.1.0
MIT © Giorgi Sharashenidze
Giorgi Sharashenidze - @gio-shara