Modules are implemented as standalone processes that are invoked by the server. They are written in Java, although other programming languages are conceivable. To support Java module developers, there is a library "datasqill-api" that provides some functionality.
The input parameters are passed to a module by the datasqill server at runtime in the form of a JSON object (Request). These parameters include, among others, the transformation instruction, the module's data sources and targets, the attributes, and a command.
As a response, a module returns a JSON object (Response). This contains all information for answering the task from the datasqill server. This includes errors that occurred, data volumes processed, runtimes, and other statistical information.

The transmission of the request (JSON-Request) and the response (JSON-Response) takes place via the standard channels of the module process. The server sends the request to the process via "stdin", and the module must return its response to the server via "stderr". The module can send debug output via the standard output channel (stdout), which the server can persist with the help of a table and make available to the datasqill developer.
Modules are built based on module classes and can be considered as variants of these classes. The module class provides the functionality in the form of program code; a module supplements this with configuration parameters.

As a rule, one module is formed from one module class. However, there are also more complex use cases where classes are reused and different modules are created from one implementation through different configuration parameters.