---
title: Kora
description: Solana Signing Infrastructure
---

**Kora is your Solana signing infrastructure.** Enable gasless transactions
where users pay fees in any token—USDC, BONK, or your app's native token—or
handle any transaction signing that requires a trusted signer.

### Why Kora?

- **Better UX**: Users never need SOL
- **Revenue Control**: Collect fees in USDC, your token, or anything else
- **Production Ready**: Secure validation, rate limiting, monitoring built-in
- **Easy Integration**: JSON-RPC API + TypeScript SDK
- **Flexible Deployment**: Railway, Docker, or any cloud platform

### Architecture

- **Language**: Rust with TypeScript SDK
- **Protocol**: JSON-RPC 2.0
- **Signers**: Solana Private Key, Turnkey, Privy
- **Authentication**: API Key, HMAC, or none
- **Deployment**: Flexible deployment options (Docker, Railway, etc.)

### Features

- Configurable validation rules and allowlists
- Full Token-2022 support with extension filtering
- Redis caching for improved performance
- Rate limiting and spend protection
- Secure key management (Turnkey, Privy, Vault)
- HMAC and API key authentication
- Prometheus metrics and monitoring
- Enhanced fee payer protection policies

## Quick Start

Install Kora:

```bash
cargo install kora-cli
```

Basic usage:

```bash
kora rpc [OPTIONS] # --help for full list of options
```

**[→ Quick Start Guide](/docs/tools/kora/getting-started/quick-start)** - Get
Kora running locally in minutes

**[→ Node Operator Guide](/docs/tools/kora/operators)** - Run a paymaster

## TypeScript SDK

Kora provides a simple JSON-RPC interface with three client options:

```typescript
// Option 1: Standalone client
import { KoraClient } from "@solana/kora";
const kora = new KoraClient({ rpcUrl: "http://localhost:8080" });
const signed = await kora.signTransaction({ transaction });

// Option 2: Kit client (recommended) — handles planning, fees, signing, and sending
import { createKitKoraClient } from "@solana/kora";
import { address } from "@solana/kit";
const client = await createKitKoraClient({
  endpoint: "http://localhost:8080",
  rpcUrl: "https://api.mainnet-beta.solana.com",
  feeToken: address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v"),
  feePayerWallet: userSigner
});
```

**[→ API Reference](/docs/tools/kora/json-rpc-api)** - JSON-RPC methods and
TypeScript SDK

## Local Development

### Prerequisites

- Rust 1.86+ or
- Solana CLI 2.2+
- Node.js 20+ and pnpm (for SDK)

### Installation

```bash
git clone https://github.com/solana-foundation/kora.git
cd kora
git checkout v2.0.5
just install
```

### Build

```bash
just build
```

### Running the Server

Basic usage:

```bash
kora rpc [OPTIONS]
```

Or for running with a test configuration, run:

```bash
just run
```

### Local Testing

And run all tests:

```bash
just test-all
```

## Community & Support

- **Questions?** Ask on
  [Solana Stack Exchange](https://solana.stackexchange.com/) (use the `kora`
  tag)
- **Issues?** Report on
  [GitHub Issues](https://github.com/solana-foundation/kora/issues)

## Other Resources

- [Kora CLI Crates.io](https://crates.io/crates/kora-cli) - Rust crate for
  running a Kora node
- [@solana/kora NPM Package](https://www.npmjs.com/package/@solana/kora) -
  TypeScript SDK for interacting with a Kora node

## Source

- [GitHub Repository](https://github.com/solana-foundation/kora)

Built and maintained by the [Solana Foundation](https://solana.org).

Licensed under MIT. See
[LICENSE](https://github.com/solana-foundation/kora/blob/main/LICENSE.md) for
details.
