NoLimitNodes
PricingDocsBlogAbout
SupportContact
Log in
  1. Home/
  2. Products/
  3. Infrastructure/
  4. gRPC Nodes
RPC Infrastructure

Yellowstone gRPC nodes for Solana, on bare metal and without a per-event meter

Yellowstone is the gRPC interface most serious Solana data products are built on. The proto lives in Triton's rpcpool/yellowstone-grpc repo, the SDKs are stable across Rust, Python, and TypeScript, and every credible provider (Triton, Helius LaserStream, QuickNode, Chainstack, us) wraps the same wire format. The differences are which filters work the way you'd expect, what the default max_receive_message_length is, whether the provider runs a replay buffer for reorg recovery, and how the bill scales when mainnet has a memecoin Tuesday. NoLimitNodes runs Yellowstone on the same bare-metal fleet as RPC and WebSocket. Endpoint is grpc.nln.clr3.org:443. Auth is x-api-key sent as gRPC metadata. We default 64MB payloads, support every filter the proto exposes, and don't bill per event.

Yellowstone-compatible64MB payloadsReal-time streamNo per-event meterBare-metal routingRust + Python + TS SDKs
On-chain programs
  • Yellowstone gRPC (Geyser plugin)rpcpool/yellowstone-grpc, The reference Geyser plugin and protobuf spec. We run a fork pinned to upstream HEAD with a replay-aware patch.
  • Solana System Program11111111111111111111111111111111, The on-chain anchor every transaction lands against. Useful as the canonical accountInclude target while smoke-testing a stream.
  • Vote ProgramVote111111111111111111111111111111111111111, Vote=false is the single most important filter on any production stream. About 70% of mainnet transactions are vote txs.

The Yellowstone gRPC messages and filters you'll use

every protobuf you write into the stream and every update the server pushes back

EventTypeDescriptionFrequency
SubscribeRequesteventThe top-level request you write into the bidirectional stream. Carries every filter for accounts, txs, slots, and blocks.Low
SubscribeRequestFilterAccountseventFilter accounts by pubkey, owner program, or memcmp/dataSize predicates. The cleanest replacement for accountSubscribe.High
SubscribeRequestFilterTransactionseventFilter transactions by vote/failed flags plus accountInclude, accountExclude, and accountRequired arrays. The workhorse.Very high
SubscribeRequestFilterSlotseventSlot stream with optional commitment-level scoping. The grpc cousin of slotUpdatesSubscribe.Very high
SubscribeRequestFilterBlockseventFull-block stream with optional account-set scoping. Heavy; use blockMeta if you only need headers.Medium
SubscribeRequestFilterBlocksMetaeventBlock metadata only: slot, blockhash, parent, transaction count, rewards. Cheap; ideal for chain walkers.High
SubscribeUpdateAccounteventServer push: account write_version, owner, lamports, data, slot. Every account change matching your filter.Very high
SubscribeUpdateTransactioneventServer push: full transaction with meta, instructions, inner instructions, balances, and log messages.Very high
SubscribeUpdatePingeventHeartbeat from the server every 10 seconds. Silence is your reconnect signal.Medium
CommitmentLevel.PROCESSEDeventThe earliest commitment, typically 200-400ms after the originating slot. Reorg risk exists; reconcile at confirmed.Very high

gRPC streaming performance at a glance

last reviewed 2026-04-28

Sustained throughput
~5,000 msg/s
Per single connection without backpressure on a Token-2022 program filter
Verified 2026-04-28
Default max payload
64MB
Up from the upstream 4MB; needed for full-block subscriptions
Verified 2026-04-28
Stream uptime SLO
99.95%
Pro and Ultra plans, monthly rolling

Yellowstone gRPC, explained without the marketing

Yellowstone is two things stacked on each other. There's a Geyser plugin that runs inside the Agave validator and listens to the runtime as accounts get written, transactions get packed into slots, and slots get rooted. There's a gRPC server in front of that plugin which serializes those events into Protocol Buffers and ships them out over HTTP/2. The combined thing is what the ecosystem calls Yellowstone, and the source of truth for both halves is github.com/rpcpool/yellowstone-grpc.

