➤ Low Latency Block Updates (Shredstream)
🚨 Jito ShredStream Sunset Notice 🚨
We are beginning the process of deprecating Jito ShredStream. The service will be completely shut down in 60 days (September 5, 2026), meaning you won’t have access to Jito ShredStream at that time. You should begin the process of migrating off of Jito ShredStream.
To ensure uninterrupted access to Solana shreds, we highly recommend transitioning to DoubleZero Edge before the shutdown date. DoubleZero has put together a comprehensive transition guide for our users, which includes details on how users can access a free trial. We encourage you to review it and begin migrating as soon as possible.
🔗 Full details on the migration, performance benchmarks, and how to get set up can be found here: DoubleZero migration guide.
If you need any support during the transition, head over to the #jito-shredstream channel in the DoubleZero Discord.
Jito’s ShredStream service delivers the lowest latency shreds from leaders on the Solana network, optimizing performance for high-frequency trading, validation, and RPC operations. ShredStream ensures minimal latency for receiving shreds, which can save hundreds of milliseconds during trading on Solana—a critical advantage in high-frequency trading environments. Additionally, it provides a redundant shred path for servers in remote locations, enhancing reliability and performance for users operating in less connected regions. This makes ShredStream particularly valuable for traders, validators, and node operators who require the fastest and most reliable data to maintain a competitive edge.
Shreds
Shreds are fragments of data used in the Solana blockchain to represent parts of transactions before they are assembled into a full block. When a validator processes transactions, it breaks them down into smaller units called shreds. These shreds are distributed across the network to other validators and nodes, which then reassemble them to form complete blocks.
Shreds help in fast and efficient data propagation, maintaining Solana’s high throughput and low latency. They also provide redundancy and fault tolerance, ensuring that even if some data is lost or delayed during transmission, the network can still reconstruct the necessary information. Shreds are crucial for enabling Solana’s rapid block times and overall network performance.
Setup
Jito ShredStream Proxy
The proxy client connects to the Jito Block Engine and authenticates using the provided keypair. It sends a heartbeat to keep shreds flowing. Received shreds are distributed to all DEST_IP_PORTS. We recommend running a proxy instance for each region where you have RPCs.
Preparation
Get your Solana public key approved
Ensure your firewall is open.
Default port for incoming unicast shreds is
20000/udp.NAT connections currently not supported.
If you use a firewall, see the firewall configuration section
Find your TVU port
Run get_tvu_port.sh to find your port
Example on machine with Solana RPC:
export LEDGER_DIR=MY_LEDGER_DIR; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)"
Example on remote machine (port may differ):
export HOST=http://1.2.3.4:8899; bash -c "$(curl -fsSL https://raw.githubusercontent.com/jito-labs/shredstream-proxy/master/scripts/get_tvu_port.sh)"
Run via docker or natively and set the following parameters
BLOCK_ENGINE_URL: https://mainnet.block-engine.jito.wtfDESIRED_REGIONS: Comma-delimited regions you want to receive shreds from, maximum of 2 regions, anything in excess will be ignored. Same regions as for Block EngineDEST_IP_PORTS: Comma-delimited IP:Port combinations to receive shreds onNote: these examples will receive shreds from
amsterdamandnyregions
🦾 Running Natively
git clone https://github.com/jito-labs/shredstream-proxy.git --recurse-submodules
RUST_LOG=info cargo run --release --bin jito-shredstream-proxy -- shredstream \
--block-engine-url https://mainnet.block-engine.jito.wtf \
--auth-keypair my_keypair.json \
--desired-regions amsterdam,ny \
--dest-ip-ports 127.0.0.1:8001,10.0.0.1:8001
Running via Docker
View logs with docker logs -f jito-shredstream-proxy
🐳 Host Networking (Recommended)
This exposes all ports, bypassing Docker NAT.
docker run -d \
--name jito-shredstream-proxy \
--rm \
--env RUST_LOG=info \
--env BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \
--env AUTH_KEYPAIR=my_keypair.json \
--env DESIRED_REGIONS=amsterdam,ny \
--env DEST_IP_PORTS=127.0.0.1:8001,10.0.0.1:8001 \
--network host \
-v $(pwd)/my_keypair.json:/app/my_keypair.json \
jitolabs/jito-shredstream-proxy shredstream
🚝 Bridge Networking
Use bridge networking in environments where Docker host networking is unavailable. Note: This setup requires manual exposure of SRC_BIND_PORT. For shred listeners running locally on the Docker host, use Docker’s bridge IP (typically 172.17.0.1). For non-local endpoints, use their regular IP addresses. Note that Docker’s bridge IP can vary, so confirm it by running: ip -brief address show dev docker0.
docker run -d \
--name jito-shredstream-proxy \
--rm \
--env RUST_LOG=info \
--env BLOCK_ENGINE_URL=https://mainnet.block-engine.jito.wtf \
--env AUTH_KEYPAIR=my_keypair.json \
--env DESIRED_REGIONS=amsterdam,ny \
--env SRC_BIND_PORT=20000 \
--env DEST_IP_PORTS=172.17.0.1:8001,10.0.0.1:8001 \
--network bridge \
-p 20000:20000/udp \
-v $(pwd)/my_keypair.json:/app/my_keypair.json \
jitolabs/jito-shredstream-proxy shredstream
Decoding Shreds
Decoding shreds lets you access transactions without running a full Solana node. Add GRPC_SERVICE_PORT=<PORT> environment variable or --grpc-service-port <PORT> arg to start the gRPC server which streams out transactions to gRPC clients. See the Entry type of the protobuf for more details. A sample client implementation is available in the deshred example.
📛 Firewall Configuration
If you use a firewall, allow access to the following IPs:
Location |
IP Addresses |
|---|---|
🇳🇱 Amsterdam |
|
🇮🇪 Dublin |
|
🇩🇪 Frankfurt |
|
🇬🇧 London |
|
🇺🇸 New York |
|
🇺🇸 Salt Lake City |
|
🇸🇬 Singapore |
|
🇯🇵 Tokyo |
|
Troubleshooting
Confirm shreds are reaching your server by inspecting packet flow (default
SRC_BIND_PORTis20000, adjust accordingly):
sudo tcpdump 'udp and dst port 20000'
You should see many shreds of ~1200 bytes being received.
Ensure your firewall allows UDP packets on your
SRC_BIND_PORTEnsure your RPC is receiving shreds by configuring the
SOLANA_METRICS_CONFIGin your systemd unit/startup script. Refer to Solana Clusters Documentation for details. To verify, query the number of packets received by your RPC before and after configuring ShredStream in InfluxDB:
SELECT shred_count FROM "shred_fetch" WHERE time > now() - 1h