Introduction
Overview
A Plugin is an extensible software component used to add specific functionality to existing applications or systems without modifying the core code. It follows the "Open-Closed Principle" (open for extension, closed for modification), interacting with the main program through standardized interfaces to achieve flexible functional extension.
Rokae Plugins are divided into Client (HMI) Plugins and Controller Plugins. Client (HMI) Plugins and Controller Plugins are independent of each other, running on the Client (HMI) and Controller respectively.
Client (HMI) Plugins and Controller Plugins can cooperate with each other to implement complex functional logic.
Plugin Architecture Diagram:

Plugin Package Format
A Plugin package can contain both Client and Controller (HMI) Plugins. The naming must be fixed as client.zip and controller.zip.
Plugin Package.zip
├── client.zip
└── controller.zip
ClientPlugin (HMI) and ControllerPlugin packages can contain multiple Plugin packages. The Plugin package must contain lic and json files, as well as the corresponding dll or so files. The main system cannot load Plugin packages with incorrect package formats.
ClientPlugin:
client.zip
├── plugin1 (Windows system)
| ├──plugin1.lic
| ├──plugin1.dll
| ├──xplugin.dll
| └──plugin1.json
└── plugin2 (Arm, Ubuntu system)
├──plugin2.lic
├──plugin2.so
├──libxplugin.so
└──plugin2.json
ControllerPlugin:
controller.zip
├── plugin1
| ├──plugin1.lic
| ├──plugin1.so
| └──plugin1.json
└── plugin2
├──plugin2.lic
├──plugin2.so
└──plugin2.json