Triton built it. They open-sourced the proto and the plugin, then everyone else (Helius for LaserStream, QuickNode for their Yellowstone offering, Chainstack, us) built our own deployments on top. The wire format is identical across vendors. A subscriber written against Triton's SDK works against ours, against QuickNode's, against Chainstack's. The SDK is published for Rust (yellowstone-grpc-client), Python (yellowstone-grpc-proto), and TypeScript (@triton-one/yellowstone-grpc). Go has community ports.

The mental model: you open a single bidirectional stream with Subscribe, you write one or more SubscribeRequest messages describing what you want, and the server pushes back SubscribeUpdate messages forever. You can update the request mid-stream to change filters without disconnecting. That's the entire protocol. Any provider that ships something different on top is layering it.

The four data layers: Geyser, gRPC, LaserStream, decoded streams

The Solana data stack has more layers than the marketing pages admit. Knowing which one you're actually buying makes the provider comparison easier.

LayerWhat it isWho runs it
GeyserValidator plugin interfaceAnza / Solana core
Yellowstone gRPCOpen-source streaming plugin + protoTriton (rpcpool/yellowstone-grpc)
Replay tiersgRPC + persistent replay buffer for reorgsHelius LaserStream, Triton Dragon's Mouth
Decoded streamsParsed events typed against program IDLsNoLimitNodes, Helius enhanced, Bitquery

Layer one (Geyser) is part of the validator. You don't consume it directly unless you're running your own node and writing a plugin. We do that on Geyser plugin hosting; the rest of the time you consume layer two and up.

Layer two (Yellowstone gRPC) is what every provider on this page ships. Same proto, same SDK, same wire format. The differences are deployment quality (how close to leader, how many regions), defaults (max payload, ping cadence), and pricing model.

Layer three (replay tiers) is the LaserStream and Dragon's Mouth angle. They keep N slots of history in a buffer and let you replay from a slot you missed. Genuinely useful if you're an indexer where missing a slot means a permanent gap. Less useful for real-time work where you care about now.

Layer four (decoded streams) is where we ship parsed events for Raydium AMM v4 / CLMM / CPMM, Pump.fun, Orca, Meteora, Jupiter, and a growing list. You skip the IDL load and the discriminator routing. That product line is on Enhanced Streams; this page is the layer-two transport that powers it.

How to pick a gRPC provider (Triton vs Helius vs QuickNode vs us)

Four providers will show up in your shortlist. We'll be direct about where each one wins.

Triton

They built Yellowstone. SLA and proto-version freshness are best-in-class. Pricing is at the top of the market. If you're a fund that buys on reputation and replay guarantees, Triton is rarely the wrong call. Their Dragon's Mouth Replay tier is the only commercial alternative to LaserStream for reorg recovery.

Helius LaserStream

Wins on replay. The buffer holds enough slots to recover from any normal-sized reconnect or reorg, which is the right answer for an indexer that genuinely cannot lose data. Per-event metering can spike on busy days; the parsed enhancements are good if you're building inside the Helius ecosystem.

QuickNode

Strongest global edge presence. Flat pricing on most plans. The Yellowstone proto sometimes lags upstream by a release, which matters if you're relying on a brand-new field. Their support is fast and their dashboard is the cleanest in the category.

NoLimitNodes

Bare-metal close to the validator set, 64MB default payloads, no per-event meter, and the decoded stream layer on top for the major DeFi programs. We don't run a replay buffer today; if that's your blocker, LaserStream is the right call and we'll say so.

The decision tree is short. If you need replay, LaserStream or Triton Dragon's Mouth. If you need flat pricing on real-time gRPC plus parsed DeFi events, us. If you need a single-vendor stack that covers RPC, WS, gRPC, and NFT APIs, Helius or QuickNode. If you need the highest SLA on a single contract, Triton.

Production patterns: filtering, multiplexing, backpressure

Yellowstone gives you a lot of rope. The default-everything stream (no filters, all commitments) is roughly 100MB/s of mainnet data. Three patterns separate teams that ship from teams that wonder why their indexer keeps falling behind.

Filter at the server, always. The proto exposes accountInclude, accountExclude, accountRequired, plus vote and failed flags. Use all of them. A sniper bot that filters accountInclude=[Raydium AMM v4], vote=false, failed=false at PROCESSED commitment receives roughly 0.5% of the firehose. Same data, 200x less wire traffic, 200x less parsing in your client.

