Hello everyone,
I have been exploring a simple question:
Can an Ignition project be provisioned more like a repeatable software system and less like a manually assembled SCADA project?
In short, I am trying to automate the building process itself, not just build another SCADA project (Platform as runtime).
After following recent discussions around large-scale tag provisioning, version control limitations, and DevOps workflows in Ignition,
I tried a different approach: treating the system as declarative state driven by a single definition.
Over the last few months, I built an experimental (controlled deterministic lab) provisioning layer for Ignition called PHX IIoT.
This is a single-developer concept validation, and the goal has been to treat Ignition as a runtime platform for declarative orchestration.
I wanted to push that maturity logic one step further:
"It works -> It can be governed" -> "It can be rebuilt from definition"
From a single ISA-95-aligned CSV model, the current PoC generates:
Tags and UDT instances
Historian mapping and database schema
Runtime UI structure in Perspective
Core idea:
The system is not the truth. The definition is.
Currently validating practical limits under real-world conditions.
In the current PoC, I can provision a live runtime from zero with roughly 30,000 tags in about 30 seconds in my test environment.
What matters most to me is not only bulk generation, but determinism and repeatability:
same input -> same generated system -> every time
I have also been stress-testing the approach with controlled teardown / rebuild cycles and larger tag bursts to understand where the platform holds up and where instability begins.
Demo video:
Current environment:
Ignition 8.3.2
Apple M1 Pro
2 GB JVM
Observed so far:
Deterministic rebuilds are working reliably in the current PoC.
Observed performance:
- Peak throughput: ~2,700 tags/sec
- ~1k tags -> 18.6 sec.
- ~10k tags -> 24.5 sec.
- ~30k+ tags -> 28.7 sec. (stability limits become visible after a few hours of runtime)
- ~100k+ tags -> ... (stability limits become visible during deployment)
At roughly 35k tags, memory pressure and GC become visible and stability starts degrading.
My current takeaway is that this kind of approach is most useful for template-heavy rollouts, standardized greenfield builds, and controlled brownfield rebuild scenarios.
This is not a finished SCADA product.
It is a provisioning/runtime foundation experiment.
I would really value feedback from experienced Ignition users on a few points:
-
Does a declarative, repeatable provisioning model make practical sense for real Ignition projects? If you have seen similar model-driven rollout patterns, where do you think the biggest risks are?
-
During teardown / rebuild cycles, I sometimes see leftover tables or historian artifacts after a database wipe. Is there a reliable way to know when it is actually safe to begin a new deployment? I am also researching historian continuity parameters like UUID specially for disaster recovery situation.
Notes on context:
I pivoted into industrial software only a few months ago, so while I am pushing this hard from a software and systems perspective, I may still be missing some field-specific blind spots. That is part of why I am posting here.
The goal is not control, write-back, or critical alarming, but safe onboarding of live field data into the model, followed by a limited reporting window to test whether the architecture remains useful outside a digital setup.
My next steps after ensuring the final core (inc. hot-patching, fully decoupled architecture and safe historian continuity) are:
- Validate the core in a real read-only shadow pilot
- Improve communication and mapping layers
- Build a limited public playground for teardown/rebuild testing
I am still exploring the best path forward, so any feedback on ordering the roadmap would be incredibly helpful too.
I am intentionally pushing beyond typical usage patterns to understand the platform, not to claim completeness or readiness.
My goal is to make this layer safe and robust. So, brutal engineering feedback is very welcome.
If you see where this breaks, I would genuinely like to know. If you break it, we are in this together.
P.S. My name literally translates to 'Fire'. So I guess, ending up with Ignition was inevitable for me.