The manifest
manifest.yaml is the registration, the contract, and the documentation of a module. The SDK validates it locally; the loader validates it again at startup.
id: my_module # lowercase snake_case, globally unique
name: My Module
version: 0.1.0
category: advanced # foundation | attribute | external_input | advanced | comparison | other
description: One line, shown on the module card.
about: >- # 2-4 sentences for "About this module"
What the module does and when it is worth opening.
license: MIT
keywords: [conformance check, playback] # helps MATE AI route chat to this module
default_enabled: true
isConfidentialSafe: true # true only if the log never leaves the host
requirements:
event_log:
log_model: case_centric # case_centric (default) | object_centric
required_columns: [case_id, activity, timestamp]
optional_columns: [resource, end_timestamp]
min_events: 100
min_cases: 5
modules: [discovery] # hard dependencies
optional_modules:
- id: performance
reason: Cycle times come from performance when it is installed.
provides: [my_module.metrics] # capabilities and topics you publish
consumes: [log.imported, discovery.completed]
dependencies:
python:
requires-python: ">=3.12"
packages: ["scikit-learn>=1.5"] # private to this module
inherit: [pm4py, pandas] # reuse the platform's copies
isolation: in_process # in_process | subprocess
execution: thread # thread | worker
runtime: # JVM modules instead of dependencies.python
kind: jvm
jar: dist/my-module-all.jar
requires-java: 17
jvm-args: ["-Xmx1g"]
frontend:
panel: ./panel/index.tsx
panel_help: { what: …, read: …, computed: … }
log_filter: true
widgets: [...] # see the frontend chapter
datasets:
- id: ranking
title: Activity ranking
shape: table # table | graph | kpi | tree | blob
route: /ranking
ai_models: # optional generated settings card
llm: { title: LLM, description: Used to summarise results. }
model_store: { title: Model files, config_key: model }
source: # citations, max 20
- title: A Great Paper
fullCitation: >-
J. Doe and J. Smith, "A great paper," in 2024 6th International Conference
on Process Mining (ICPM), Aachen, Germany, 2024, pp. 1-8
url: https://doi.org/10.1109/xxxx
artifacts: # other links, max 20
- { name: Reference implementation, url: https://github.com/janedoe/great-miner }
config_schema: # renders the per-user settings form
properties:
threshold: { type: number, title: Drift threshold, minimum: 0, maximum: 1, default: 0.25 }
Field reference#
| Field | Notes |
|---|---|
id | Lowercase snake_case, globally unique, must match the class attribute in module.py. |
category | Where the card sits in the grid: foundation, attribute, external_input, advanced, comparison, other. |
about | Longer plain-language text for the info box; falls back to description. |
requirements.event_log | The availability gate: log model, columns, minimum events and cases. |
requirements.modules / optional_modules | Hard and soft module dependencies. A cycle or a missing hard dependency drops the affected modules and logs an error; the rest boot. |
provides / consumes | The contract you publish and rely on; a boot-time check logs an unmatched job-backed subscription (modules.precompute_subscription_unprovided). Availability and the precompute closure are derived from it. |
default_enabled | Whether new accounts get the module enabled. |
precompute | lazy (default) computes the first time a log opens the module; eager also runs it in the background right after every import. Reserve eager for the one module whose output is opened first — it costs CPU on every import, and an admin can override it per module. |
isConfidentialSafe | Set true only when the log never leaves the host. |
source / artifacts | Citations and links, at most 20 each. |
config_schema | JSON-Schema-flavoured; the platform renders the form. |
ai_models / model_store | Opt into generated AI-model selectors or a model-file upload card. |
Validation rules#
- A package cannot be in both
packagesandinherit. - Declaring
author,author_url,authors,paper_url, orpapersis a hard error — credit belongs insource[].fullCitation, in IEEE style with the DOI omitted (the DOI goes inurl). - A foreign
runtimemust not declarepackages,inherit, orrequires-python, and may not forceisolation: in_process; itsjarmust be folder-relative. log_modelis the single switch between the two log worlds:case_centricreadsctx.event_log,object_centricreadsctx.object_log, and a module never appears on the wrong kind of log.
# validate before the platform does
uv run python -c "from mate.sdk import Manifest; Manifest.load_yaml('modules/my_module/manifest.yaml')"