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

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: 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: 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: We use Github Actions for automating deployment pipelines, linting, automated testing, packaging up exchange formatted resources, etc.
VS Code: 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: 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: 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: 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: 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: 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: 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: 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: We use Figma for all of our UI/UX Design
Tailwind CSS: 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: 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: 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: 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 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

33 Likes

I use Inkscape to build my SVGs.

OBS for making demo videos.

jcpicker for color matching

3 Likes

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

An older free version of ColorPic for color matching.

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

Baretail for live log watching/highlighting on Windows.
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)

https://mqtt.iot01.com/apps/mqttfx/1.7.1/

2 Likes

checkout https://www.passwordstore.org/

I've been using Greenshot for screenshots, I'm interested to compare against ShareX.

I have also used 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 for easy command line download, install, and updates of MS Windows software I am already familiar with.

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.

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

3 Likes

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

5 Likes

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.

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.

Since this topic is broadening, one of my favorites is PowerToys including the PowerToyes Run launcher, FancyZones, PowerRename, and more. Releases ยท microsoft/PowerToys ยท GitHub

1 Like

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.

4 Likes

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? :smile:

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

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

If you use the combination of our VS Code Extension and our Project Scan Endpoint Module it can auto-trigger the scan when you save project script files.

2 Likes

Can't wait!

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

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

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.

don't suppose there's any chance of an 8.4 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.

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

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 if you want to contribute to Jython3.

1 Like

There are some interesting Jython alternatives:

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.