Solana gRPC guide
What Yellowstone gRPC is, how it compares with WebSocket and RPC polling, what you can subscribe to, and how to connect in a few lines of TypeScript or Rust.
What is Solana gRPC?
Yellowstone gRPC is the streaming interface the Solana ecosystem has settled on for real-time chain data. It runs as a Geyser plugin on a validator and exposes account, transaction, slot, block and entry updates over a gRPC stream. Payloads are protobuf, filters run on the server, and the protocol has flow control.
If you build a trading bot, an indexer, a wallet or an explorer and need to see what happens on Solana as it happens, this is what you use. JSON-RPC and WebSocket pubsub still work, but they cost more to run at scale.
gRPC vs WebSocket vs RPC polling
| Aspect | HTTP RPC polling | WebSocket pubsub | Yellowstone gRPC |
|---|---|---|---|
| Delivery | Pull: request and response | Push, one subscription per account or program | Push, one stream with many filters |
| Wire format | JSON | JSON | Protobuf (binary) |
| Filtering | None; the client polls | Per subscription | Rich filters on the server |
| Flow control | Not applicable | TCP only | Built into gRPC |
| When you learn of a change | On your next poll | When the node pushes the notification | As the validator processes it |
| Best for | Occasional lookups, batch analytics | Low-volume wallet and UI updates | MEV, indexing, trading, order books |
What you can subscribe to
A Yellowstone stream is one Subscribe call. Each request carries named filters of these kinds:
accounts: account changes by address, owner program or data filtertransactions: transactions by the accounts they include, exclude or require, with or without votes and failed onestransactionsStatus: the status of matching transactions without their full payloadslots: slot status as it moves through processed, confirmed and finalizedblocksandblocksMeta: full blocks, or only their metadataentry: entries as the validator records them
The service also answers unary calls such as GetLatestBlockhash, GetSlot, GetBlockHeight, IsBlockhashValid, GetVersion and Ping. Filters of different kinds combine in one stream: all successful transactions touching program X plus updates to account Y is one subscription, not two.
Quick start — TypeScript
A minimal subscription to pump.fun transactions, against AllenHark's Frankfurt endpoint. Your server's IP must be on your allowlist; other providers expect an x-token as the second argument.
import Client, {
CommitmentLevel,
SubscribeRequest,
} from "@triton-one/yellowstone-grpc";
// AllenHark authenticates by your server's IP, so there is no token.
const client = new Client("http://88.216.36.108:10001", undefined, {
"grpc.max_receive_message_length": 64 * 1024 * 1024,
});
const req: SubscribeRequest = {
accounts: {},
slots: {},
transactions: {
pumpfun: {
accountInclude: ["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P"],
accountExclude: [],
accountRequired: [],
vote: false,
failed: false,
},
},
transactionsStatus: {},
blocks: {},
blocksMeta: {},
entry: {},
accountsDataSlice: [],
commitment: CommitmentLevel.PROCESSED,
};
const stream = await client.subscribe();
stream.on("data", (update) => console.log(update.transaction));
stream.write(req);Quick start — Rust
use futures::StreamExt;
use yellowstone_grpc_client::GeyserGrpcClient;
use yellowstone_grpc_proto::prelude::*;
let mut client = GeyserGrpcClient::build_from_shared("http://88.216.36.108:10001")?
.connect()
.await?;
let (mut tx, mut rx) = client.subscribe().await?;
tx.send(SubscribeRequest {
transactions: [("pumpfun".into(), SubscribeRequestFilterTransactions {
account_include: vec!["6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P".into()],
vote: Some(false),
failed: Some(false),
..Default::default()
})].into_iter().collect(),
commitment: Some(CommitmentLevel::Processed as i32),
..Default::default()
}).await?;
while let Some(update) = rx.next().await {
println!("{:?}", update?);
}Who provides Yellowstone gRPC?
Most Solana infrastructure providers offer it. Choose on where their endpoints are relative to your servers, how they authenticate, how many streams a plan allows, and how they bill:
- Helius: LaserStream, a Yellowstone-compatible stream
- Triton One: Dragon's Mouth, from the maintainers of Yellowstone
- QuickNode: Yellowstone gRPC on its larger plans or as an add-on
- Chainstack: a Geyser add-on
- Shyft: a multi-region gRPC network next to its indexed APIs
- AllenHark: Yellowstone gRPC in Frankfurt and Amsterdam, by IP allowlist, $5 a day or $99 a month, next to our ShredStream, transaction landing and servers
Latency optimizations
Four levers, in order of impact:
- Run the consumer near the endpoint. Many Solana validators sit in European data centres such as Frankfurt and Amsterdam. A server of your own in the same city as the endpoint takes the long network path out.
- Filter on the server. Every byte sent to you is a byte your client must keep up with. Most slow gRPC clients are slow because they asked for everything.
- Use
processedcommitment when you can handle an occasional rollback. It arrives beforeconfirmed, and well beforefinalized, which trails by about 32 slots. - Go one layer lower with shreds. gRPC shows what the validator has already processed. ShredStream delivers shreds or reconstructed entries while the block is still being built.
When not to use gRPC
Don't reach for gRPC for everything. A batch indexer that catches up overnight is simpler with getSignaturesForAddress over RPC. A wallet showing a balance is fine on WebSocket pubsub. gRPC earns its keep as the number of things you watch grows and the time you have to react shrinks: a bot watching 20,000 accounts and acting within a slot is the case it was built for.
Further reading
- AllenHark Yellowstone gRPC: plans, regions and how to connect
- ShredStream: the layer below gRPC
- Docs: AllenHark gRPC endpoints
- Blog: landing Solana transactions in 2026
Frequently asked questions
What is Yellowstone gRPC on Solana?
Yellowstone gRPC is a streaming interface for Solana data, served from a validator's Geyser plugin. It pushes account updates, transactions, slots, blocks and entries over a gRPC stream with protobuf payloads and server-side filters. Triton One maintains it, and it has become the standard streaming interface across Solana providers, including Helius, QuickNode, Shyft, Chainstack and AllenHark.
How is gRPC different from Solana WebSocket subscriptions?
WebSocket pubsub sends JSON and needs a subscription per account or program, with no rich filtering on the server. gRPC sends binary protobuf, lets one Subscribe request carry many filters, and has flow control built into the protocol. For a bot watching thousands of accounts, that means one stream instead of thousands of subscriptions.
How is gRPC different from standard RPC polling?
Standard RPC is request and response: you ask, wait, and ask again, so you learn about a change only on your next poll. gRPC pushes each update as the validator processes it. For watching accounts, detecting trades or replicating order-book state, push is both simpler and sooner.
What can I subscribe to on a Solana gRPC stream?
One Subscribe request carries filters for accounts (by address, owner or data), transactions (by accounts involved, with or without votes and failed ones), transaction status, slots, blocks, block metadata and entries. You can combine them, for example all successful transactions touching one program, plus updates to one account, in a single stream.
What languages can I use for Solana gRPC?
Any language with a gRPC client. There are maintained clients for Rust (yellowstone-grpc-client) and TypeScript (@triton-one/yellowstone-grpc), and the protobuf definitions are open, so you can generate bindings for Python, Go, Java or anything else gRPC supports.
Who provides Yellowstone gRPC endpoints?
Helius (LaserStream), QuickNode, Triton One, Shyft, Chainstack and AllenHark all do. Compare on region, authentication, how many streams a plan allows, which commitment levels and filters are supported, and how you pay. AllenHark's runs in Frankfurt and Amsterdam, and authenticates by IP allowlist, for $5 a day or $99 a month.
What does Solana gRPC cost?
Providers charge in different ways: included in a plan, as an add-on, by data transferred, or as a flat subscription. AllenHark's is flat: $5 a day or $99 a month, paid on-chain, with no usage metering. Whatever you pick, filter tightly: subscribing to every transaction on mainnet when you need one program costs bandwidth and CPU.
How do I get data as early as possible on a Solana gRPC subscription?
Four levers. Run your consumer near the endpoint. Filter on the server so you only receive what you use. Use processed commitment if you can handle the occasional rollback. And if you need transactions before they are in a block, use a shreds feed such as AllenHark ShredStream: gRPC shows you what the validator has already processed.
Try Yellowstone gRPC for a day
A day in Frankfurt or Amsterdam for $5, paid on-chain, then $99 a month if you keep it.