Multiplex multiple filters on one stream. A single SubscribeRequest can carry several named transactions filters and several named accounts filters. Each named filter produces tagged updates so you know which logical stream the message belongs to. This is better than opening four separate connections; HTTP/2 stream multiplexing handles the rest. We watch teams open one connection per program and saturate their socket budget unnecessarily.

Handle backpressure explicitly. If your client is slower than the message rate, the server will eventually drop you. The fix is to consume fast and offload to a queue (Redis, NATS, an in-memory channel) rather than doing real work in the gRPC handler. The Rust client gives you a tokio mpsc channel by default; the Python and TS clients leave it to you. A 4096-slot bounded channel between gRPC ingest and your business logic is the cheapest insurance you can buy.

One more pattern that earns its keep: ping-pong tracking. The server pushes an UpdatePing every 10 seconds. Track the timestamp of the last ping. If you go 30 seconds without one, force a reconnect. A silent gRPC connection isn't a healthy gRPC connection; it's a TCP connection where the kernel has given up and forgotten to tell you.

Migrating from logsSubscribe to gRPC

Most teams arrive at gRPC after their logsSubscribe pipeline starts dropping messages. The migration is mechanical once you know the field map.

WebSocketYellowstone gRPC
logsSubscribe mentions:[X]SubscribeRequestFilterTransactions { accountInclude: [X], vote: false, failed: false }
accountSubscribe(pubkey)SubscribeRequestFilterAccounts { account: [pubkey] }
programSubscribe + filtersSubscribeRequestFilterAccounts { owner: [program], filters: [...] }
slotSubscribeSubscribeRequestFilterSlots { filterByCommitment: true }
blockSubscribeSubscribeRequestFilterBlocks (or BlocksMeta if you only need headers)
signatureSubscribe(stays on RPC; gRPC has no signature ack analog)

The biggest win is usually parsing. With logsSubscribe you received an array of program log lines and decoded the bincode payload by hand. With gRPC the SubscribeUpdateTransaction carries the full transaction including the structured instruction list, the inner instructions, the loaded addresses, and the meta including pre/post balances and the log array if you still want the strings. You can decode against a program's IDL using the discriminator from the instruction data field directly, no log string parsing required.

The other practical win is filter precision. The mentions filter on logsSubscribe matches transactions that touched the program at all, including via inner instruction. The gRPC accountInclude plus accountRequired combo lets you scope to txs where the program is in the required-signers set, which cuts noise on Jupiter routes and other composed transactions where eight programs touch the same signature.

One last note. If you previously parsed program logs to extract custom event data emitted via msg!, those log strings are still in tx.meta.logMessages on the gRPC update. You don't lose that channel. You just finally get the structured fields next to it.

Frequently asked questions

