From the first byte: the ForgeIEC story

Betrifft: ForgeIEC Studio anvild bellowsd tongs-*

2018: The beginning β€” OpenPLC

The first commit in this repository is dated 14 June 2018. Back then the project is not called ForgeIEC but OpenPLC v3 beta 1 β€” an open PLC runtime by Thiago Alves, written in C/C++ with a web-based configuration UI in Python/Flask.

OpenPLC offers a clear value: you can run IEC 61131-3 code (Structured Text + the four other languages) on regular Linux hardware, without a commercial editor licence, without vendor lock-in. That was revolutionary. Modbus master, GPIO, Raspberry Pi support β€” all there.

What OpenPLC does not have: a serious editor. The web UI is fine for small projects, but at industrial complexity it falls behind.


2019–2024: The latency years

Between 2019 and early 2025 not much happens: small bug fixes (Modbus buffer overflow, libmodbus fork, web-server tweaks), but no big leap. That is the reality of open-source projects β€” as long as nobody invests, it stagnates.

In those years we learn: the foundation holds. The matiec compiler toolchain is solid, the IEC code generator works, the runtime runs reliably on x86 + ARM. What is missing is everything around it β€” editor, bus system, diagnostic tools, manufacturer-data integration.


2026-03-01: The big rebuild begins

With commit 82780f7 on 1 March 2026 the next step arrives: a standalone C++/Qt6 editor is introduced into the repository. Native desktop application, no browser, no Python/Flask in the UI path anymore.

Same day, the next chunk: gRPC client in the editor, plus the backend is renamed to forgeiecd (commit 93ed9c9). The old HTTP web server gives way to a modern gRPC pipeline with streaming + protocol versioning.

The next days move fast:

  • 3 March β€” bus system, model/view refactor, F-prefix renames (commit dd85396)
  • 4 March β€” EtherCAT + Profibus bridges, CMake migration
  • 5 March β€” Hugo website added as submodule
  • 6 March β€” DEL β†’ Anvil: the shared-memory IPC subsystem gets its industrial name (commit 3fc636c)
  • 7 March β€” Forge Studio branding, bridge family renamed anvil-*, dirty-bit management, BusModel MVC

In one week a web-UI toolbox turns into a standalone desktop editor with modern architecture.


March–April 2026: the architecture consolidates

Several weeks of deep refactor work follow:

  • Debian packages + CPack (26 March) β€” no more manual install script
  • Multi-task scheduler (11 April) β€” IEC tasks now really run in parallel, pthread-based
  • Bus-panel merge (13 April) β€” separated views on the same model unified
  • -1416 LOC refactor (16 April) β€” FBusDeviceDialog removed, bus columns consolidated
  • FVariableBase + FLocatedVariable β†’ FVariable (26 April) β€” the central variable type is unified

Here happens what you as a user don’t see: the data model is rebuilt to carry real industrial complexity. FAddressPool as single source of truth, pool variables as the only container, old POU varlists only as mirrors.

This is the foundation that lets the AI layer operate reliably later β€” it sees a consistent model, not a collection of legacy data structures.


May 2026: security + AI

With the data model stable, the big-ticket sprints can land:

  • 2 May β€” per-variable safety flags (cluster A): force, monitor, HMI export gated individually per variable. Later this becomes the 3-layer security architecture.
  • 8 May β€” MCP platform: spec written, sprint MCP-1 (prompts in QSettings).
  • 9 May β€” live diagnostic pipeline β€” FB-member resolution, FLiveValueStore lifecycle fix.
  • 10 May β€” headless mode + devloop CLI β€” for CI/build servers. codegen.deploy becomes scriptable.
  • 11 May β€” MCP-3.6: chat tab becomes internal MCP client.
  • 12 May β€” MCP-4a + 4b phases A–D: remote bind, bearer auth, trust store, mTLS, Caretaker model.

That completes the technical leap: ForgeIEC is no longer just an open IEC 61131-3 editor but a platform of its own with federation, AI integration and verifiable security layers.


Today, 13 May 2026: where we stand

The platform is split into subsystems, each with its own spec in the documentation/architecture/ directory:

SubsystemSpecRole
ForgeIEC Studiomcp-platform-v1.mdIDE β€” editor + AI assistant + MCP server
anvildanvil-platform-v2.mdPLC runtime + plug-in platform + online change
Anvil (IPC)(in anvil-platform-v2 Β§13)Zero-copy shared memory between subsystems
tongs- (bridges)*tongs-platform-v1.mdFieldbus plug-ins with fault model + FDD diag bits
Bus systembus-system-v1.mdSegments/devices/IEC access
Editor data modeleditor-data-v1.mdFAddressPool SSoT + .forge format
Codegencodegen-v1.mdC output + matiec interop

All specs RFC 2119 normative. Code + spec move together β€” every change passes through the same review process.


What ForgeIEC does differently

OthersForgeIEC
Proprietary PLC IDEsFully open source (AGPL-3.0)
Vendor lock-in for devicesManufacturer FDDs as first-class citizens
AI only as a code-completion plug-inAI as an equal MCP client with audit log
Force settings without protection layer4-layer defence per variable
Monolithic runtimeModular bridge family with separate daemons
Closed-source binariesBuild from source reproducible, signed via APT

Where it’s going

On the sprint plan:

  • Caretaker toggle UI in Preferences β€” today still QSettings editing
  • team.revoke_peer fully, team.rotate_cert, team.export_setup β€” last third of MCP-4b phase D
  • Anvil platform v2: online change during a running PLC cycle, plug-in architecture for custom boundary types
  • Codegen v1 β†’ v2: migration of C code generation to Rust+LLVM (rusty backend) β€” determinism guarantees + online- change preparation
  • Hearth β€” the next subsystem block for IIoT subscribers (Mosquitto cloud, time-series DB)
  • Tongs EtherCAT, Tongs Profibus, Tongs EtherNet/IP fully implemented

The common thread: an open, honest platform that can handle industrial reality β€” no marketing varnish, but load-bearing architecture decisions that live in the spec and are verifiable in the source.


Read on