An open-source toolchain and runtime for IEC 61131-3, written in safe Rust.
IronPLC is a compiler (ironplcc), runtime (ironplcvm), VS Code extension,
browser playground, and MCP server for writing and running IEC 61131-3
programs on off-the-shelf hardware — no proprietary IDE required.
Install on Linux or macOS:
curl -fsSL https://www.ironplc.com/install.sh | shOr see the installation docs for Windows, Homebrew, and other options — or try it in the browser at playground.ironplc.com.
Then follow the quick start tutorial to write your first PLC program.
- Compiler — parses and analyzes IEC 61131-3 Structured Text with a large and growing set of diagnostic checks
- Runtime — executes compiled bytecode with task scheduling
- VS Code extension — syntax highlighting, real-time diagnostics, build tasks, and a bytecode viewer
- Multiple source formats —
Structured Text (
.st,.iec), PLCopen XML (.xml), and TwinCAT (.TcPOU,.TcGVL,.TcDUT) - AI agent support — an MCP server that lets tools like Claude call the IronPLC compiler
- Interactive playground — try IronPLC in the browser with no install
compiler/— Rust workspace (compiler, runtime, MCP server, playground WASM)integrations/vscode/— VS Code extensiondocs/— Sphinx documentation site (ironplc.com)playground/— browser playground
Contributions are very welcome. See CONTRIBUTING.md for details.
Create an issue to reach out about IronPLC.
- RuSTy - Structured text compiler written in Rust. RuSTy is further along but the LGPL and GPL licenses are difficult for industrial uses.
- Structured Text language Support - Structured text language support for Visual Studio Code.
- Beremiz - A Python-based PLC programming environment.
- RoboPLC - A Rust framework for creating industrial control appliances
- msr - A Rust library for industrial automation.
- ethercat-rs - An experimental Rust automation toolbox using the IgH (Etherlab) EtherCAT master.
- rustmatic - Rustmatic is a thought experiment on creating a PLC-like environment in Rust.
IronPLC is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by any third party. TwinCAT is a trademark of Beckhoff Automation GmbH & Co. KG. CODESYS is a trademark of CODESYS GmbH. Beremiz is a trademark of its respective owner. PLCopen is a trademark of PLCopen. EtherCAT is a registered trademark of Beckhoff Automation. All other trademarks are the property of their respective owners. References to these names in IronPLC and its documentation are descriptive (nominative) only — they identify file formats, compatibility modes, and related projects, and do not imply endorsement.
