<h1>🌊 Solana Streamer</h1>
<h3><em>Real-time event streaming from Solana DEX trading programs.</em></h3>
<strong>A lightweight Rust streaming facade over sol-parser-sdk, with low-latency subscriptions and a stable bot-facing API.</strong>
<a href="https://crates.io/crates/solana-streamer-sdk">
<img src="https://img.shields.io/crates/v/solana-streamer-sdk.svg" alt="Crates.io">
</a>
<a href="https://docs.rs/solana-streamer-sdk">
<img src="https://docs.rs/solana-streamer-sdk/badge.svg" alt="Documentation">
</a>
<a href="https://github.com/0xfnzero/solana-streamer/blob/main/LICENSE">
<img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License">
</a>
<a href="https://github.com/0xfnzero/solana-streamer">
<img src="https://img.shields.io/github/stars/0xfnzero/solana-streamer?style=social" alt="GitHub stars">
</a>
<a href="https://github.com/0xfnzero/solana-streamer/network">
<img src="https://img.shields.io/github/forks/0xfnzero/solana-streamer?style=social" alt="GitHub forks">
</a>
<img src="https://img.shields.io/badge/Rust-000000?style=for-the-badge&logo=rust&logoColor=white" alt="Rust">
<img src="https://img.shields.io/badge/Solana-9945FF?style=for-the-badge&logo=solana&logoColor=white" alt="Solana">
<img src="https://img.shields.io/badge/Streaming-FF6B6B?style=for-the-badge&logo=livestream&logoColor=white" alt="Real-time Streaming">
<img src="https://img.shields.io/badge/gRPC-4285F4?style=for-the-badge&logo=grpc&logoColor=white" alt="gRPC">
<a href="https://github.com/0xfnzero/solana-streamer/raw/v1.5.16/README_CN.md">中文</a> |
<a href="https://github.com/0xfnzero/solana-streamer/raw/v1.5.16/README.md">English</a> |
<a href="https://fnzero.dev/">Website</a> |
<a href="https://t.me/fnzero_group">Telegram</a> |
<a href="https://discord.gg/vuazbGkqQE">Discord</a>
☕ Support This Project
This SDK is completely free and open source. However, maintaining and continuously updating it requires significant AI computing resources and token consumption. If this SDK helps with your development, consider making a monthly SOL donation — any amount is appreciated and helps keep this project alive!
Donation Wallet:
6oW7AXz1yRb57pYSxysuXnMs2aR1ha5rzGzReZ1MjPV8
solana-streamer-sdk is a Rust event streaming layer for Solana bots, indexers, copy-trading systems, sniper bots, and DEX monitoring tools. It provides a stable API over Yellowstone gRPC, ShredStream, RPC transaction parsing, and the underlying sol-parser-sdk parser core.
| Area | Coverage |
|---|---|
| Input sources | Yellowstone gRPC, Jito ShredStream, fetched RPC transactions, encoded transaction data |
| DEX protocols | PumpFun, PumpSwap, Pump Fees, Raydium LaunchLab, Raydium CPMM, Raydium CLMM, Raydium AMM V4, Meteora DAMM v2, Meteora DLMM, Meteora DBC, Orca Whirlpool |
| Use cases | Real-time DEX event streaming, token launch monitoring, copy trading, account-state subscriptions, bot signal pipelines |
| Parser backend | sol-parser-sdk with default Borsh parsing and optional zero-copy backend for latency-sensitive workloads |
sol-parser-sdkProtocol::Bonk and Protocol::RaydiumLaunchpad remain compatible aliasessol-parser-sdk crate through parser_sdk or sdk_bridge::rawClone this project to your project directory:
cd your_project_root_directory
git clone https://github.com/0xfnzero/solana-streamer
Add the dependency to your Cargo.toml:
# Add to your Cargo.toml
solana-streamer-sdk = { path = "./solana-streamer", version = "1.5.16" }
# Add to your Cargo.toml
solana-streamer-sdk = "1.5.16"
Parser backend features:
# Default: sol-parser-sdk parse-borsh backend
solana-streamer-sdk = "1.5.16"
# Zero-copy parser backend for latency-sensitive bots
solana-streamer-sdk = { version = "1.5.16", default-features = false, features = ["sdk-parse-zero-copy"] }
If both sdk-parse-borsh and sdk-parse-zero-copy are enabled, sol-parser-sdk 0.5.15+ uses the zero-copy backend.
Version 1.5.16 fixes StreamingOrdered delivery for transactions that parse into multiple events. Events from the same (slot, tx_index) are admitted as a group, the streaming watermark advances once per transaction, and stable sorting preserves parser order for equal transaction indexes. It also pins yellowstone-grpc-proto to the 12.4.x API used by sol-parser-sdk 0.5.15 so CI and clean installs do not resolve an incompatible newer proto crate.
Version 1.5.15 tracks sol-parser-sdk 0.5.15 at GitHub rev 36ec202. Pump.fun create_v2 now distinguishes 16-account SOL-sentinel creates from 19/20-account quote-pool creates, models Yellowstone gRPC loaded writable/readonly addresses correctly, rejects PumpFun program-account fillers as quote mints, and keeps ShredStream from guessing ALT-loaded quote mints when the static transaction keys do not contain them. gRPC/RPC inner instruction parsing now handles guarded 8-byte ordinary CPI instructions for all SDK-supported DEX parsers, so PumpSwap create_pool reads is_cashback_coin from instruction args before merging with log-derived CreatePoolEvent output. ShredStream remains outer-instruction only, but its outer discriminator gate is shared with the SDK parser and no longer diverges for supported DEX protocols.
Version 1.5.14 uses sol-parser-sdk 0.5.14 from crates.io. Pump.fun canonical create events now expose quote_mint, quote_vault, and quote_token_program for create_v2 quote pools, including USDC pools, across gRPC/RPC parser bridge and ShredStream-backed SDK output.
Version 1.5.13 uses sol-parser-sdk 0.5.13 from crates.io. Pump.fun gRPC and ShredStream create/trade outputs now preserve real WSOL quote mints (So11111111111111111111111111111111111111112). The Solscan SOL sentinel (So11111111111111111111111111111111111111111) is used only when legacy data omits a quote mint.
Version 1.5.11 uses sol-parser-sdk 0.5.11 from crates.io. PumpSwap PumpSwapCreatePoolEvent now carries is_cashback_coin when it is available from the create_pool instruction args, including ShredStream outer-instruction parsing. Log-only CreatePoolEvent payloads still default this field to false because the on-chain log event IDL does not carry it. AccountPumpSwapPool remains the authoritative account-state source for the pool flag.
Version 1.5.10 uses sol-parser-sdk 0.5.10 from crates.io. PumpSwap CreatePoolEvent now matches the on-chain IDL: it exposes is_mayhem_mode but does not expose is_cashback_coin. To read the cashback flag, subscribe to AccountPumpSwapPool and use PumpSwapPoolAccountEvent.pool.is_cashback_coin. The PumpSwap CreatePool log payload length check now includes the final is_mayhem_mode byte.
Version 1.5.9 uses sol-parser-sdk 0.5.9 from crates.io. It inherits the Yellowstone gRPC stop lifecycle fix: stop() now signals, aborts, and awaits the active subscription task, subscription lifecycle transitions are serialized, and gRPC stream errors are labeled as Grpc Stream error for easier log separation from ShredStream.
Version 1.5.8 uses sol-parser-sdk 0.5.8 from crates.io. It inherits the Pump.fun ShredStream filter-family semantics from the parser SDK: PumpFunBuy covers buy, buy_v2, buy_exact_sol_in, and buy_exact_quote_in_v2; PumpFunSell covers sell and sell_v2; and PumpFunTrade covers all buy/sell instructions while the parser can emit unified trade events when only the generic trade filter is requested.
Version 1.5.5 uses sol-parser-sdk 0.5.5 from crates.io. The SDK now exposes Raydium LaunchLab as RaydiumLaunchlab*; streamer keeps the existing Bonk* event structs and Protocol::Bonk / Protocol::RaydiumLaunchpad aliases for source compatibility, while routing parser calls and upstream gRPC event filters to the new LaunchLab SDK variants. This release also syncs the CLMM/CPMM/Orca account bridges, Meteora DAMM v2 initialize-pool events, Meteora DBC events, and parser warmup on client creation.
Version 1.5.4 uses sol-parser-sdk 0.5.4 from crates.io. Pump.fun create and create_v2 are delivered as one canonical PumpFunCreateTokenEvent; subscribing to either PumpFunCreateToken or PumpFunCreateV2Token receives the same complete create-family data. This prevents duplicate new-mint callbacks from gRPC log + instruction parsing while preserving create_v2 account fields on the canonical create event.
Version 1.5.3 uses sol-parser-sdk 0.5.3 from crates.io. It preserves real Pump.fun v2 ix_name values through the streamer bridge, improves ShredStream Pump.fun v2 best-effort parsing for short account lists, and treats PumpFunBuy and PumpFunBuyExactSolIn subscriptions as compatible buy-family filters. ShredStream still uses the direct entry-reading path with automatic reconnect; callbacks should remain non-blocking and tx_index remains entry-local best-effort.
Version 1.5.2 uses sol-parser-sdk 0.5.2 from crates.io. ShredStream delivery uses the SDK parser on a direct entry-reading path with automatic reconnect, avoiding the extra queue consumer task while keeping parser event buffers reused. ShredStream tx_index is entry-local best-effort, not the Yellowstone slot-level transaction index. User callbacks on the direct path run on the read task and should avoid blocking work.
Version 1.5.1 uses sol-parser-sdk 0.5.1 from crates.io. It improves ShredStream ALT handling by parsing outer instructions best-effort with default placeholders for ALT-loaded accounts, adds dropped-event queue observability, and keeps CPI/inner-only events documented as a ShredStream
$ claude mcp add solana-streamer \
-- python -m otcore.mcp_server <graph>