Skip to content

Plugins

Everything MDEO Cloud can do with a file comes from a plugin. The platform ships with nine, and they use exactly the contract described in the developer guide — nothing about them is privileged.

Each plugin page below follows the same structure: what it is for, the languages it contributes, the contribution plugins it contributes to other languages, what it depends on, and where its code lives.

The bundled plugins

PluginLanguagesContributes toPurpose
Metamodelmetamodel (.mm)ConfigDefine the structure of a domain
Modelmodel (.m), model_gen (.m_gen)Instantiate a metamodel
Model Transformationmodel-transformation (.mt), model-transformation_gen (.mt_gen)Rewrite models; the mutation operators of a search
Scriptscript (.fn)ConfigObjectives, constraints and helper logic
Configconfig (.config)The host language for configuration sections
Config Optimizationconfig-optimization (generated)ConfigThe problem and goal sections
Config MDEOconfig-mdeo (generated)ConfigThe search, solver and runtime sections
CSVcsv (.csv)Tabular data files
Model CSVmodel-csv (generated)ModelBuild a model from CSV files

How they fit together

RelationshipExample
A file names the metamodel it is written againstplan.m, assign.mt and objectives.fn each start with using "./tasks.mm"
A file imports declarations from another fileoptimize.config has import { unassignedEffort } from "./objectives.fn"
A file imports data from another fileplan.m has import CSV { Task from "./tasks.csv" }
A plugin exports its AST types to other contribution pluginsMetamodel exports Class and Property; Script exports Function
A plugin contributes sections to the config languageConfig Optimization contributes problem and goal; Config MDEO contributes search, solver and runtime
A contribution plugin depends on another one's computed dataConfig MDEO needs the problem section of Config Optimization before it can resolve class names

Three kinds of relationship appear here:

  • using / import in source files. A model, a transformation and a script each name the metamodel they are written against; a config file imports functions from a script file. These are ordinary cross-file references resolved by the language servers.
  • Type exports between contribution plugins. The metamodel and script plugins contribute nothing syntactic to the config language, but they export their AST types so that the plugins which do contribute syntax can refer to metamodel classes and script functions.
  • Section contributions. Config Optimization and Config MDEO each hand the config language a grammar and a list of sections. Config MDEO further declares a section dependency on the problem section of Config Optimization, because it needs to know the metamodel before it can resolve class names inside search.

What a plugin looks like from outside

A plugin is a URL. The backend fetches GET <url>/ and gets back a manifest — a JSON document listing the languages and contributions. Static assets referenced from that manifest (language.js, editor.js, styles.css) are served by the same service and imported by the workbench as ES modules.

The bundled plugins are reachable at /plugin/<name> behind the workbench's reverse proxy, which is what the default DEFAULT_PLUGIN_URLS refers to. The two CSV plugins are the exception: only infra/docker-compose-dev.yaml starts and registers them.

Writing your own

Start at The extension model, then Add a plugin.

Released under the terms of the repository licence.