MADS interfaces

Author

Paolo Bosetti

Modified

July 27, 2026

Connecting things

MADS has been developed to connect different devices and software together. The basic MADS installation provides a set of minimal, general purpose agents that solve simple needs. However, the real power of MADS is in its ability to connect to other software and devices. This is done through plugins and custom agents. The following sections provide a list of the available interfaces and how to use them.

NoteWhere to find more interfaces

Beside the default agents and plugins provided by MADS, more specific interfaces are available on github.com/mads-net. Some of the more mature agents and plugins can also be installed as MADS packages with the command mads package (see the guide).

Interfaces, by application field

Domain Interface Description Type

I/O Serial Serial port interface to an Arduino Plugin; source

I/O ArduinoUno Q Interface to an Arduino Uno Q board Plugin; source, filter, sink

I/O BluetoothLE Bluetooth Low Energy interface to BLE devices Plugin; source

I/O Raspberry PI GPIO Interface to Raspberry PI GPIO pins Plugin; source, sink

Languages Python agent Interface to Python scripts Agent; source, filter, sink

Languages Python library Python library for creating custom agents Library; source, filter, sink

Languages R plugin Interface to R scripts Plugin; source, filter, sink

Languages Lua plugin Interface to Lua scripts Plugin; source, filter, sink

Simulation & Digital Twins FMU agent Interface to Functional Mock-up Units (FMUs) Agent; source, filter

AI & ML ONNX agent Interface to ONNX models Agent; source, filter

Log and storage HDF5 plugin Interface to HDF5 files Plugin; sink
Networking mads-federate Federation of MADS networks (since MADS v2.4.0) Agent
Important

The usual way to use these interfaces is to clone, configure, build and install them. By default, the install step installs the products in the MADS prefix folder, as given by mads --prefix, so that they can be found by MADS commands and plugin loaders.

Remember the mads inspect_plugins command to validate a compiled plugin for compatibility with your current MADS installation:

> mads inspect_plugin $(mads -p)/lib/hdf5_writer.plugin
plugin: /usr/local/lib/hdf5_writer.plugin
loadable: yes
protocol_current: yes
type: sink
expected_protocol_version: 7
drivers:
  - name: hdf5_writer, type: sink, protocol_version: 7

When a plugin cannot be loaded, it’s probably due to library mismatches with a more recent MADS version. In these cases:

  • Delete the build directory
  • Create a blank plugin in a temporary directory with the command mads plugin
  • Compare the CMakeLists.txt file of the new plugin with the one of the plugin that cannot be loaded. Pay specifically attention to fetched libraries and their versions.
  • Update the old CMakeLists.txt file accordingly
  • Configure and build again: cmake -Bbuild -GNinja $$ cmake --build build -j6 (or similar)
Back to top