View on GitHub

Microservice DSL (MDSL)

A Domain-Specific Language (DSL) to specify (micro-)service contracts, their data representations and API endpoints.

Quick Links: MDSL Home, OpenAPI, Protocol Buffers, GraphQL schema, Jolie, Java POJOs, Freemarker, AsyncAPI Generators, Design Transformations and Refactorings

MDSL Tools: Users Guide

At present, the following types of MDSL Tools are available:

Context Mapper has its own website.

Command Line Interface (CLI) Tools

The CLI tools can validate MDSL files and call our generators from the command line. When calling ./mdsl (or mdsl.bat in Windows), the CLI shows you the available parameters:

usage: mdsl
 -f,--outputFile <arg>   The name of the file that shall be generated.
                         This parameter is only used if you pass 'text' to
                         the 'generator' (-g) parameter because the
                         Freemarker generator does not guess any file name
 -g,--generator <arg>    The generator you want to call. Use one of the
                         following values: oas (OpenAPI Specification),
                         proto (Protocol Buffers), jolie (Jolie), graphql
                         (GraphQL Schemas), java (Java Modulith), text
                         (arbitrary text file by using a Freemarker
                         template), soad (transformation chain to generate
                         bound endpoint type from user story), storyoas
                         (transformation chain to generate OpenAPI from
                         scenario/story), gen-model-json (Generator model
                         as JSON (exporter)), gen-model-yaml (Generator
                         model as YAML (exporter))
 -h,--help               Prints this message.
 -i,--input <arg>        Path to the MDSL file for which you want to
                         generate output.
 -o,--outputDir <arg>    The output directory into which the generated
                         files shall be written. By default files are
                         generated into the execution directory.
 -s,--standalone         Create output in main memory and write it to
                         standard output console.
 -t,--template <arg>     Path to the Freemarker template you want to use.
                         This parameter is only used if you pass 'text' to
                         the 'generator' (-g) parameter. 

Please refer to the readme of the DSL core project and of the CLI package for more information.

Eclipse Plugin

MDSL Editor

The MDSL Eclipse plugin provides editing support (syntax highlighting, auto completion, etc.) for our DSL. You can install the released snapshot versions of the plugin in your Eclipse from the following update site:

Once you have installed the plugin successfully, the MDSL editor should open for any file that ends with .mdsl. You can create one and copy-paste the above hello world example, or find additional examples in this folder.

If you want to check whether the plugin has installed successfully, you can go to the Eclipse “Help” menu, select “About Eclipse IDE” and then “Installation Details”. Two MDSL entries should be there.

API Linter

The API Linter comes with the MDSL Editor as well as the CLI (see above); every time a file is saved or parsed, a number of validation rules and some simple metrics are evaluated and the results displayed in the Problems view of Eclipse.

In addition to the usual editor features such as syntax highlighting, completion and syntax checking, it implements a few simple semantic validators (as a basic API Linter demonstrator):

An example that features all validators in action can be found in the examples folder of the repository: APILinterTestAndDemo.mdsl. The validation of this MDSL file yields the following errors, warnings and information messages (among others):

API Linter example

Update (12/2021): Several more validators are available now, many of which are able to trigger continuos specification refinements via quick fix transformations.


Quick fixes and menu entries support rapid service-oriented analysis and design and an “API first” approach. For instance, the plugin now comes with quick fixes to complete data type specifications:

Many endpoint-level transformations are available now too, including one to create AsyncMDSL from core MDSL. A Move Operationrefactoring is available as a menu entry as well.

See this page for more information on the quick fixes and transformations.


In the MDSL Editor, you can invoke the following generators from the “MDSL” entry in the context menu:

These generator features are also available in the CLI (see above).

Generator Model for Freemarker Templating and Model Exports

To ease code generation with the template-based generator, an intermediate model is available. The following UML class diagram illustrates it (note: not all model elements are contained in the figure; for instance, flows and HTTP bindings are also accessible via the intermediate model):

MDSL Generator Model

This model can also be exported for offline processing (for instance, to feed other tools):

Note: This feature is subject to change. We use it internally in the GraphQL schema and Java generators, so it has reached a certain level of maturity and test coverage. That said, it also has some known limitations and much room for improvement:

MDSL Web Tools

You may want to try this experimental MDSL Web version of the tools.

Site Navigation

HomeEndpoint TypeData TypeProvider and ClientBindingsTutorialTools

Copyright: Olaf Zimmermann, 2018-2022. All rights reserved. See license information.