@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
framework.
@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, 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.
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.
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 applications can load swim-core.js, which comes bundled with the
@swim/streamlet library, directly from the SwimOS CDN.
<!-- Development --><scriptsrc="https://cdn.swimos.org/js/latest/swim-core.js"></script><!-- Production --><scriptsrc="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
libraries.
<!-- Development --><scriptsrc="https://cdn.swimos.org/js/latest/swim-system.js"></script><!-- Production --><scriptsrc="https://cdn.swimos.org/js/latest/swim-system.min.js"></script>
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.
@swim/streamlet
@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 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, 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
andOutlet
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
, andreduce
, that produce new, transformed outlets. The Streamlet model enables ultra efficient recomputation of combinators. Thereduce
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 intonode_modules/@swim/streamlet/main
. Transpiled JavaScript and TypeScript definition files install intonode_modules/@swim/streamlet/lib/main
. And a pre-built UMD script can be found innode_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.Alternatively, the standalone
swim-system.js
script may be loaded from the SwimOS CDN, which bundles @swim/streamlet together with all other @swim/system libraries.Usage
ES6/TypeScript
@swim/streamlet can be imported as an ES6 module from TypeScript and other ES6-compatible environments.
CommonJS/Node.js
@swim/streamlet can also be used as a CommonJS module in Node.js applications.
Browser
When loaded by a web browser, the
swim-core.js
script adds all @swim/streamlet library exports to the globalswim
namespace.The
swim-system.js
script also adds all @swim/streamlet library exports to the globalswim
namespace, making it a drop-in replacement forswim-core.js
when additional @swim/system libraries are needed.