RPC Providers
Choose between managed RPC providers (Helius, Triton, QuickNode) and self-hosted Agave validators based on traffic, features, and operational cost.
Search across all documentation pages
Choose between managed RPC providers (Helius, Triton, QuickNode) and self-hosted Agave validators based on traffic, features, and operational cost.
Quick-reference recipe card - copy-paste ready.
import { createSolanaRpc } from "@solana/kit";
// Provider (API key in URL or header per vendor)
const rpc = createSolanaRpc(
"https://mainnet.helius-rpc.com/?api-key=YOUR_KEY"
);
await rpc.getSlot().send();# Self-hosted (operator)
agave-validator --ledger /data/ledger --rpc-port 8899When to reach for this:
import { createSolanaRpc, createSolanaRpcSubscriptions } from "@solana/kit";
const HTTP = process.env.RPC_HTTP_URL!;
const WSS = process.env.RPC_WSS_URL!;
const rpc = createSolanaRpc(HTTP);
const rpcSubscriptions = createSolanaRpcSubscriptions(WSS);
const slot = await rpc.getSlot().send();
console.log("slot:", slot);
// Health check script for CI
if (slot < 1) throw new Error("RPC unhealthy");What this demonstrates:
getSlot probe validates endpoint health.agave-validator with your own stake, ops, and failover.| Option | Strengths | Trade-offs |
|---|---|---|
| Helius | DAS, webhooks, dev tooling | Vendor coupling for advanced APIs |
| Triton | Yellowstone gRPC, performance | Ops integration complexity |
| QuickNode | Multi-chain familiarity | Solana-specific feature depth varies |
| Public RPC | Free, zero setup | Rate limits, no SLA |
| Self-host | Control, privacy | Staffing, stake, reliability burden |
// Failover: try secondary URL on 429/503
async function rpcWithFallback<T>(fn: (rpc: ReturnType<typeof createSolanaRpc>) => Promise<T>) {
const primary = createSolanaRpc(process.env.RPC_PRIMARY!);
try {
return await fn(primary);
} catch (e) {
const secondary = createSolanaRpc(process.env.RPC_SECONDARY!);
return await fn(secondary);
}
}| Alternative | Use When | Don't Use When |
|---|---|---|
| Public devnet RPC | Prototypes | Production mainnet |
| Colocated validator + provider hybrid | Trading firms | Simple NFT mint site |
| IPFS-only metadata | Static assets | RPC needs |
| Light client (future/experimental) | Extreme decentralization | Current production default |
Public devnet works early; provider improves reliability for team CI and demos.
Estimate peak RPS from MAU, GPA weight, and websocket connections - load test before launch.
Usually same API key on paired URLs - verify vendor docs.
Sometimes at very high sustained RPS if you already operate staking ops - include engineer and hardware cost.
gRPC Geyser interface - Triton and others expose for indexers (Yellowstone gRPC).
Use restricted devnet key with low rate cap - never commit mainnet keys to public repos.
Providers run validator versions on their rollout schedule - occasional method/version skew - monitor status pages.
Yes - primary/secondary failover or split reads vs writes if vendor supports.
Some do briefly - do not rely on cache for post-transaction reads without refresh.
Choose region closest to users and servers; test getSlot RTT from deployment region.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026