RPC Plane
Available now · Free Source available · ELv2 Rust · single binary

The self-hosted
Solana RPC proxy.

Bring your own provider keys. The RPC Plane binary adds intelligent multi-provider routing, slot-aware health scoring, circuit-breaker failover, write broadcast, and HTTP/3 — in front of Helius, QuickNode, Triton, Alchemy, and any JSON-RPC endpoint. One binary, one config file, no databases.

# Linux / macOS
curl -sSf https://rpcplane.dev/install.sh | sh
Quick start → Read the docs No signup. No API keys from us. No telemetry by default.
Drop-in

One URL change.
Everything gets better.

Swap your provider endpoint for http://localhost:9400. That's the whole integration. No SDK changes, no refactoring, no new dependencies — just failover, health scoring, slot-drift detection, and HTTP/3 on top of the providers you already pay for.

  • Speaks standard Solana JSON-RPC — solana-web3.js, Anchor, the CLI, and bots work unchanged.
  • Runs as a sidecar next to your service. No man-in-the-middle, no TLS interception, no data custody.
  • Sub-millisecond routing overhead — health scores are pre-computed, no I/O in the hot path.
# before
const conn = new Connection(
  "https://mainnet.helius-rpc.com/?api-key=..."
);

# after — one line
const conn = new Connection(
  "http://localhost:9400"
);
The proxy fans out to every provider in your config — with your keys, from your machine.
What the binary does

Reliability features,
built for Solana's semantics.

Everything below ships in the free binary. Items marked coming soon are in active development.

Intelligent routing

Each read goes to the healthiest provider, scored in real time on latency, error rate, and slot freshness. Not round-robin, not random — a live ranking.

Automatic failover

A per-provider circuit breaker opens on failure in under a second, probes for recovery, and resumes traffic automatically. No on-call rotation, no endpoint swaps at 2am.

Slot-aware health scoring

Continuously tracks each provider's slot height against network tip. A provider can return HTTP 200 and still be 14 slots behind — RPC Plane sees it and deprioritizes it.

Slot-drift detection

At ~400ms slot times, staleness is measured in fractions of a second. Drifting nodes are demoted before your application ever reads stale data from them.

Write broadcast

sendTransaction fans out to every healthy provider in parallel — the transaction reaches a leader through whichever path is fastest, maximizing landing probability.

HTTP/3 bridging

Your app stays on HTTP/1.1. The proxy speaks HTTP/3 (QUIC) to providers that support it — lower connection overhead and better p99, with zero client changes.

Prometheus metrics

An exporter on :9401/metrics publishes health scores, slot drift, circuit state, failover counts, and request durations — scrape it straight into Grafana.

Hot config reload

Edit rpc-plane.toml and changes apply within ~2 seconds — add a provider, retune routing, flip HTTP/3 — no restart, no dropped connections.

Zero infrastructure

A single statically linked binary. No Postgres, no Redis, no queues, no orchestration. Drop it in a container or run it beside your service.

Cross-provider validation

Coming soon

Periodically sample the same call across providers to catch when they disagree — identical request, divergent state — and demote the one serving stale data so routing steers around it.

Commitment-aware routing

Coming soon

Understands processed / confirmed / finalized and verifies providers actually respect the commitment level you asked for.

Routing strategies

Pick how reads are dispatched.

Set one line in your config. Writes always broadcast to every healthy provider regardless of strategy.

default
best_score
Always route reads to the highest-scoring healthy provider.
probabilistic
weighted_random
Probabilistic selection by configured weight × current health score — spreads load so no single key trips its rate limit.
ordered
failover_ordered
Try providers in config order; skip open circuits. Predictable primary/secondary behaviour.
parallel
parallel_race
Send to every healthy provider, return the fastest valid success. Lowest latency at higher request cost.
Free-tier maxxing

Four providers.
Zero dollars a month.

Stack the free tiers of Helius, QuickNode, and Alchemy with the keyless Solana Foundation public endpoint, point them all at RPC Plane, and weighted_random spreads traffic so no single key ever hits its limit. When one rate-limits, the circuit opens and reopens within seconds. Production-grade redundancy before you can justify a paid plan.

# four providers, $0/mo
api.mainnet-beta.solana.com   # no key
Helius     free tier
QuickNode  free tier # ~1 mo, then paid
Alchemy    free tier

[routing]
strategy = "weighted_random"
circuit_cooldown_secs = 2
Why RPC Plane

Why not just…

Two ways teams handle Solana RPC today — and where each one leaves you exposed.

…point at one provider?

The default setup: your app talks to a single RPC URL.

One provider is one point of failure — its outage is your outage, with no path around it.
A stale-but-200 response looks healthy to your client. You read wrong data and never know.
A dropped sendTransaction has no second path to a leader.
Health-scored routing across every provider, with automatic failover in under a second.
Slot-drift detection demotes stale providers before you read from them.
Write broadcast fans transactions out to every healthy provider in parallel.

…write your own failover?

A retry loop that flips to a backup URL on error.

Retries catch 5xx, not stale data. A provider behind tip returns 200 and your loop trusts it.
No slot tracking, no health ranking, no circuit breaker — you're rebuilding all of it.
It lives in every service and language you ship, and it's yours to maintain forever.
Slot-aware scoring, circuit breakers, and hot reload — built, tested, and maintained.
One sidecar binary, one config file — shared by every service regardless of language.
Prometheus metrics out of the box, so you can see what's happening instead of guessing.
Not another RPC provider — the neutral layer above the ones you already use. See how it fits across trading, wallets, indexers, and infra teams →
Quick start

Three commands.
No signup, just a binary.

1Install
# Linux / macOS
curl -sSf https://rpcplane.dev/install.sh | sh
Or GitHub Releases · cargo install · Docker.
2Configure
rpc-plane init
# writes rpc-plane.toml with
# every option and its default
Add your provider URLs. Reference secrets with ${VAR}.
3Run
rpc-plane run
# proxy on :9400
# metrics on :9401/metrics
Point your app at http://localhost:9400 — done.
$ rpc-plane statuslive provider health
  NAME        SCORE          SLOT   DRIFT     LATENCY  CIRCUIT
  --------  -------  ------------  ------  ----------  -------
  provider-a  0.912   341892471       0      23.4ms     closed
  provider-b  0.841   341892469       2      31.1ms     closed
  provider-c  0.000           —       —           —     open
Linux
x86_64 · aarch64
macOS
x86_64 · arm64
Docker
ghcr.io/rpcplane
Source
cargo install
Where it fits

The binary is the foundation.

Run it free forever. Add hosted visibility and zero-ops on top when you need them — same routing engine throughout.

FAQ

Common questions

Is the binary free?

Yes — free and source-available under the Elastic License 2.0. No per-request fees, no request or provider limits.

Does it store my provider keys?

No. The binary runs on your machine and talks to your providers directly. No data custody; nothing leaves your infrastructure unless you opt in to the hosted dashboard.

Do I have to change my code?

No. Point your client at http://localhost:9400. Standard JSON-RPC means solana-web3.js, Anchor, the CLI, and bots all work unchanged.

Which providers work?

Any HTTP JSON-RPC Solana endpoint — Helius, QuickNode, Triton, Alchemy, Chainstack, the public endpoint, and your own validators.

Is it production ready?

Yes. Single Rust binary, sub-millisecond routing overhead, Prometheus metrics, hot reload, per-provider circuit breakers. Run it as a sidecar.

Does it work for trading bots?

Yes — write broadcast plus slot-drift demotion is built for landing transactions before the slot closes. See more →

Install the binary today.

Free, source-available, drop-in. One config file, one URL change.