Documentation

Documentation for mako, the open-source German energy-market platform in Rust: guides, operator manuals, EDIFACT reference and regulatory mapping.

Start here

If you want to…Go to
See it work end to end in a few minutesGetting started
Understand how a message becomes a processArchitecture
Run a service in productionServices
Parse, validate or build EDIFACT yourselfReference
Trace a rule back to its Festlegung or §Regulatory
Take on a new BDEW format releaseRelease & compliance

Find it by market role

makod registers the engine modules of the roles its [deployment] rollen declares, and a role-built processd cannot answer as a role it was not built for. Which principal may read which role's processes (§ 6a Abs. 1 EnWG) is the deployment's Cedar policy. makod, marktd, edmd, processd and agentd run in every role; the rest are role-specific.

RoleAlso runsStarts at
NB — Netzbetreiberprocessd (incl. the Sperrauftrag queue) · netzbilanzd · einsdprocessd — the STP auto-responder
LF — Lieferantprocessd · vertragd · productd · billingd · invoicd · accountingd · outputd · portald · einsdbillingd — retail billing and EN 16931
MSB — Messstellenbetreiberprocessd · vertragdedmd — metering and SMGW lifecycle
ESA — Energieserviceanbieter—makod — the §34 MsbG Wertebestellung

How the layers fit together

graph TB
    subgraph transport ["Transport"]
        AS4["AS4 / ebMS3<br/>BDEW AS4-Profil"]
        API["API-Webdienste<br/>REST"]
    end
    subgraph format ["Format — generated from BDEW profiles"]
        EDI["edi-energy<br/>parse · validate · build"]
    end
    subgraph domain ["Domain — typed commands and events"]
        ENG["mako-engine<br/>workflows · Fristen · outbox"]
        MODS["mako-gpke · mako-wim<br/>mako-geli-gas · mako-mabis · …"]
    end
    subgraph services ["Services"]
        SVC["makod · marktd · billingd<br/>accountingd · edmd · …"]
    end

    AS4 --> EDI
    API --> ENG
    EDI -->|"typed message"| ENG
    ENG --- MODS
    ENG --> SVC
    SVC -->|"CloudEvents"| SVC

The domain layer never sees EDIFACT and the format layer never knows what a Lieferantenwechsel is, so a BDEW format release is an import of new profiles rather than a change to process logic.

Common tasks

TaskPage
Parse an interchange and read its typed fieldsParsing
Find which workflow owns a PrüfidentifikatorPID reference
Look up an answer FristProcess catalogue
Configure AS4 against a counterpartymakod — [as4]
Submit a command from an ERPERP integration
Take on a new BDEW releaseAnnual release workflow
Write a test against the real Fristenmakotest