Jito ShredStream is a low-latency feed that delivers Solana shreds from leaders to subscribers, typically through the open-source shredstream-proxy client. It is useful for high-frequency trading, MEV searchers, validators, and RPC operators who need earlier visibility into block construction than standard RPC or gossip paths provide. This article explains the shred mental model, how the proxy is configured and run, how to decode and verify incoming data, and how to measure latency without inventing benchmark numbers. It also covers operational tradeoffs and the documented deprecation path, so teams can plan a migration rather than discover an outage.
Direct answer and scope
Jito ShredStream is a service that streams Solana shreds — the fragments validators use to propagate blocks — from block leaders to subscribers with lower latency than the default network path. Subscribers typically run the open-source shredstream-proxy client, which authenticates with a keypair, connects to regional endpoints, and exposes the incoming shreds locally for decoding or forwarding.
This guide focuses on the engineering workflow: prerequisites, proxy configuration, decoding, verification, latency measurement methodology, and migration planning. It does not recommend a specific endpoint or provider; for concrete endpoint and provider choices, use the RPC Assistant resources linked below. Documented behavior is separated from recommendations and from measurements you must run in your own environment.
- Documented: Jito's documentation describes ShredStream as delivering low-latency shreds and includes a sunset notice with a shutdown date of September 5, 2026.
- Documented: the
jito-labs/shredstream-proxyrepository is the client for receiving shreds from the Jito network. - Recommended: treat any latency claim as environment-specific until you measure it on your own hosts and regions.
Prerequisites and assumptions
Before building a shred pipeline, confirm you have a Solana keypair for authentication, a host with stable network access in or near a supported region, and the ability to open the UDP and TCP ports your proxy configuration requires. You should also have a plan for decoding shreds, because raw shreds are not directly usable transaction data.
The examples below assume a Linux host, Docker or a Rust toolchain, and a keypair stored at a path you control. They use placeholders such as RPC_URL and KEYPAIR_PATH rather than real credentials. If you are still choosing where to run supporting RPC workloads, review the Solana RPC provider guide and the dedicated node options before committing to an architecture.
How shreds and ShredStream fit together
Solana validators break blocks into shreds, which are smaller units that can be transmitted and reassembled efficiently. Shreds provide redundancy and fault tolerance: if some fragments are delayed or lost, the network can still reconstruct the block from others. Standard propagation relies on turbine-style dissemination across the validator set, which is robust but not optimized for a single subscriber's earliest possible view.
ShredStream changes the delivery path by sending shreds from leaders to subscribers through Jito's infrastructure. The proxy receives those shreds and makes them available locally. From there, your application can deshred, decode transactions, or forward data to other systems. The important mental model is that ShredStream is an early signal, not a replacement for indexed historical data or a full RPC view of finalized state. Pairing it with a reliable RPC source keeps both earliest fills and reliable history available.
Running the shredstream-proxy with Docker
The proxy is distributed as a Rust project with Docker support. Host networking is generally recommended because it avoids bridge-network overhead and simplifies port exposure for UDP traffic. The following configuration uses environment variables and a mounted keypair; replace the placeholders with your own values.
Run the container with host networking and pass the keypair path and destination port. The exact flags and environment variable names can change between releases, so verify them against the repository's README and release notes before production use.
docker run --rm \
--network host \
-v "$KEYPAIR_PATH:/keys/id.json:ro" \
-e KEYPAIR_PATH=/keys/id.json \
-e DEST_IP=127.0.0.1 \
-e DEST_PORT=8001 \
ghcr.io/jito-labs/shredstream-proxy:latestVerifying that shreds are arriving
Before writing decoding logic, confirm that the proxy is receiving data. A simple UDP listener can count packets and print the first bytes of each payload. This is a diagnostic step, not a production decoder. If no packets arrive, check firewall rules, region selection, keypair permissions, and whether the proxy logs show a successful subscription.
The following Python snippet binds to the local destination port and prints packet sizes and a short hex prefix. Run it on the same host as the proxy or on a host that receives forwarded traffic.
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("0.0.0.0", 8001))
count = 0
while count < 20:
data, addr = sock.recvfrom(65535)
print(f"packet={count} size={len(data)} from={addr} prefix={data[:16].hex()}")
count += 1Decoding shreds into usable transactions
Raw shreds must be reassembled and decoded before they become transactions. The proxy repository includes deshred and decode utilities, and the Jito documentation describes decoding approaches. A common pattern is to use the proxy's built-in deshred service or to feed shreds into a decoder that understands Solana's shred format and the DATA_COMPLETE flag.
Do not assume every packet is a complete transaction. Shreds can be partial, duplicated, or out of order. Your decoder should handle deduplication and reconstruction. If you are building a custom pipeline, test against known slots and compare decoded signatures with a trusted RPC source using RPC_URL.
curl -s "$RPC_URL" -X POST -H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"getSlot","params":[]}'Measuring end-to-end latency without inventing numbers
Latency claims are only meaningful when tied to a method. A reproducible approach is to timestamp the arrival of a shred packet, decode it to a transaction signature, and compare that timestamp with the first time the same signature is visible through a reference RPC endpoint. Record both timestamps in the same clock domain, ideally using NTP-synchronized hosts.
Run the procedure across multiple slots and regions, and report percentiles rather than a single best case. The table below is a template; fill it with your own measurements. Do not publish numbers you have not collected.
- Capture: log
t_shredwhen the decoded signature first appears in your ShredStream pipeline. - Reference: poll
getSignatureStatusesorgetTransactiononRPC_URLand logt_rpcwhen the signature is first observed. - Compute: delta = t_rpc - t_shred for each matched signature.
- Report: count, p50, p95, p99, and the region pair used for each row.
| Region pair | Matched signatures | p50 delta (ms) | p95 delta (ms) | p99 delta (ms) |
|-------------|--------------------|----------------|----------------|----------------|
| your-region-A to reference-A | (fill) | (fill) | (fill) | (fill) |
| your-region-B to reference-B | (fill) | (fill) | (fill) | (fill) |Troubleshooting common pipeline failures
Most ShredStream issues fall into a few categories: authentication, networking, decoding, and service lifecycle. Authentication failures usually mean the keypair path is wrong or the key is not authorized. Networking failures often involve UDP ports, host firewalls, or bridge networking dropping packets. Decoding failures usually stem from incomplete shreds or mismatched format assumptions.
Check the proxy logs first. If the proxy reports a successful subscription but your listener sees nothing, verify the destination IP and port and confirm that the listener is bound to the correct interface. If packets arrive but decoding fails, inspect the DATA_COMPLETE flag and compare against the repository's decode examples. For broader RPC reliability issues, the RPC endpoints guide and multi-chain RPC endpoints guide cover fallback and consistency patterns.
- No packets: check firewall, host networking, and destination port.
- Auth errors: verify keypair mount and permissions.
- Garbled data: confirm shred format and deshred step.
- Intermittent gaps: check region selection and redundant paths.
Limitations, tradeoffs, and the deprecation path
ShredStream is optimized for earliest visibility, not for completeness or finality. It can deliver shreds that are later abandoned, and it does not replace a full RPC node for state queries. Running a proxy adds operational surface area: key management, port exposure, region selection, and decoder maintenance. Teams should weigh these costs against the value of earlier signals for their strategy.
Jito's documentation includes a sunset notice stating that ShredStream will be shut down on September 5, 2026, and recommends migrating to an alternative before that date. Treat this as a hard planning constraint. Inventory every system that depends on the proxy, document its decoding assumptions, and build a migration test that compares old and new feeds on the same slots. For teams consolidating infrastructure, the blockchain node hosting guide and RPC pricing overview provide context for budgeting and operations.
Next steps for a production-ready pipeline
Start by running the proxy in a staging environment and verifying packet arrival with the diagnostic listener. Then add decoding, deduplication, and a latency measurement harness that records percentiles across regions. Only after those steps should you route production traffic through the feed.
For endpoint and provider selection, use the RPC Assistant rather than embedding a provider list here. The best Solana RPC provider and Solana devnet guide are useful starting points for test environments, while OnFinality's API service and network coverage help you plan supporting infrastructure. Keep migration tests running until the old feed is fully retired.