# 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:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [July 26, 2024, 2:15pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/21 "2024-07-26T14:15:12Z")

</div>

I lead a team of ~30ish software engineers (70 if you include SCADA dev, we do a lot of Software and MES in Ignition) who all develop almost full time in Ignition at this point, and so we need to build at a bit higher scales than most.

A few of the tools we have used to do this are:  
[Git](https://git-scm.com): We version control almost every project we do. There's not really an easier way to share code between developers and make sure we're following our own best practices  
[Github](https://github.com): We manager over 100+ projects and repositories in Github, its the easiest way for us to store and manage code, review pull requests, execute automated pipelines, etc.  
[Github Actions](https://docs.github.com/en/actions): We use Github Actions for automating deployment pipelines, linting, automated testing, packaging up exchange formatted resources, etc.  
[VS Code](https://code.visualstudio.com): Our teams almost 100% of the time have open VS Code and at least 1 Ignition designer, and VS Code is probably open more than the designer overall. For script editing, terminals for git commands or helper scripts, and reviewing changes in JSON files we have essentially turned VS Code into a pseudo-replacement designer for most things scripting.  
[Flint for Ignition](https://marketplace.visualstudio.com/items?itemName=Keith-gamble.ignition-flint): This is a custom developed that I made to allow for better use of VS Code to manage multiple Igntition projects. It does things like add auto-complete for project scripts, visualize them in a more standard format, and can integrate with a few modules we've made for triggering project script updates and designer updates from within VS Code.  
[Tag CICD Module](https://github.com/design-group/ignition-tag-cicd-module): A developer side module we made for enabling better version control for tags by exposing the `system.tag.getConfiguration` and `system.tag.configure` functions through REST apis  
[Project Scan Endpoint Module](https://github.com/design-group/ignition-project-scan-endpoint): A developer side module we made for triggering project scans and designer updates through REST endpoints, so that we can have VS Code trigger a designer update on save instead of waiting for and managing project scans with the native polling  
[Docker](https://www.docker.com): We are _deep_ in Docker at this point. Engineers that need to run 5-10 gateways on just one project, that may be working on multiple projects at a time need a really scalable way to manage Ignition gateways (quick math, 30 engineers \* 3 projects \* 5-10 gateways per projects and we're looking at managing ~300-600 ignition gateways _all at one time... **per day** _. This is just untenable without something like docker)  
[Developer Docker Image](https://github.com/design-group/ignition-docker): We have a developer docker image that we use for doing some fancy things with symlinks to make it easier to version control code across multiple gateways, without needing to have really annoying `.gitignore` files.  
[Docker Architecture Templates](https://github.com/design-group/ignition-postgres-architecture-template): We use repository templates extensively for starting up new projects. We have much more advanced versions of this internally, I want to make these public, but haven't gotten a chance to yet.  
[Traefik Proxy Container](https://github.com/design-group/traefik-proxy): We actually leverage an internal traefik container that pre-loads in some certs so that our devs can use SSL without needing to get custom certs for `*.localtest.me`, however this is a public one we did a while back.  
[Figma for Design](https://www.figma.com): We use Figma for all of our UI/UX Design  
[Tailwind CSS](https://tailwindcss.com): We use Tailwind for most of our CSS at this point, at first it felt like a bit of a stretch because it's complicated. However once you get into it, being able to do things like `md:hidden` and just have things automagically get hidden on larger screens is insanely useful. (This also makes CSS easier when porting from Figma). We also manage an internal container that acts as a tailwind compiler, so that we can only compile what we are using, instead of the full tailwind stylesheet. Unfortunately this ones not public, because it includes some special sauce for custom themes we leverage pretty heavily.  
[Ignition Linter](https://github.com/ia-eknorr/ignition-lint): A linter that can be used in a GitHub action that was developed by a good buddy of mine. Good for starting to enforce clean code practices inside of Ignition itself.  
[Gateway Utilities Project](https://github.com/design-group/ignition-gateway-utilities): We manage a project for a bunch of standard utilities, scripts, views for specific functions. We have some more advanced versions internally I'd like to update to be public, but for now this one is available.  
[Perspective Automation Tools](https://github.com/inductiveautomation/ignition-automation-tools): This is a git repo managed by the IA QA team, we use it for automated tests leveraging selenium for Perspective pages. We used to maintain our own, but then they released theirs and its better!

A few ideas we have not made yet, but want to:

- A Figma plugin that can export Figma frames to Perspective Views
- Updates to Flint (the VS Code extension) to add a bunch more features
- K8s template projects for Ignition

Edit:

> [@paul-griffith](#):
>
> Keith Gamble has a VSCode plugin, Flint, that's exactly geared towards "direct editing of scripts outside of the Designer":  
> [https://forum.inductiveautomation.com/t/flint-a-vscode-extension-to-help-with-ignition/88319?u=pgriffith](https://forum.inductiveautomation.com/t/flint-a-vscode-extension-to-help-with-ignition/88319)

Paul beat me to it on my own thing! I was just in the middle of typing this out. lol

Edit #2: Added some more stuff that I didnt think about. Also realizing I should probably actually get on it about making more of our public stuff updated... lol

---

<div class="post-metadata">

**Author:** ![Steve\_Laubach](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/steve_laubach/32/60900_2.png) [@Steve\_Laubach](https://forum.inductiveautomation.com/u/Steve_Laubach)\
**Post date:** [July 26, 2024, 4:32pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/22 "2024-07-26T16:32:27Z")

</div>

I use Inkscape to build my SVGs.

OBS for making demo videos.

jcpicker for color matching

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [July 26, 2024, 4:52pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/23 "2024-07-26T16:52:46Z")

</div>

I use PngOptimizer for shrinking images to be lighter weight.  
[https://psydk.org/pngoptimizer](https://psydk.org/pngoptimizer)

An older free version of ColorPic for color matching.

> **[ColorPic](https://www.majorgeeks.com/files/details/colorpic.html)**
>
> ColorPic can capture and save up to 16 colors from anywhere on your screen and provide the HEX and RGB values.

ShareX for Screenshots (has color picker and other tools too, but mainly use it for screenshots)

> **[ShareX - The best free and open source screenshot tool for Windows](https://getsharex.com)**
>
> ShareX is a free and open source program that lets you capture or record any area of your screen and share it with a single press of a key. It also allows uploading images, text or other types of files to many supported destinations you can choose...

Baretail for live log watching/highlighting on Windows.  
[https://www.baremetalsoft.com/baretail/index.php](https://www.baremetalsoft.com/baretail/index.php)

Notepad++ for various text editing or as a temporary "clipboard" to hold multiple things.

MQTT Explorer (Beta 0.4.0 Beta 4 supports Sparkplug) and MQTT.fx v1.7.1 (last free version that supported Sparkplug)

> **[MQTT Explorer](https://mqtt-explorer.com)**
>
> An all-round MQTT client that provides a structured topic overview

[https://mqtt.iot01.com/apps/mqttfx/1.7.1/](https://mqtt.iot01.com/apps/mqttfx/1.7.1/)

---

<div class="post-metadata">

**Author:** ![wpmccormick](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/wpmccormick/32/13940_2.png) [@wpmccormick](https://forum.inductiveautomation.com/u/wpmccormick)\
**Post date:** [July 26, 2024, 5:20pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/24 "2024-07-26T17:20:26Z")

</div>

checkout [https://www.passwordstore.org/](https://www.passwordstore.org/)

---

<div class="post-metadata">

**Author:** ![tyler.bennett](https://avatars.discourse-cdn.com/v4/letter/t/f04885/32.png) [@tyler.bennett](https://forum.inductiveautomation.com/u/tyler.bennett)\
**Post date:** [July 26, 2024, 5:50pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/25 "2024-07-26T17:50:31Z")

</div>

> [@michael.flagler](#):
>
> ShareX for Screenshots (has color picker and other tools too, but mainly use it for screenshots)

I've been using [Greenshot](https://getgreenshot.org/) for screenshots, I'm interested to compare against [ShareX](https://getsharex.com/).

I have also used [ninite.com](https://ninite.com/) as a sort of curated source for discovery of free software options and as a means to install them without the added cruft some free software tries to impose.

More recently, I have started using [winget](https://learn.microsoft.com/en-us/windows/package-manager/winget/) for easy command line download, install, and updates of MS Windows software I am already familiar with.

---

<div class="post-metadata">

**Author:** ![michael.flagler](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/michael.flagler/32/26272_2.png) [@michael.flagler](https://forum.inductiveautomation.com/u/michael.flagler)\
**Post date:** [July 26, 2024, 5:57pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/26 "2024-07-26T17:57:50Z")

</div>

I used to use Greenshot until I found ShareX LOL One of the cool features you can do is set up work flows like when you take a screenshot, save it to a folder, upload it to some cloud, get the link for the cloud and copy that URL to your clipboard.

You might want to check out Chocolately. Has lots of software packages and you can install the Chocolatey GUI if you want a pretty interface and easier searching for packages.

> **[Community](https://community.chocolatey.org)**
>
> Chocolatey is software management automation for Windows that wraps installers, executables, zips, and scripts into compiled packages. Chocolatey integrates w/SCCM, Puppet, Chef, etc. Chocolatey is trusted by businesses to manage software...

I also use LiberKey instead of PortableApps, but have used both before:

> **[LiberKey - Portable Applications](https://www.liberkey.com/en/)**
>
> Portable Applications

> **[PortableApps.com - Portable software for USB, portable, and cloud drives](https://portableapps.com)**

---

<div class="post-metadata">

**Author:** ![wpmccormick](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/wpmccormick/32/13940_2.png) [@wpmccormick](https://forum.inductiveautomation.com/u/wpmccormick)\
**Post date:** [July 26, 2024, 7:01pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/27 "2024-07-26T19:01:28Z")

</div>

... and for us Linux guys stuck in a Windows world, this thread can only be complete by mentioning WSL.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [July 26, 2024, 8:55pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/28 "2024-07-26T20:55:44Z")

</div>

> [@wpmccormick](#):
>
> checkout

Did you not see **cross platform** in the list of reasons to use KeePassXC? A password manager that my family cannot use in Windows is not going to be acceptable, sad as that may be. And I **like** that it is a single encrypted file.

---

<div class="post-metadata">

**Author:** ![wpmccormick](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/wpmccormick/32/13940_2.png) [@wpmccormick](https://forum.inductiveautomation.com/u/wpmccormick)\
**Post date:** [July 26, 2024, 9:02pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/29 "2024-07-26T21:02:06Z")

</div>

no I missed that. it's a fair point. I'm an ex-keypass lover, and it's super impressive to have a family keypass.

---

<div class="post-metadata">

**Author:** ![msteele](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/msteele/32/77889_2.png) [@msteele](https://forum.inductiveautomation.com/u/msteele)\
**Post date:** [July 26, 2024, 9:09pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/30 "2024-07-26T21:09:31Z")

</div>

Since this topic is broadening, one of my favorites is PowerToys including the PowerToyes Run launcher, FancyZones, PowerRename, and more. [Releases · microsoft/PowerToys · GitHub](https://github.com/microsoft/PowerToys/releases)

---

<div class="post-metadata">

**Author:** ![tyler.bennett](https://avatars.discourse-cdn.com/v4/letter/t/f04885/32.png) [@tyler.bennett](https://forum.inductiveautomation.com/u/tyler.bennett)\
**Post date:** [July 26, 2024, 9:50pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/31 "2024-07-26T21:50:46Z")

</div>

> [@msteele](#):
>
> Since this topic is broadening

The intent was for discovery of "quality of life" improvements related to Ignition development. I've used Power Toys "Fancy Zones" for when I have designers for six Ignition gateways open at the same time and I'm copying things between them, so it counts!

In unrelated knowledge sharing...

- For those those who did not know it is easy to copy and paste views, udts, tags , etc. between open designer sessions so long as each gateway is running the same version of Ignition. If differing versions then export from one and import to the others.

- Also, there no visual clue for this (no right-click menu) but you can also CTRL+C copy a selected alarm configuration from one tag and paste CTRL+V it into another tag. Individual alarms or multiple alarms at once.

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [March 27, 2025, 4:23pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/32 "2025-03-27T16:23:59Z")

</div>

This is insane @kgamble! I don't understand yet how you just code in vs-code without braking the designer project. What is the secret here? 😄

Also, when making changes in vscode, it takes quite a while until I see those changes in the designer. How do you handle that?

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [March 27, 2025, 4:26pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/33 "2025-03-27T16:26:26Z")

</div>

> [@louagejasper](#):
>
> This is insane @kgamble! I don't understand yet how you just code in vs-code without braking the designer project. What is the secret here? 😄

Just wait until we end up building a new designer in VS Code with 8.3 😉

> [@louagejasper](#):
>
> Also, when making changes in vscode, it takes quite a while until I see those changes in the designer. How do you handle that?

If you use the combination of our [VS Code Extension](https://marketplace.visualstudio.com/items?itemName=Keith-gamble.ignition-flint) and our [Project Scan Endpoint Module](https://github.com/design-group/ignition-project-scan-endpoint) it can auto-trigger the scan when you save project script files.

---

<div class="post-metadata">

**Author:** ![louagejasper](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/louagejasper/32/86311_2.png) [@louagejasper](https://forum.inductiveautomation.com/u/louagejasper)\
**Post date:** [March 27, 2025, 4:27pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/34 "2025-03-27T16:27:42Z")

</div>

> [@kgamble](#):
>
> Just wait until we end up building a new designer in VS Code with 8.3 😉

Can't wait!

> [@kgamble](#):
>
> A Figma plugin that can export Figma frames to Perspective Views

If you pulled this one of, that would be insane!

No plans for an Ignition ORM-support support based on domain classes?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [March 27, 2025, 4:43pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/35 "2025-03-27T16:43:04Z")

</div>

> [@kgamble](#):
>
> Just wait until we end up building a new designer in VS Code with 8.3

Man, I keep thinking about how a VS Code plugin could work, lots of cool possibilities.

That we're stuck with Jython 2.7 and VS Code only supports Python 3.x seriously kills my enthusiasm though.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [March 27, 2025, 5:56pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/36 "2025-03-27T17:56:34Z")

</div>

don't suppose there's any chance of an 8.4 with python 3? :)))

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [March 27, 2025, 5:58pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/37 "2025-03-27T17:58:57Z")

</div>

> [@Leor\_Fishman](#):
>
> with python 3?

That's just trolling. Jython 3 doesn't exist and CPython doesn't and likely won't ever play nice with Java.

---

<div class="post-metadata">

**Author:** ![Leor\_Fishman](https://avatars.discourse-cdn.com/v4/letter/l/e19adc/32.png) [@Leor\_Fishman](https://forum.inductiveautomation.com/u/Leor_Fishman)\
**Post date:** [March 27, 2025, 6:00pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/38 "2025-03-27T18:00:23Z")

</div>

Oh, are there just no FFIs for java in py3? I know it would require a separate scripting engine and IPC to make work...

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [March 27, 2025, 6:12pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/39 "2025-03-27T18:12:24Z")

</div>

Nope.

And part of the reason there's little pressure/funding/whatever for Jython3 is that Jython already has functionality available for the critical features gained in the Python2 =\> Python3 change:

- Internationalization: Jython strings are already support unicode, as they just wrap Java `String`. Jython already has a distinct and efficient byte array type from Java. The java standard library can be used instead of the python stdlib to gain the distinction between byte streams and character streams that simply isn't possible in CPython2.

- Async and/or coroutines to work around the CPython GIL: Java already has classes for async operations (`CompletableFuture` in particular) and Jython has no GIL. All of the foundation classes of Jython are implemented with thread-safe Java Concurrent or synchronized classes. In other words, Jython is already fully multi-threaded. It just doesn't have the `async` & `await` keywords.

- Modern type annotations: in Python3 they are handy for developers, but aren't enforced at runtime. Unlike the type safety in Java's standard library.

Consider offering help to Jeff Allen via [python.org](http://python.org) if you want to contribute to Jython3.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [March 27, 2025, 7:07pm UTC](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759/40 "2025-03-27T19:07:39Z")

</div>

There are some interesting Jython alternatives:

- [GitHub - oracle/graalpython: GraalPy – A high-performance embeddable Python 3 runtime for Java](https://github.com/oracle/graalpython)
- [GitHub - ninia/jep: Embed Python in Java](https://github.com/ninia/jep)
- [https://www.py4j.org/](https://www.py4j.org/) (less sure about this one)

But they're all dead ends in terms of an upgrade path / backwards compatibility.

It's a pretty hopeless situation. I still think our best bet is offering some kind of path to choosing which scripting engine you start new projects with or something, and offering new scripting engine choices. I don't know.

[Previous page](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759.md?page=1)

[Next page](https://forum.inductiveautomation.com/t/what-external-tools-do-you-use-for-ignition-development-and-why/93759.md?page=3)
