# stream()
- [Description](#description)
- [Signature](#signature)
- [Static members](#static-members)
- [Stream.combine](#streamcombine)
- [Stream.merge](#streammerge)
- [Stream.scan](#streamscan)
- [Stream.scanMerge](#streamscanmerge)
- [Stream.lift](#streamlift)
- [Stream.SKIP](#streamskip)
- [Stream["fantasy-land/of"]](#streamfantasy-landof)
- [Instance members](#instance-members)
- [stream.map](#streammap)
- [stream.end](#streamend)
- [stream["fantasy-land/of"]](#streamfantasy-landof-1)
- [stream["fantasy-land/map"]](#streamfantasy-landmap)
- [stream["fantasy-land/ap"]](#streamfantasy-landap)
- [Basic usage](#basic-usage)
- [Streams as variables](#streams-as-variables)
- [Bidirectional bindings](#bidirectional-bindings)
- [Computed properties](#computed-properties)
- [Chaining streams](#chaining-streams)
- [Combining streams](#combining-streams)
- [Stream states](#stream-states)
- [Serializing streams](#serializing-streams)
- [Streams do not trigger rendering](#streams-do-not-trigger-rendering)
- [What is Fantasy Land](#what-is-fantasy-land)
---
### Description
A Stream is a reactive data structure, similar to cells in spreadsheet applications.
For example, in a spreadsheet, if `A1 = B1 + C1`, then changing the value of `B1` or `C1` automatically changes the value of `A1`.
Similarly, you can make a stream depend on other streams so that changing the value of one automatically updates the other. This is useful when you have very expensive computations and want to only run them when necessary, as opposed to, say, on every redraw.
Streams are NOT bundled with Mithril.js' core distribution. To include the Streams module, use:
```javascript
var Stream = require("mithril/stream")
```
You can also download the module directly if your environment does not support a bundling toolchain:
```html
```
When loaded directly with a `