Skip to main content

Getting Started with Streams

Updated on
May 25, 2026

Overview

Streams is a powerful data ingestion and streaming solution designed for web3 applications. It enables you to efficiently collect, process, and store both raw and filtered blockchain data in real-time and historically. Whether you're building indexers, analytics platforms, or real-time dashboards, Streams provides the infrastructure to create robust data pipelines with features like batching, backfill, and continuous streaming.

Why Streams?

Streams revolutionizes blockchain data access by implementing a push-based architecture that delivers data directly to your storage or indexing systems. This event-driven model provides several key advantages:


While traditional JSON-RPC polling methods can be complex to implement and maintain, Streams provides a more elegant solution that handles the complexities of blockchain data access for you.

Streams Features


Streams Lifecycle

Streams are data pipelines that fetch, process, and deliver blockchain data to your storage or indexing systems. Each stream can be configured to handle specific data types (blocks, receipts, traces, etc.) and can be customized with filters to match your indexing or analytics requirements. The lifecycle of a stream consists of the following stages:


JavaScript Filtering

Streams allows you to define custom JavaScript filters that process blockchain data on Quicknode's infrastructure before it reaches your destination. This server-side filtering capability offers several advantages:


Streams will send the payload data in stream.data and the metadata in stream.metadata.

Note: The parameter name in your filter function (e.g., stream, payload, data) is arbitrary — what matters is the shape of the object passed in, which always contains .data and .metadata properties.

Example Filters

Solana Stake Program Filter

This filter finds every successful transaction in each block that includes at least one instruction sent to the Solana Stake Program — such as staking, unstaking, or moving stake:

function main(stream) {
const STAKE_PROGRAM = "Stake11111111111111111111111111111111111111";
const matches = [];

for (const block of stream.data) {
for (const tx of block.transactions) {
if (!tx.meta || tx.meta.err) continue;

const stakeInstructions = (tx.transaction.message.instructions || []).filter(
ix => ix.programId === STAKE_PROGRAM
);

if (stakeInstructions.length) {
matches.push({
signature: tx.transaction.signatures[0],
blockTime: block.blockTime,
instructionCount: stakeInstructions.length,
programId: STAKE_PROGRAM
});
}
}
}

return matches.length ? matches : null;
}

Ethereum ERC-20 Transfer Filter

This filter processes ERC-20 transfer events using the block with receipts dataset, decoding the logs using the ERC-20 ABI:

function main(stream) {
const ERC20_ABI = [{
name: "Transfer",
type: "event",
anonymous: false,
inputs: [
{ name: "from", type: "address", indexed: true },
{ name: "to", type: "address", indexed: true },
{ name: "value", type: "uint256", indexed: false }
]
}];

const receipts = stream.data.flatMap(block => block.receipts || []);
const decoded = decodeEVMReceipts(receipts, [ERC20_ABI]);

const erc20Transfers = decoded.filter(r =>
r.decodedLogs?.some(log => log.name === "Transfer")
);

return erc20Transfers.length ? { receipts: erc20Transfers } : null;
}

This filter demonstrates how to:

Feature Availability

Streams is available to all users with a Quicknode plan. For teams with unique requirements, we offer tailored datasets, dedicated support, and custom integrations. Contact our team for more information. For a full breakdown of Streams features by plan, visit the pricing page. \

Solana Streams on Free Trial Plans

Free Trial accounts can only create Solana Streams that follow the tip of the blockchain in real time (i.e., subscription to new blocks as they are produced). Historical backfills on Solana Streams are only available on paid plans.

This limitation is just for Solana Streams. All other chains are available on Free Trial plans with full historical backfills.

Access

Access Streams through the Quicknode Developer Portal and via Streams REST API.

Supported Chains

Streams streaming can be quickly provisioned for any of the supported chain and networks mentioned below. For teams with unique requirements contact our team for more information. Otherwise, our self-serve experience has you covered on the following chains:

ChainMainnetTestnets0g✅Galileo TestnetAbstract✅TestnetArbitrum✅SepoliaArbitrum Nova✅ArcTestnetAult✅TestnetAvalanche C-Chain✅FujiB3✅SepoliaBase✅SepoliaBera✅BepoliaBitcoin✅Testnet4Bitcoin Cash✅TestnetBlast✅SepoliaBNB Smart Chain✅TestnetCelo✅Cyber✅SepoliaDogecoin✅Ethereum✅Hoodi, SepoliaFantom✅Flare✅TestnetFlow✅TestnetFluentTestnetFraxtal✅Gnosis✅Gravity✅Hedera✅TestnetHemi✅TestnetHyperliquid EVM✅TestnetHyperliquid Hypercore✅Immutable zkEVM✅TestnetInjective✅TestnetInk✅SepoliaJapan Open Chain✅Kaia✅TestnetKatana✅Lens✅TestnetLinea✅Lisk✅Litecoin✅TestnetMantle✅SepoliaMegaETH✅MocaTestnetMode✅Monad✅TestnetMorph✅HoodiOptimism✅SepoliaPeaq✅Plasma✅TestnetPolygon✅AmoyPolygon zkEVM✅Cardona TestnetRobinhoodTestnetSaharaTestnetScroll✅TestnetSei✅TestnetSolana✅Devnet, TestnetSoneium✅Sonic✅Sophon✅Stellar✅TestnetStory✅Aeneid TestnetTempo✅TestnetTron✅Unichain✅SepoliaVana✅Moksha TestnetWorldchain✅SepoliaX Layer✅TestnetXai✅SepoliaXRP Ledger✅TestnetXRPL EVM✅TestnetzkSync✅SepoliaZora✅

Optimizing Your Data Pipeline


Understanding Streams Billing

Streams consumes API credits according to the number of blocks processed by your Stream, based on the network and dataset multiplier. Streams consumes API credits from the same shared credit pool as RPC.

The number of credits consumed depends on:

Estimate Your Costs

Use the API Credits Calculator to estimate your monthly costs based on your specific configuration. The calculator helps you:

Choosing the Right Configuration

Frequently Asked Questions

What is Quicknode Streams?
Streams is a data ingestion and streaming solution for web3 applications that enables you to efficiently collect, process, and store both raw and filtered blockchain data in real-time and historically.
How do I access Quicknode Streams?
You can access Streams through the Quicknode Developer Portal or via the Streams REST API.
What is JavaScript filtering in Streams?
JavaScript filtering allows you to define custom filters that process blockchain data on Quicknode's infrastructure before it reaches your destination, reducing data transfer and processing overhead on your systems.

Learn more about how to use filters with Streams.
What types of destinations does Streams support?
Streams can deliver data directly to your preferred storage, indexing systems, or webhook backends, with support for batch processing and real-time delivery.
How does Streams ensure data reliability?
Streams provides exactly-once delivery of blocks, receipts, and traces in finality order, and processes blocks sequentially, waiting for confirmation that each block or batch was successfully delivered before proceeding.
Which blockchain networks are supported by Streams?
Streams supports over 50 chains including Ethereum, Solana, Bitcoin, Arbitrum, Base, Polygon, Avalanche, and many others across both mainnets and testnets. See the full list of Supported Chains above.

We ❤️ Feedback!

If you have any feedback or questions about this documentation, let us know. We'd love to hear from you!