Yellowstone is a Geyser plugin and a gRPC service that exposes Solana validator state as a streaming API. Triton built it; the canonical repo is github.com/rpcpool/yellowstone-grpc. The plugin runs inside the validator and forwards account writes, transactions, slots, and blocks out over a gRPC server. The wire format is Protocol Buffers; the SDK is published in Rust, Python, and TypeScript. Every credible streaming provider on Solana wraps the same proto, so the client code is portable across us, Triton, Helius LaserStream, QuickNode, and Chainstack.
No. Geyser is the validator plugin interface itself, defined inside the Agave repo. It's the contract a plugin implements to receive account, slot, transaction, and block notifications from the runtime. Yellowstone is one specific Geyser plugin: the one that wraps those notifications in a gRPC API. There are other Geyser plugins (Postgres dump, Kafka, custom indexers); Yellowstone is the one that turned into the streaming standard.
WebSocket is fine for account-level UIs and prototypes; it caps out around a few hundred messages per second per connection because of JSON parsing and head-of-line blocking. gRPC handles thousands of messages per second on one connection thanks to Protocol Buffers and HTTP/2 stream multiplexing. LaserStream is Helius's premium gRPC product with a replay buffer for reorg recovery; if you're an indexer that needs replay-on-restart, it's genuinely useful. For most teams, plain Yellowstone gRPC with a sane reconnect handler covers the same ground at a third of the cost.
Map the mentions filter to accountInclude on SubscribeRequestFilterTransactions. Set vote=false and failed=false unless you actively want them. Pick your commitment level (PROCESSED for trading, CONFIRMED for indexing). Migrate your log decoder either to read the structured instructions field (no decode needed for the discriminator) or, if you were parsing program logs to extract event data, swap to reading the meta.logMessages array which contains the same lines. Most teams cut over a single feed in a day.
The Yellowstone default in upstream is 4MB, which is too small for full-block subscriptions on a busy slot. We default to 64MB on the server side; you should match it on your client by passing grpc.max_receive_message_length on the channel. If you're subscribing to blocks at CONFIRMED you want 64MB minimum. For account-and-transaction streams without blocks, 16MB is fine.
Replay is on the roadmap. The honest answer today: we don't run a replay buffer. If your client disconnects, you reconnect at the current slot and backfill the gap with a one-shot getBlock or getSignaturesForAddress query. For most workloads (snipers, MEV, real-time analytics) that's fine because you care about now, not 30 seconds ago. If you're an indexer that genuinely cannot lose a slot under any circumstance, Helius LaserStream's replay tier is currently the best commercial option and we'll tell you that to your face.
Triton runs the protocol; their pricing reflects that and their SLA is excellent. Helius LaserStream wins on replay buffers and parsed enhancements. QuickNode is the closest on flat pricing with a strong global edge; their proto is sometimes a release behind. Chainstack is reliable but Solana isn't their primary focus. We sit between QuickNode and Triton on price, run bare-metal close to the validator set, default to 64MB payloads, and don't bill per event. The right choice depends on whether replay matters to you. For real-time, we're competitive. For indexing with strict replay requirements, LaserStream is currently the right call.

Related products

Solana HTTP RPC nodes

The pull side of the same fleet. Use HTTP for one-shot reads and tx submission.

Solana WebSocket nodes

The lighter-weight push transport. Right for account-level UIs; wrong for high-volume program scans.

Enhanced Streams

18 curated, decoded topics for Raydium, PumpFun, Orca, Meteora, and more on top of our gRPC. Skip the IDL step entirely.

Program Streams explorer

1,074 topics across 37 Solana programs. Every decoded instruction and event, browsable.

Geyser plugin hosting

Run your own Geyser plugin on our validators. The next step past managed gRPC.

Yellowstone gRPC vs Helius LaserStream

Side-by-side: replay buffers, payload limits, pricing, and which one to pick for trading bots.

Triton vs Helius gRPC

How the two upstream Yellowstone vendors compare on latency, filters, and cost.

Stream Solana over Yellowstone gRPC in under 60 seconds

Pro at $49/mo includes 5 concurrent gRPC streams with 64MB payloads. Ultra at $199/mo lifts the cap to 100 streams, 100MB payloads, and adds 30 hours of custom dev time plus priority support.

See pricingTalk to sales

Ready to get started?

Get your free API key and start building in under 30 seconds.

Talk to Sales
NoLimitNodes

Solana RPC infrastructure built for performance and scale.

RPC Access
  • HTTP RPC
  • WebSocket
  • gRPC
Infrastructure
  • Compute Platform
  • VPS
  • VDS
  • Bare Metal
  • Geyser Plugin Hosting
Enhanced Streams
  • PumpFun
  • PumpSwap
  • Raydium
  • Orca
  • Meteora
  • System Events
  • Browse All →
Program Streams
  • PumpFun
  • PumpSwap
  • Raydium CLMM
  • Orca Whirlpool
  • Meteora DLMM
  • Jupiter Swap
  • Jupiter Perps
  • Kamino Lending
  • Browse All 37 →
Trading
  • EZWallet
Analytics
  • Historical Datasets
  • Historical Raw Blocks
Company
  • About
Resources
  • Pricing
  • Custom Development
  • Documentation
  • Blog
  • Support
  • Contact Sales
Compare
  • Yellowstone gRPC vs LaserStream
  • Triton vs Helius
  • Raydium API vs Helius
  • PumpSwap API vs Bitquery
  • QuickNode Streams vs NLN
  • All comparisons →
Legal
  • Terms & Conditions
  • Privacy Policy
© 2026 CLR3 Inc., operating as NoLimitNodes. Registered in Ontario, Canada. All rights reserved.solana mainnet