Skip to main content
Architecture

How StreamPipes is built.

StreamPipes is a set of services around a message broker. The core manages and monitors, extension services connect and process, and two databases keep history and configuration. You decide where each part runs: all on one host to try it out, or spread across plants and a data center in production.

StreamPipes architecture: interfaces on top, the core and time-series database in the middle, a messaging layer, and extension services with adapters, processors, sinks and Functions connected to machines
Architecture overview
Components

The parts.

Each service has one job. Together they cover connecting, processing, storing, visualizing and administering, with no custom integration layer in between.

01

User interface

An Angular web application for daily work: connecting sources, building pipelines, exploring datasets, creating charts and dashboards, managing assets, users and settings. It talks to the core over REST, and you can add your own modules and theme.

02

Core

The service that manages and monitors everything else. It stores metadata, checks and starts pipelines, watches adapters and other running components, serves the UI and the REST API, and takes care of users, roles, permissions and the audit log.

03

Messaging layer

A broker carries every event between adapters, processors and sinks, so no two services talk to each other directly. NATS is the default because it is small and copes well with being deployed near machines. Kafka, MQTT and Pulsar work too if that is what you already run.

04

Extension services

Services that bring adapters, processors, sinks and Functions. Several can register with one core, each with its own set, and each is deployed and updated on its own, ideally close to the systems it talks to.

05

Storage

A time-series database for datasets, and Apache CouchDB for configuration, metadata and user data. Both come with the standard installation. Retention rules keep the time-series database from growing without limit.

06

Clients and APIs

Java and Python clients, the REST API and Functions let other applications read resources, subscribe to live streams and control pipelines without the UI.

Data flow

What happens
to an event.

An adapter turns raw signals into a typed stream. Pipelines work on that stream as events arrive. Datasets keep what you want to look at later, and charts and dashboards show it.

  1. 01Machines and systemsOPC UA, S7, MQTT, Kafka
  2. 02ConnectAdapters, schemas, units
  3. 03PipelinesProcessors and sinks
  4. 04DatasetsHistory and retention
  5. 05Charts and dashboardsOperators and teams
01Machines and systemsOPC UA, S7, MQTT, Kafka02ConnectAdapters, schemas, units03PipelinesProcessors and sinks04DatasetsHistory and retention05Charts and dashboardsOperators and teams

A stream is described once, with field types, measurement units and metadata. Every pipeline, chart and dashboard builds on that description, and the pipeline editor checks processors and sinks against it before anything runs.

Extension services

New capabilities
without touching the core.

Each extension service registers its adapters, processors, sinks and Functions with the core. The built-in ones install while the platform runs. Your own, written with the SDK, run next to the systems they talk to.

Multiple extension services at distributed locations registering with one StreamPipes core
Multiple extension services at distributed locations register with one core
Deployment

Extension services in the plant, the core in your data center.

Each plant runs a small extension service next to its PLCs and machines. The service connects outbound to the broker, so you do not open any ports into the OT network. The core, the storage and the heavier processing stay in IT.

  1. OTPlant networkPLCs, OPC UA servers and sensors feed an edge extension service with adapters and Functions
  2. FWFirewallEdge services connect outbound to the broker; no inbound ports on the OT side
  3. ITData center or cloudMessage broker, core with UI and APIs, time-series storage, processors and sinks
OTPlant networksPlant APLCSiemens S7, ModbusOPC UA serverMachines, linesSensors, brokersMQTT, files, HTTPExtension service at the edgeAdapters and Functions, deployed with Docker next to the machinesPlant BPLCSiemens S7, ModbusOPC UA serverMachines, linesSensors, brokersMQTT, files, HTTPExtension service at the edgeAdapters and Functions, deployed with Docker next to the machinesFirewallITData center or cloudMessage brokerNATS or Kafkaoutbound only, TLSCoreUI, management, monitoring, APIsTime-series storageDatasets, retention, exportExtension services in ITProcessors and sinksClients and third-party systemsPython, Java, REST, databases, brokers
  1. 01

    Run it where the data is

    Put extension services into the plant network, next to the equipment, and keep the core in the data center or in the cloud. The broker connects the two.

  2. 02

    Start small, grow in place

    One Docker Compose host is enough to try things out. The same services scale out on Kubernetes with the Helm chart later, and your pipelines stay as they are.

  3. 03

    The data stays yours

    Everything runs on infrastructure you control. There is no usage metering and no proprietary format, and you can export a dataset whenever you want to.

Communication

HTTP or NATS between
the core and the extensions.

In many plants, opening an inbound port to a service is not an option. StreamPipes can route the traffic between the core and extension services through NATS instead of HTTP, so a service in a restricted network only ever connects outward.

HTTP
The default. The core calls extension services directly, which is fine when everything shares one network.
NATS
Core and extension services talk through the broker. No inbound ports on the extension side, optional token authentication, TLS on the connection.
Dual and auto
Extension services can offer both, and the core uses whichever is available. Handy while you move from one mode to the other.