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).
We recommend using Stack: stack build && stack install
, but it is also possible to use Cabal
directly: cabal build && cabal install
.
StrIoT can be used in several ways:
You can define a stream-processing program directly in terms of the provided operators. See docs/Operators.md 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!
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.
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: https://hub.docker.com/u/striot
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: https://lists.ncl.ac.uk/wws/info/striot
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.