# openlightingproject/ola architecture

> Architecture diagram of the GitHub repository openlightingproject/ola, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/openlightingproject/ola
- Repository: https://github.com/openlightingproject/ola

## Overview

OLA is a lighting-control distribution framework: client applications submit DMX or RDM control work to the olad daemon, which routes it through universes and ports to protocol or hardware plugins. Plugins abstract diverse network protocols and devices; the README also identifies protocol conversion and DMX-over-IP gateway use. The graph includes the client, daemon, plugin, web-control, and protocol layers. Runtime wiring beyond the sampled plugin manager and UI code is based on documented product roles and repository structure, not a complete source trace.

Main entry points: [`olad/OlaServerServiceImpl.cpp`](https://github.com/openlightingproject/ola/blob/master/olad/OlaServerServiceImpl.cpp) (RPC service), [`olad/plugin_api/PluginAdaptor.cpp`](https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/PluginAdaptor.cpp) (Plugin adaptor), [`plugins/artnet/ArtNetPlugin.cpp`](https://github.com/openlightingproject/ola/blob/master/plugins/artnet/ArtNetPlugin.cpp) (Protocol and hardware plugins), [`common/rdm/RDMAPI.cpp`](https://github.com/openlightingproject/ola/blob/master/common/rdm/RDMAPI.cpp) (RDM control)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Clients and UI"]
  node_libola["C++ client library<br/>[OlaClient.cpp]"]
  node_web_ui["Web control UI<br/>[server.js]"]
end

subgraph group_daemon["Daemon Core"]
  node_client_broker["Client broker<br/>[ClientBroker.cpp]"]
  node_rpc_service["RPC service"]
  node_daemon_server["Daemon server<br/>[OlaServer.cpp]"]
  node_plugin_manager["Plugin manager<br/>[PluginManager.cpp]"]
  node_universe["Universe routing<br/>[Universe.cpp]"]
  node_device_manager["Device management<br/>[DeviceManager.cpp]"]
  node_port_api["Port API<br/>[PortManager.cpp]"]
  node_rdm_api["RDM control<br/>[RDMAPI.cpp]"]
  node_web_server["HTTP server<br/>[OladHTTPServer.cpp]"]
end

subgraph group_plugins["Device Plugins"]
  node_plugin_adaptor["Plugin adaptor<br/>[PluginAdaptor.cpp]"]
  node_plugins["Protocol and hardware plugins<br/>[ArtNetPlugin.cpp]"]
end

subgraph group_protocols["Lighting Protocols"]
  node_sacn["sACN transport<br/>[E131Sender.cpp]"]
  node_acn_stack["ACN protocol stack<br/>[E131Inflator.cpp]"]
  node_rdmnet["E1.33 RDMnet<br/>[E133Inflator.cpp]"]
end

node_operator(("Lighting operator"))
node_client_app(("Client application"))
node_lighting_equipment(("Lighting equipment"))

node_operator -->|"issues control"| node_client_app
node_client_app -->|"uses library"| node_libola
node_libola -->|"RPC requests"| node_client_broker
node_web_ui -->|"HTTP requests"| node_web_server
node_web_server -->|"dispatches"| node_rpc_service
node_client_broker -->|"dispatches"| node_rpc_service
node_daemon_server -->|"hosts"| node_rpc_service
node_daemon_server -->|"manages plugins"| node_plugin_manager
node_plugin_manager -->|"configures plugins"| node_plugin_adaptor
node_plugin_adaptor -->|"registers devices"| node_device_manager
node_rpc_service -->|"routes DMX"| node_universe
node_universe -->|"selects ports"| node_port_api
node_port_api -->|"dispatches output"| node_plugin_adaptor
node_plugin_adaptor -->|"adapts plugin calls"| node_plugins
node_rpc_service -->|"handles RDM"| node_rdm_api
node_rdm_api -->|"sends RDM"| node_plugins
node_plugins -.->|"uses transport"| node_sacn
node_sacn -->|"encodes packets"| node_acn_stack
node_plugins -->|"controls devices"| node_lighting_equipment
node_acn_stack -->|"sends sACN"| node_lighting_equipment
node_rdm_api -.->|"RDMnet support"| node_rdmnet

click node_libola "https://github.com/openlightingproject/ola/blob/master/ola/OlaClient.cpp"
click node_web_ui "https://github.com/openlightingproject/ola/blob/master/javascript/ola/common/server.js"
click node_client_broker "https://github.com/openlightingproject/ola/blob/master/olad/ClientBroker.cpp"
click node_rpc_service "https://github.com/openlightingproject/ola/blob/master/olad/OlaServerServiceImpl.cpp"
click node_daemon_server "https://github.com/openlightingproject/ola/blob/master/olad/OlaServer.cpp"
click node_plugin_manager "https://github.com/openlightingproject/ola/blob/master/olad/PluginManager.cpp"
click node_universe "https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/Universe.cpp"
click node_device_manager "https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/DeviceManager.cpp"
click node_port_api "https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/PortManager.cpp"
click node_rdm_api "https://github.com/openlightingproject/ola/blob/master/common/rdm/RDMAPI.cpp"
click node_plugin_adaptor "https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/PluginAdaptor.cpp"
click node_plugins "https://github.com/openlightingproject/ola/blob/master/plugins/artnet/ArtNetPlugin.cpp"
click node_sacn "https://github.com/openlightingproject/ola/blob/master/libs/acn/E131Sender.cpp"
click node_acn_stack "https://github.com/openlightingproject/ola/blob/master/libs/acn/E131Inflator.cpp"
click node_rdmnet "https://github.com/openlightingproject/ola/blob/master/libs/acn/E133Inflator.cpp"
click node_web_server "https://github.com/openlightingproject/ola/blob/master/olad/OladHTTPServer.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_libola,node_web_ui,node_client_app toneBlue
class node_client_broker,node_rpc_service,node_daemon_server,node_plugin_manager,node_universe,node_device_manager,node_port_api,node_rdm_api,node_web_server toneAmber
class node_plugin_adaptor,node_plugins toneMint
class node_sacn,node_acn_stack,node_rdmnet toneRose
class node_operator,node_lighting_equipment toneIndigo
```

## Components

### Clients and UI

- [C++ client library](https://github.com/openlightingproject/ola/blob/master/ola/OlaClient.cpp): `ola/OlaClient.cpp`
- [Web control UI](https://github.com/openlightingproject/ola/blob/master/javascript/ola/common/server.js): `javascript/ola/common/server.js`

### Daemon Core

- [Client broker](https://github.com/openlightingproject/ola/blob/master/olad/ClientBroker.cpp): `olad/ClientBroker.cpp`
- [RPC service](https://github.com/openlightingproject/ola/blob/master/olad/OlaServerServiceImpl.cpp): `olad/OlaServerServiceImpl.cpp`
- [Daemon server](https://github.com/openlightingproject/ola/blob/master/olad/OlaServer.cpp): `olad/OlaServer.cpp`
- [Plugin manager](https://github.com/openlightingproject/ola/blob/master/olad/PluginManager.cpp): `olad/PluginManager.cpp`
- [Universe routing](https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/Universe.cpp): `olad/plugin_api/Universe.cpp`
- [Device management](https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/DeviceManager.cpp): `olad/plugin_api/DeviceManager.cpp`
- [Port API](https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/PortManager.cpp): `olad/plugin_api/PortManager.cpp`
- [RDM control](https://github.com/openlightingproject/ola/blob/master/common/rdm/RDMAPI.cpp): `common/rdm/RDMAPI.cpp`
- [HTTP server](https://github.com/openlightingproject/ola/blob/master/olad/OladHTTPServer.cpp): `olad/OladHTTPServer.cpp`

### Device Plugins

- [Plugin adaptor](https://github.com/openlightingproject/ola/blob/master/olad/plugin_api/PluginAdaptor.cpp): `olad/plugin_api/PluginAdaptor.cpp`
- [Protocol and hardware plugins](https://github.com/openlightingproject/ola/blob/master/plugins/artnet/ArtNetPlugin.cpp): `plugins/artnet/ArtNetPlugin.cpp`

### Lighting Protocols

- [sACN transport](https://github.com/openlightingproject/ola/blob/master/libs/acn/E131Sender.cpp): `libs/acn/E131Sender.cpp`
- [ACN protocol stack](https://github.com/openlightingproject/ola/blob/master/libs/acn/E131Inflator.cpp): `libs/acn/E131Inflator.cpp`
- [E1.33 RDMnet](https://github.com/openlightingproject/ola/blob/master/libs/acn/E133Inflator.cpp): `libs/acn/E133Inflator.cpp`

### Other components

- **Lighting operator**
- **Client application**
- **Lighting equipment**

## Connections

- Lighting operator → Client application: issues control
- Client application → C++ client library: uses library
- C++ client library → Client broker: RPC requests
- Web control UI → HTTP server: HTTP requests
- HTTP server → RPC service: dispatches
- Client broker → RPC service: dispatches
- Daemon server → RPC service: hosts
- Daemon server → Plugin manager: manages plugins
- Plugin manager → Plugin adaptor: configures plugins
- Plugin adaptor → Device management: registers devices
- RPC service → Universe routing: routes DMX
- Universe routing → Port API: selects ports
- Port API → Plugin adaptor: dispatches output
- Plugin adaptor → Protocol and hardware plugins: adapts plugin calls
- RPC service → RDM control: handles RDM
- RDM control → Protocol and hardware plugins: sends RDM
- Protocol and hardware plugins → sACN transport: uses transport
- sACN transport → ACN protocol stack: encodes packets
- Protocol and hardware plugins → Lighting equipment: controls devices
- ACN protocol stack → Lighting equipment: sends sACN
- RDM control → E1.33 RDMnet: RDMnet support
