What's the difference between Firehose and Substreams?
Updated August 2026
Firehose extracts blockchain data; Substreams transforms it. Firehose instruments a node and turns raw chain execution into flat files and streams, while Substreams runs Rust modules over that data in parallel to produce exactly the dataset you need.
They are two layers of one stack, not competing products. Substreams consumes Firehose output — you can use Firehose on its own, but you cannot use Substreams without Firehose underneath.
Which one do I need?
| Firehose | Substreams | |
|---|---|---|
| What it does | Extracts and serves raw chain data | Transforms that data into your shape |
| Layer | Source | Compute |
| You get | Blocks with full execution detail | Only the data your modules produce |
| You write | Nothing — you consume a stream | Rust modules, or reuse a package |
| Use it when | You want everything and will process it yourself | You want a specific dataset, transformed |
| Runs without the other | Yes | No — requires Firehose data |
Use Firehose directly if you are building your own processing layer and want the complete, unfiltered block stream — you have a data team, opinions about your pipeline, and want raw input.
Use Substreams if you want a specific dataset — every swap on a DEX, balance changes for a set of accounts, transfers of one token — delivered into Postgres, ClickHouse, Kafka, or a subgraph, without building the processing layer yourself.
Most teams want Substreams. Firehose is what makes Substreams possible.
Why do the names get confused?
Because Substreams ships as part of the Firehose component family and shares its storage, "Firehose" is sometimes used loosely to mean the whole stack. The documentation is precise about the split, but third-party articles frequently are not — which is why developers arrive expecting Firehose to be a transformation tool, or Substreams to be a data source.
The reliable mental model: Firehose is where the data comes from, Substreams is what you do to it.
What do they have in common?
Both are open source under Apache 2.0, both can be self-hosted, and both are built by StreamingFast as core infrastructure for The Graph. Both are also built around the same architectural choice — files plus streaming — which is what lets either one serve full chain history and live data from a single source rather than requiring separate backfill and real-time systems.
That property is the reason the stack exists. Getting complete history and low-latency streaming out of one engine is unusual; most tools do one well and the other poorly or not at all.
Frequently asked questions
Can I use Substreams without Firehose? No. Substreams transforms data that Firehose extracts, so Firehose is always underneath — though if you use a hosted endpoint, you never have to operate it yourself.
Can I use Firehose without Substreams? Yes. Firehose serves blockchain data over gRPC and you can consume that stream directly with your own processing.
Which one produces a subgraph? Substreams. Substreams-powered subgraphs use Substreams for extraction and transformation, then write into a subgraph as the sink.
Both are available as hosted endpoints — get an API key at thegraph.market, no personal information required. Or self-host from github.com/streamingfast.
Related: What is Substreams? · What is a blockchain Firehose? · What is blockchain indexing?