Skip to content


Repository files navigation

StrIoT — functional stream processing for IoT

Cabal Build and Test Stack Build and Test Build and push Docker image

StrIoT is a stream-processing engine for IoT workloads, implemented as a Haskell library. A user defines a stream-processing program using a set of operators provided by StrIoT and the result is rewritten/optimised and partitioned into distinct sub-programs that can be deployed to separate processing nodes, connected together via TCP/IP.

StrIoT is experimental software being developed within a research project in the Scalable Systems Group, School of Computing, Newcastle University (UK).

Building StrIoT

We recommend using Stack: stack build && stack install, but it is also possible to use Cabal directly: cabal build && cabal install.

Using StrIoT

StrIoT can be used in several ways:

Using StrIoT Operators in Haskell

You can define a stream-processing program directly in terms of the provided operators. See docs/ for a detailed description of the operators and several example programs.

Haddock-generated API documentation is published here. This is very rudimentary, patches to improve it are welcome!

For use with the Optimiser

StrIoT's optimiser system takes as input a graph data-structure describing the stream-processing program, which is then processed and converted into distinct Haskell programs that can be individually compiled and executed. The API is described in the Haddock Haddock documentation. For more detailed examples, see the examples/ sub-directory.

Using Docker

Our examples/ use Docker and docker-compose for executing the programs output by the Optimiser.

We publish a base Docker image containing the StrIoT library to the Docker Hub:


Contributions are welcome! We use our GitHub project to track issues and manage Pull Requests. We use a low-traffic mailing list for discussions about the project:

Copyright & License

StrIoT is Copyright © 2020 Adam Cattermole, Jonathan Dowland, Paul Watson and others. StrIoT is made available under the Apache License, Version 2. See LICENSE for the full text.