Kit Client Integration
Build gasless transactions using createKitKoraClient with Kit's plugin architecture for automatic fee handling.
Last Updated: 2026-03-09
What You'll Build
The Kit client (createKitKoraClient) is the recommended way to integrate Kora into Solana applications. It wraps Kora's fee abstraction into Kit's plugin architecture, giving you a client that automatically handles:
- Blockhash management
- Fee estimation and payment instruction injection
- Transaction signing via Kora
- Transaction submission and confirmation
- Compute budget optimization (simulation-based CU estimation)
This means you can use Kit program plugins like tokenProgram() and have Kora handle all the gas fee complexity behind the scenes.
Prerequisites
- Completed the Kora Quick Start Guide — running Kora server and local validator
- Familiarity with Solana Kit and its plugin system
Installation
pnpm add @solana/kora @solana/kitPeer dependencies (@solana-program/token, @solana-program/compute-budget, @solana/kit-plugin-*) are auto-installed by most package managers. See Installation if you need to install them manually.
Creating the Client
createKitKoraClient composes multiple Kit plugins into a single client that satisfies ClientWithPayer, ClientWithTransactionPlanning, and ClientWithTransactionSending.
import { createKitKoraClient } from '@solana/kora';
import { address } from '@solana/kit';
const client = await createKitKoraClient({
endpoint: 'http://localhost:8080', // Kora RPC endpoint
rpcUrl: 'http://127.0.0.1:8899', // Solana RPC for CU estimation
feeToken: address('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'), // USDC mint
feePayerWallet: userSigner, // TransactionSigner for fee payment
});The feePayerWallet must be a TransactionSigner — this is the wallet that authorizes the SPL token fee payment to the Kora operator. The Kora operator handles the SOL network fees.
Configuration Options
| Option | Required | Description |
|---|---|---|
endpoint | Yes | Kora RPC endpoint URL |
rpcUrl | Yes | Solana RPC URL (not the Kora endpoint) — used for compute unit simulation and program plugin compatibility |
feeToken | Yes | SPL mint address for fee payment (e.g., USDC) |
feePayerWallet | Yes | TransactionSigner that authorizes the SPL fee payment |
apiKey | No | API key for Kora authentication |
hmacSecret | No | HMAC secret for signature-based authentication |
computeUnitLimit | No | Fixed CU limit. If omitted, Kora simulates the transaction to estimate optimal CU (recommended) |
computeUnitPrice | No | Priority fee in micro-lamports |
tokenProgramId | No | Defaults to Token Program. Set to TOKEN_2022_PROGRAM_ADDRESS for Token-2022 fee tokens |
Using with Kit Program Plugins
The Kit client is composable with Kit program plugins. For example, with tokenProgram():
import { createKitKoraClient } from '@solana/kora';
import { tokenProgram } from '@solana-program/token';
import { address } from '@solana/kit';
const koraClient = await createKitKoraClient({
endpoint: 'http://localhost:8080',
rpcUrl: 'http://127.0.0.1:8899',
feeToken: address('EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v'),
feePayerWallet: userSigner,
});
// Compose with the token program plugin
const client = koraClient.use(tokenProgram());
// Use token program methods — Kora handles all fee abstraction
await client.token.instructions
.transferToATA({
source: userTokenAccount,
destination: recipientAddress,
amount: 1_000_000n, // 1 USDC
authority: userSigner,
})
.sendTransaction();Behind the scenes, the Kit client:
- Plans the transaction with a Kora-managed blockhash and compute budget instructions
- Estimates the fee and injects (or updates) the SPL payment instruction to the Kora operator
- Partially signs the transaction with the user's wallet
- Sends the transaction to Kora for co-signing and submission to Solana
Accessing Kora RPC Methods
The Kit client also exposes the full Kora API via the .kora namespace (from the koraPlugin):
// Get server configuration
const config = await client.kora.getConfig();
// Get supported fee tokens
const { tokens } = await client.kora.getSupportedTokens();
// Estimate fees for an arbitrary transaction
const estimate = await client.kora.estimateTransactionFee({
transaction: base64EncodedTx,
fee_token: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
});All .kora method responses use Kit-typed values (Address, Blockhash, Signature) instead of raw strings.
Token-2022 Support
To pay fees with a Token-2022 token, pass the tokenProgramId option:
import { TOKEN_2022_PROGRAM_ADDRESS } from '@solana-program/token-2022';
const client = await createKitKoraClient({
endpoint: 'http://localhost:8080',
rpcUrl: 'http://127.0.0.1:8899',
feeToken: address('your-token-2022-mint'),
feePayerWallet: userSigner,
tokenProgramId: TOKEN_2022_PROGRAM_ADDRESS,
});Compute Budget
By default, the Kit client simulates the transaction against the Solana RPC to determine the optimal compute unit limit. This results in tighter CU allocation and lower fees.
To override with a fixed value:
const client = await createKitKoraClient({
// ...
computeUnitLimit: 200_000,
computeUnitPrice: 1_000_000n, // priority fee in micro-lamports
});When to Use Each Client
| Client | Use Case |
|---|---|
createKitKoraClient | Recommended. Full Kit integration with automatic fee handling. Best for applications using Kit program plugins. |
KoraClient | Direct RPC access when you need full control over transaction construction, signing, and submission. |
koraPlugin | Adding Kora methods to an existing Kit client you've already composed with other plugins. |
Next Steps
- Full Transaction Flow — Lower-level walkthrough using
KoraClientdirectly - API Reference — All available RPC methods
- Kora Configuration — Server-side configuration options