AggreGate has a modular architecture based on plugins. In fact, the system core is extremely lightweight and even standard server modules are implemented as optional plugins.
Programmatic development of plugins is a way of extending system communication, storage, analytics and visualization capabilities. Custom plugins are only required when the visual development tools don't do the trick. This is quite a rare situation.
There are many plugin types supported:
- Device drivers
- Data storage plugins
- Data processing and analysis modules
- Visual user interface components
- Localization and rebranding packages
- External user authentication modules
- Web applications
- Resource packs
Since plugins work inside the AggreGate server or unified console, they should be developed in Java. Each plugin is a single Java Archive (JAR) file that may optionally depend on other plugins.
Plugin architecture is based on the Java Plugin Framework (JPF) library. JPF was selected in favor of frameworks like OSGi due to its extremely lightweight nature. It allows the server to operate in low-memory environments, like single-board computers, IoT gateways, touch panels and Linux PLCs.
Apart from adding completely new data storage/processing/visualization functionality, plugins can also include resources of existing types, such as alerts or reports.