# What external tools do you use for Ignition development, and why?

**URL:** <https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759>\
**Category:** Ignition\
**Created:** [July 25, 2024, 5:07pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759 "2024-07-25T17:07:22Z")\
**Posts on this page:** 1\
**Showing post:** 69

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [April 30, 2025, 8:30pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/69 "2025-04-30T20:30:59Z")

</div>

From `import system` many people end up with `import MyProjectLibraryScript`, which _does_ cause problems \[1\] \[2\].

It's also unnecessary and can lead to "cargo culting", where people just assume they have to `import system` for system functions to work, which is not true anywhere \[3\].

* * *

1. 

> [@\[IGN-6503\]Project Library Script Initialization Races](https://forum.inductiveautomation.com/t/ign-6503-project-library-script-initialization-races/98636):
>
> Are you annoyed by pseudo-random breakage in Ignition project library scripting? Odd top-level constants being garbled, or operations in the top level that have side effects running twice? Or more? Not happening much, but always around project edits, and sometimes even on gateway restart? Yeah, me too. frowning_face Poking around under the hood back in the spring, for a module development task, I ran across some problematic IA bytecode and pinged some people. But it went nowhere, as I co…

2. 

> [@\[IGN-4437\] Ignition occasionally forgets how Python works?](https://forum.inductiveautomation.com/t/ign-4437-ignition-occasionally-forgets-how-python-works/69635/21):
>
> If you cannot do my option 4, consider this option 5, superior to option 3: c = Constants system.db.runNamedQuery(c.GET\_PATH, {c.XYZ\_ID\_COLUMN\_NAME:variable}) The fundamental issue is that Ignition is extremely multi-threaded, including for the jython interpreters. Note the "s" on interpreters. Some multi-threading issues that cannot occur in CPython, due to its single interpreter lifetime, absolutely can occur with jython in Ignition. A piece of your code that triggers the lookup of Constan…

3. except in gateway scoped event scripts, until 8.3.0 is released

---

_[View the full topic](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759)._
