Introduction
iec-checker is an open-source static analyzer for IEC 61131-3 programs. It catches bugs and PLCOpen guideline violations in Structured Text before the program ever reaches the PLC.
It highlights potential issues and guideline violations in your code:

Supported languages and formats
iec-checker analyzes Structured Text with the language extensions accepted by the matiec compiler.
Supported input formats:
- Plain ST source code
- PLCOpen XML
- SEL XML (Schweitzer Engineering Laboratories vendor format)
If iec-checker does not support Structured Text extensions from your PLC vendor, please open an issue — adding new dialects is usually a small parser change.
Alternatively, if you're looking for support of more languages, new detectors, or your vendor's extensions as first-class citizens, you may consider sponsor development.
What it checks
iec-checker ships with 27 built-in detectors out of the box: 25 PLCOpen Guideline checks covering naming, initialization, complexity, recursion, floating-point comparison, and type conversion, plus 2 general correctness checks for out-of-bounds access and unused variables.
It also performs declaration analysis for derived types and intraprocedural control-flow analysis to find unreachable code.
See the Detectors overview for the full list.
Output
iec-checker emits warnings in either human-readable plain text or JSON for tool integration. It can also dump the parsed IR as JSON via --dump, which Python plugins can consume.