Yellowstone gRPC: how real-time Solana data actually streams
Yellowstone gRPC (Dragon's Mouth) is a Geyser plugin streaming accounts, transactions, slots, and blocks over gRPC. Why it beats JSON-RPC websockets.
devrels.xyz/a/35short linkYellowstone gRPC (Triton One's "Dragon's Mouth") is a Geyser plugin that streams real-time Solana data — accounts, transactions, slots, blocks, blocks-meta, and entries — to clients over gRPC subscriptions. It's the layer most serious indexers, trading bots, and data pipelines run on instead of JSON-RPC websockets.

How it works
A validator loads the plugin (--geyser-plugin-config), tapping the same Geyser hook Solana uses for account/slot/transaction notifications. A client opens a single gRPC stream with a SubscribeRequest carrying named filters; the server pushes matching updates as Protobuf messages over HTTP/2.
Versus JSON-RPC websockets:
- Lower latency and compact Protobuf payloads vs JSON.
- Rich server-side filtering — by account, owner, memcmp/dataSize, or transaction membership — so you receive only what you asked for.
- HTTP/2 flow control = real backpressure: a slow consumer doesn't silently drop updates the way websockets can.
The subscribe request
import Client from "@triton-one/yellowstone-grpc"
const client = new Client(GRPC_ENDPOINT, X_TOKEN, undefined)
const stream = await client.subscribe()
stream.write({
accounts: {
myFilter: {
owner: ["TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"], // SPL Token program
filters: [{ datasize: 165 }], // token accounts
account: [], nonemptyTxnSignature: undefined,
},
},
transactions: {
txFilter: { accountInclude: ["<your-program-id>"], vote: false, failed: false },
},
slots: {}, blocks: {}, blocksMeta: {}, entry: {},
commitment: 1, // 0 processed · 1 confirmed · 2 finalized
accountsDataSlice: [],
})
stream.on("data", (update) => { /* account / transaction / slot update */ })
// reply to server pings to keep the connection alive through load balancersFilter groups include accounts, transactions (with accountInclude/Exclude/Required), slots, blocks, blocksMeta, and entries. Clients exist for Rust (yellowstone-grpc-client), TypeScript (@triton-one/yellowstone-grpc), and Go.
The honest read
Yellowstone gRPC is almost always a premium add-on, not a free RPC tier — Triton, Helius, and QuickNode all sell it as paid streaming. It also carries more ops weight than websockets: persistent gRPC connections, ping/pong keepalives, reconnection-and-replay logic, Protobuf tooling, and filter tuning. For light needs, JSON-RPC websockets are simpler. For high-throughput, low-latency, lossless ingestion — indexers, MEV, real-time analytics — gRPC is the right tool. The repo is actively maintained (recent tags carry Alpenglow release-candidate compatibility work).
References
If your product's edge is reacting to chain state first, the question isn't whether to use gRPC — it's which provider's Dragon's Mouth you point it at.
Keep reading
Blockworks is no longer just research podcasts. After the Messari acquisition, the product surface for builders is a dual API stack, deep Solana analytics (REV, DEX, DATs), and institutional Lightspeed IR. Here is the map: what to call, when not to use it, and a research clip on Jupiter distribution.
The Bot API costs zero. The real bill is RPC, streaming, landing fees, hosting that never sleeps, and the engineering that keeps keys and uptime honest. Three budgets, line by line.
Juggling Helius for Solana, Alchemy for Ethereum, CoinGecko for prices, and a home-grown failover script is a full-time job. Uniblock collapses that into one API key with auto-routing, retries, and a single invoice — including Solana JSON-RPC and Direct APIs for Helius, Solscan, HelloMoon, and more.
Get new articles in your inbox
Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.
