Skip to content

Processes ​

Viaducta is a set of cooperating processes. The Manager serves the designer, a Controller runs each execution environment, and Hosts run the flows. Each process can be placed on its own machine, or all of them can run in a single container.

Manager ​

The backend of the designer. It serves the REST API and the designer's websocket, validates the user's Keycloak token, hosts the MCP endpoint for external AI agents, keeps the AI assistant's data and generates code for other applications.

The Manager keeps no repository of its own. It reads and writes flows, types and settings on the Controllers over the management bus, so one Manager serves every environment of one or more tenants.

Controller ​

One Controller runs each execution environment, as a Windows service, a systemd service or a container. It:

  • owns the environment's repository: flows, types, expression settings, database links, certificates, network routes, alarm definitions and hosting tags, as plain files with their history;
  • starts, supervises and stops the Hosts, and starts the auto-start flows;
  • commits to and pulls from Git;
  • runs the network hub that cloud bridges connect to;
  • starts the log shipper.

Host ​

A Host compiles and runs flows. The Controller starts Hosts as the flows' hosting strategies require (see Running flows). Besides running flows, a Host serves the designer's runtime tools for its flows: the data monitor, the debugger, the profiler, the file watcher and the test agent.

LLM process ​

The AI assistant runs in its own process, one per tenant, started by the Manager and stopped after five minutes without use. It talks to the model provider you configure: Microsoft Foundry (Azure OpenAI), or any OpenAI-compatible endpoint such as vLLM or Ollama, including models on your own hardware.

Roslyn process ​

C# code completion, IntelliSense and diagnostics in the designer come from a Roslyn process, started when you open the first C# script of a flow, one process per flow. When you reopen the flow the running process is reused; after five minutes without use it ends and returns all its memory. It serves the editor only; flows are compiled by the Hosts.

Log shipper ​

Started by the Controller. It reads log messages from the bus, writes them to OpenSearch in bulk and answers the designer's log searches. Keeping the OpenSearch client out of the Hosts keeps every Host small.

Cloud bridge ​

A small program for Windows, Linux and macOS, installed at a site where systems must be reached. It connects out to the Controller's network hub over a websocket and carries network routes in both directions: flows reach databases and devices at the site, and systems at the site reach services published by flows. No VPN and no inbound firewall rule are needed. You download the bridge from the designer, already configured for its site.

Communication planes ​

The processes talk over a message bus. Each connection between process groups is a plane, and each plane uses the bus that suits where its processes run:

PlaneBetweenTypical bus
ManagementManager and ControllersNATS, or UDS when they share a machine
ExecutionController and its HostsUDS
DevelopmentManager and Roslyn processesshares the execution bus, or NATS
CognitiveManager and LLM processesshares the execution bus, or NATS
  • UDS (Unix domain sockets) is the fastest and connects processes on one machine. Hosts and their Controller use it, and a single-container installation uses it everywhere.
  • NATS connects processes on different machines or sites: one Manager driving Controllers in several data centres, or Roslyn and LLM processes moved to their own machines.
  • Kafka does the same as NATS, for organisations that want every message between the processes on a bus they can inspect.

A plane without a bus of its own shares the execution bus. Channels are separated per tenant.

Identity ​

Sign-in goes through Keycloak. The Manager validates the token on every request and websocket connection, and the user's roles (designer, viewer, administrator) decide what they can do. A tenant has its execution environments and its users; one installation serves one tenant or many.

Viaducta documentation