# @swim/streamlet

> Stateful, streaming component model for application componets that continuously consume input state from streaming inlets, and continuously produce output state on streaming outlets

Latest version **3.11.1** (published 2021-08-17) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @swim/streamlet
pnpm add @swim/streamlet
yarn add @swim/streamlet
bun add @swim/streamlet
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 3.11.1 |
| Published | 2021-08-17 |
| First published | 2019-02-18 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 2 |
| Unpacked size | 1.1 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Chris Sachs |
| Maintainers | c9r |

## Links

- npm: https://www.npmjs.com/package/@swim/streamlet
- Repository: https://github.com/swimos/swim
- Homepage: https://github.com/swimos/swim/tree/master/swim-system-js/swim-core-js/@swim/streamlet
- Issues: https://github.com/swimos/swim/issues
- npm.io page: https://npm.io/package/@swim/streamlet

## Dependencies (2)

- [@swim/util](https://npm.io/package/@swim/util.md) 3.11.1
- [@swim/collections](https://npm.io/package/@swim/collections.md) 3.11.1

## Recent versions

- 3.11.1 (latest) — 2021-08-17
- 4.0.0-dev.20210927.3 (dev) — 2024-04-04
- 4.0.0-dev.20210927.2 — 2021-11-11
- 4.0.0-dev.20210927.1 — 2021-09-27
- 4.0.0-dev.20210927 — 2021-09-27
- 4.0.0-dev.20210923 — 2021-09-23
- 4.0.0-dev.20210920 — 2021-09-20
- 4.0.0-dev.20210826 — 2021-08-26
- 3.11.0 — 2021-08-15
- 3.11.0-dev.20210722 — 2021-07-22
- 3.11.0-dev.20210702 — 2021-07-03
- 3.11.0-dev.20210618 — 2021-06-18
- 3.11.0-dev.20210611.1 — 2021-06-11
- 3.11.0-dev.20210611 — 2021-06-11
- 3.11.0-dev.20210415 — 2021-04-15
- … 14 more at https://npm.io/package/@swim/streamlet/versions

## README

# @swim/streamlet

[![package](https://img.shields.io/npm/v/@swim/structure.svg)](https://www.npmjs.com/package/@swim/streamlet)
[![documentation](https://img.shields.io/badge/doc-TypeDoc-blue.svg)](https://docs.swimos.org/js/latest/modules/_swim_streamlet.html)
[![chat](https://img.shields.io/badge/chat-Gitter-green.svg)](https://gitter.im/swimos/community)

<a href="https://www.swimos.org"><img src="https://docs.swimos.org/readme/marlin-blue.svg" align="left"></a>

**@swim/streamlet** provides a stateful, streaming component model.  Streamlets
are stateful application components that continuously consume input state from
streaming inlets, and continuously produce output state on streaming outlets.
**@swim/streamlet** is written in TypeScript, but can be used from either
TypeScript or JavaScript.  **@swim/streamlet** is part of the
[**@swim/core**](https://github.com/swimos/swim/tree/master/swim-system-js/swim-core-js/@swim/core)
framework.

## Overview

**@swim/streamlet** defines a model for continuous stateful computations that
consume many streaming input states, and produce many streaming output states.
The streamlet model facilitates dynamic binding of streaming application
components to their inputs and outputs, and provides a precise, rate decoupled,
backpressure regulated, re-evaluation model for reconciling the state of
streamlet components after their transitively dependent input states change.

Streamlets are general purpose programming constructs; they are _not_
restricted to modelling pure, data parallel functions.  Unlinke Spark RDDs,
or Flink Datasets, Streamlets can encapsulate arbitrary streaming business
logic.  And unlike [Reactive Streams](http://www.reactive-streams.org), which
are purely demand driven, Streamlets model both supply and demand signals,
enabling significantly optimized subgraph re-evaluation when sets of input
states change concurrently.

### Inlets, Outlets, and Streamlets

The streamlet programming model introduces three key concepts: inlets, outlets,
and streamlets.

- **`Inlet`** – a consumer of state changes.
- **`Outlet`** – a producer of state changes.
- **`Streamlet`** – a stateful component with zero or more named input outlets,
  and zero or more named output inlets.

Additional derivative `Inlet` and `Outlet` types provide specialized interfaces
for structured input and output states.

- **`MapInlet`** – a consumer of keyed state changes, i.e. updates to a
  key-value map.
- **`MapOutlet`** – a producer of keyed state changes, i.e. updates to a
  key-value map.

### Combinators

Outlets, being sources of state, define functional combinators, such as `map`,
`filter`, and `reduce`, that produce new, transformed outlets.  The Streamlet
model enables ultra efficient recomputation of combinators.  The `reduce`
combinator, for example, memoizes partial reduction products in a b-tree,
enabling log-time updates to its reduced state when any given input key changes.

## Installation

### npm

For an npm-managed project, `npm install @swim/streamlet` to
make it a dependency.  TypeScript sources will be installed into
`node_modules/@swim/streamlet/main`.  Transpiled JavaScript and TypeScript
definition files install into `node_modules/@swim/streamlet/lib/main`.
And a pre-built UMD script can be found in
`node_modules/@swim/streamlet/dist/main/swim-streamlet.js`.

### Browser

Browser applications can load `swim-core.js`, which comes bundled with the
**@swim/streamlet** library, directly from the SwimOS CDN.

```html
<!-- Development -->
<script src="https://cdn.swimos.org/js/latest/swim-core.js"></script>

<!-- Production -->
<script src="https://cdn.swimos.org/js/latest/swim-core.min.js"></script>
```

Alternatively, the standalone `swim-system.js` script may be loaded
from the SwimOS CDN, which bundles **@swim/streamlet** together with all other
[**@swim/system**](https://github.com/swimos/swim/tree/master/swim-system-js/@swim/system)
libraries.

```html
<!-- Development -->
<script src="https://cdn.swimos.org/js/latest/swim-system.js"></script>

<!-- Production -->
<script src="https://cdn.swimos.org/js/latest/swim-system.min.js"></script>
```

## Usage

### ES6/TypeScript

**@swim/streamlet** can be imported as an ES6 module from TypeScript and other
ES6-compatible environments.

```typescript
import * as streamlet from "@swim/streamlet";
```

### CommonJS/Node.js

**@swim/streamlet** can also be used as a CommonJS module in Node.js applications.

```javascript
var streamlet = require("@swim/streamlet");
```

### Browser

When loaded by a web browser, the `swim-core.js` script adds all
**@swim/streamlet** library exports to the global `swim` namespace.

The `swim-system.js` script also adds all **@swim/streamlet** library exports
to the global `swim` namespace, making it a drop-in replacement for
`swim-core.js` when additional **@swim/system** libraries are needed.

---
_Source: https://npm.io/package/@swim/streamlet · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
