Other providers¶
RPC Plane works with any Solana JSON-RPC endpoint. There is no provider registry and no per-provider adapter — the proxy speaks standard JSON-RPC, so an endpoint that a Solana client can talk to is an endpoint RPC Plane can route to.
Adding a provider that isn't listed¶
name is yours to choose — it is what appears in logs, on /health, and as the provider label on
every Prometheus metric. url takes the full endpoint including whatever credential scheme the
provider uses, whether that is a query parameter, a path segment, or neither.
Can I use a public Solana RPC endpoint?¶
For development, yes. Two need no account and no key:
https://api.mainnet-beta.solana.com # Solana Foundation
https://solana-rpc.publicnode.com # PublicNode, operated by Allnodes
Solana Foundation¶
It needs no key. It is also heavily rate-limited, per the Solana cluster documentation:
| Limit | Value |
|---|---|
| Requests | 100 per 10s per IP |
| Requests to a single RPC method | 40 per 10s per IP (4/s — the one you hit first) |
| Concurrent connections | 40 per IP |
| Connection rate | 40 per 10s per IP |
| Data | 100 MB per 30s |
Solana's own documentation is unambiguous about production use: "The public RPC endpoints are not intended for production applications. Please use dedicated/private RPC servers when you launch your application, drop NFTs, etc."
If you do point RPC Plane at it, cap it so the proxy sheds load to a real provider before the public node starts refusing:
Note the per-method row above: any single method is capped at 4/s, well under the 10/s overall. If
your traffic is concentrated on one call — and most traffic is — that is the real ceiling, and
max_rps = 10 will not enforce it. See
working around a per-method limit.
PublicNode¶
PublicNode, operated by Allnodes, serves Solana mainnet free with no
signup. Verified answering getHealth and getSlot on mainnet 2026-09-05.
It publishes no rate limits, which is a mixed blessing: nothing documented to design against, and
no commitment that today's capacity holds tomorrow. Give it a conservative max_rps and raise it
only on evidence — watch rpc_plane_rate_limited_total{provider="publicnode"} and the upstream 429
rate:
[[providers]]
name = "publicnode"
url = "https://solana-rpc.publicnode.com"
max_rps = 10 # no published limit — a starting guess, not a documented cap
history = "recent"
It also keeps only recent history. Checked on 2026-10-27, it answered getTransaction with null
for a transaction 7 days old and returned 87 of an address's latest 1000 signatures from
getSignaturesForAddress, with no error either time. history = "recent" sends those lookups to a
full-history provider instead; see recent-history providers.
Same caveat as any public endpoint: no SLA, and no one to call. Fine as a failover leg or a development default, not as a production primary. See free-tier maxxing for running both public endpoints alongside three free tiers.
Can I use my own validator?¶
Yes — a self-hosted node is just another URL, including over a private network:
This is a common pairing: your own node as primary for the cheap, high-volume reads, and a
commercial provider as failover for the calls your node can't serve — archival history, for
instance, if you don't run with --enable-rpc-transaction-history. Use failover_ordered so the
paid provider only takes traffic when the local node is unhealthy. See
routing strategies.
A node serves only the ledger it keeps locally unless it is connected to long-term storage, so mark
it history = "recent". Its null or "history not available" answer to getTransaction or
getBlock then fails over to the commercial provider, and getSignaturesForAddress goes straight
there. See history lookups.
What works regardless of provider¶
Everything in the request path is provider-agnostic:
- Health scoring — latency, error rate, slot drift, and success rate, measured live per provider.
- Circuit breaking — a failing provider is taken out and probed back in.
- Routing — all four strategies work across any mix of providers.
max_rps— cap dispatch to match whatever rate limit your provider documents.- Metrics — the same Prometheus series, labelled with the
nameyou chose.
None of it requires the provider to be one RPC Plane knows about.
Submission-only endpoints¶
If an endpoint only accepts writes — a transaction-landing service, say — restrict it with methods
so it never receives reads it cannot answer:
[[providers]]
name = "lander"
url = "https://lander.example.com/${LANDER_KEY}"
methods = ["sendTransaction"]
A provider that excludes getSlot skips the health probe and is scored from live request outcomes
instead. See submission-only providers.
What you don't get¶
The provider pricing reference tracks published per-method rates for Alchemy, Helius, dRPC, Triton One, OnFinality, Chainstack and QuickNode. A provider outside that list has no complete rate data — GetBlock, Ankr, Shyft, RPC Fast, Syndica, Blockdaemon and Uniblock were all checked and don't publish enough to cost a full workload — so it won't appear in those cost comparisons. Routing and health scoring are unaffected.