Documentation Index
Fetch the complete documentation index at: https://docs.getpara.com/llms.txt
Use this file to discover all available pages before exploring further.
Para supports multiple Solana libraries. Choose your library below.
Prerequisites
@solana/kit
@solana/web3.js
Anchor
The modern Solana library with the @solana/signers interface. Recommended for new projects.Install
npm install @getpara/react-sdk @solana/kit
@getpara/react-sdk bundles @getpara/solana-signers-v2-integration — no separate integration package needed.
Usage
Hook (React)
Direct (Non-React)
Use the hook to create a Solana signer for your user’s Para embedded wallet or external wallet. The hook wraps transaction signing in a React Query mutation.import { useParaSolanaSigner } from "@getpara/react-sdk";
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
function SolanaExample() {
const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
if (isLoading) return <p>Loading...</p>;
return <p>Address: {solanaSigner?.address}</p>;
}
Wallet Resolution
When no address or walletId is passed, the hook resolves the wallet in this order:
- Selected wallet — if the user selected a Solana wallet in the UI. If there is only one Solana wallet in the session, it is already selected by default
- First Solana wallet — the first available Solana wallet on the account
To target a specific wallet:const { solanaSigner } = useParaSolanaSigner({ rpc, address: "SoLaNa..." });
Use createParaSolanaSigner to create a signer directly.import { createParaSolanaSigner } from "@getpara/solana-signers-v2-integration";
import { createSolanaRpc } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const signer = createParaSolanaSigner({ para, rpc });
console.log("Address:", signer.address);
Wallet Resolution
When no address or walletId is passed, the factory picks the first available Solana wallet. The legacy Solana Web3.js library. Use for compatibility with existing projects.Install
npm install @getpara/solana-web3.js-v1-integration @solana/web3.js
There is no built-in hook for @solana/web3.js — use the constructor directly or create a custom hook.
Usage
import { ParaSolanaWeb3Signer } from "@getpara/solana-web3.js-v1-integration";
import { Connection, clusterApiUrl } from "@solana/web3.js";
const connection = new Connection(clusterApiUrl("mainnet-beta"));
const signer = new ParaSolanaWeb3Signer(para, connection);
For interacting with Anchor programs using modern Codama-generated clients. Uses the same useParaSolanaSigner hook — no separate Anchor integration needed.Codama generates type-safe TypeScript clients from Anchor IDLs that work natively with @solana/kit and @solana/signers. Your Para signer is already compatible. Install
npm install @getpara/react-sdk @solana/kit
Then generate your program client with Codama:npx codama idl path/to/your_program.json -o src/generated
Usage
Hook (React)
Direct (Non-React)
Use useParaSolanaSigner — the returned signer works directly with Codama-generated instructions. Wallet resolution is the same as the @solana/kit tab.import { useParaSolanaSigner } from "@getpara/react-sdk";
import { createSolanaRpc } from "@solana/kit";
import { pipe, createTransactionMessage, setTransactionMessageFeePayerSigner,
setTransactionMessageLifetimeUsingBlockhash, appendTransactionMessageInstruction } from "@solana/transactions";
import { getInitializeInstruction } from "./generated";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
function AnchorProgramInteraction() {
const { solanaSigner, isLoading } = useParaSolanaSigner({ rpc });
const callProgram = async () => {
if (!solanaSigner) return;
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
const instruction = getInitializeInstruction({
user: solanaSigner,
});
const transactionMessage = pipe(
createTransactionMessage({ version: 0 }),
tx => setTransactionMessageFeePayerSigner(solanaSigner, tx),
tx => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
tx => appendTransactionMessageInstruction(instruction, tx),
);
// Sign and send using the signer
};
if (isLoading) return <p>Loading...</p>;
return <button onClick={callProgram}>Call Program</button>;
}
import { createParaSolanaSigner } from "@getpara/solana-signers-v2-integration";
import { createSolanaRpc } from "@solana/kit";
import { getInitializeInstruction } from "./generated";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const signer = createParaSolanaSigner({ para, rpc });
const instruction = getInitializeInstruction({
user: signer,
});
Next Steps