# OpexFlow OpexFlow documentation — industrial data middleware: poll, normalize, transform, and deliver machine data with a single binary. Full corpus (all pages, one document): https://flow.opexcg.com/llms-full.txt ## Pages - [AI transform generator](https://flow.opexcg.com/ai-generator/index.md) — Describe a transform in plain language and OpexFlow writes the DSL or JS, server-validated before it lands, via any OpenAI-compatible endpoint. - [blog](https://flow.opexcg.com/blog/llms.txt) - [CLI](https://flow.opexcg.com/cli/index.md) — The opex-flow binary takes an optional config path (defaults to config.yaml); validate transforms through the UI or REST API. - [Configuration reference](https://flow.opexcg.com/configuration/index.md) — OpexFlow reads YAML with ${ENV_VAR} substitution. Top-level sections cover the connector, adapters, transforms, sinks, telemetry, and AI codegen. - [Core concepts](https://flow.opexcg.com/core-concepts/index.md) — OpexFlow is built around four primitives — sources, transforms, sinks, and flows — all normalized to CanonicalMachineData. - [Deployment](https://flow.opexcg.com/deployment/index.md) — Run OpexFlow under systemd or cross-compile the same static binary to ARM64 edge devices. - [Flows](https://flow.opexcg.com/flows/index.md) — A flow is a canvas tab grouping sources, transforms, and sinks. Events flow as native CanonicalMachineData structs with per-source routing. - [Installation](https://flow.opexcg.com/installation/index.md) — Install OpexFlow from Docker (full stack) or build the single static binary from source with only the adapters you need. - [JavaScript transforms](https://flow.opexcg.com/javascript-transforms/index.md) — Sandboxed JavaScript transforms for logic the DSL can't express — loops, regex, vendor-field reshaping — with hard memory and deadline limits. - [Licensing](https://flow.opexcg.com/licensing/index.md) — OpexFlow is commercially licensed with opt-in Polar enforcement, an offline grace window, a dev/CI escape hatch, and an R2-backed download worker. - [Observability](https://flow.opexcg.com/observability/index.md) — Native Prometheus metrics, in-process traces, SQLite history series, and stall alerts — no sidecar collector required. - [Quick start](https://flow.opexcg.com/quick-start/index.md) — Stand up a connector identity, one Modbus source, and a default DSL transform, then watch records flow through the canvas UI. - [REST API](https://flow.opexcg.com/rest-api/index.md) — The JSON-over-HTTP API the canvas UI uses — health, sources, transforms, devices, flows, config, observability, and a live WebSocket stream. - [Sinks](https://flow.opexcg.com/sinks/index.md) — Each transform route fans out to a set of sinks — hub, push, NATS, MQTT, SQLite, ClickHouse, or Postgres/TimescaleDB. - [Sources](https://flow.opexcg.com/sources/index.md) — Protocol adapters — Modbus, OPC-UA, HTTP, MQTT, NATS, FOCAS, and MTConnect — each normalizing events to CanonicalMachineData. - [Transform DSL](https://flow.opexcg.com/transform-dsl/index.md) — A tiny, statement-based language evaluated natively against the in-memory CanonicalMachineData struct — the lowest-latency path for filters and field math. - [OpexFlow Documentation](https://flow.opexcg.com/welcome/index.md) — Industrial data middleware: OpexFlow ingests from any protocol, transforms data in flight with JavaScript or the native DSL, and delivers to any sink from a single static binary.