# Programmatically Update Third-Party Modules

**URL:** <https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408>\
**Category:** Module Development\
**Created:** [March 29, 2025, 3:28am UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408 "2025-03-29T03:28:45Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 29, 2025, 3:28am UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/1 "2025-03-29T03:28:46Z")

</div>

I am trying to do exactly what the title suggests. I was reading elsewhere in the forum about using a docker image (kcollins?) to customize your gateway installation, but I simply want to update an existing third-party module. I do a lot of module development, and this would significantly boost development and testing speed. I don't cherish manually re-installing and restarting the designer every single time.

---

<div class="post-metadata">

**Author:** ![YF129701](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/yf129701/32/60498_2.png) [@YF129701](https://forum.inductiveautomation.com/u/YF129701)\
**Post date:** [March 31, 2025, 5:36pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/2 "2025-03-31T17:36:46Z")

</div>

I get this concern and ran into it myself, but I don't know how feasible this is to do. Perhaps, you can get something close to what you want with Docker containers.

However, I'm almost certain this won't work in 8.3 because module hot reloading is going away, so you'll need to do a gateway restart every time you install / uninstall a module - much more intrusive than a designer restart.

---

<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 31, 2025, 5:38pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/3 "2025-03-31T17:38:54Z")

</div>

> [@Porter\_Ellis](#):
>
> re-installing

What now? Restarting, yes, but re-installing?

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 5:52pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/4 "2025-03-31T17:52:51Z")

</div>

I misspoke. I meant to say re-installing/hot updating the module, not the entire Designer. @YF129701 Our customers almost exclusively use 8.1 and below, so I do all my module development for those versions. When 8.3 is stable, I will migrate.

---

<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 31, 2025, 6:15pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/5 "2025-03-31T18:15:47Z")

</div>

The designer restart only occurs if the module includes jars for Client and/or Designer scope. There is no other way for the designer's common classloader to get the new jars, so you will have to just deal with it.

Yes, it is really annoying if you forget to save something in the designer just before you update the module.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 6:39pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/6 "2025-03-31T18:39:28Z")

</div>

Is there a way to programmatically load the new modl file onto the gateway? I recognize that the designer needs to be restarted no matter what. Perhaps I can add the file loading step to the batch script that builds and signs my modl file already?

---

<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 31, 2025, 6:43pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/7 "2025-03-31T18:43:35Z")

</div>

The old `ant`-based build process supported automated deployment via an endpoint in the gateway. I never used it, and don't know if it was implemented in the maven or gradle processes. Someone from IA would have to comment.

You can simply replace the `.modl` file in the `user-libs` folder and restart the gateway--that works as long as the EULA and signing certificate are unchanged.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [March 31, 2025, 6:48pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/8 "2025-03-31T18:48:20Z")

</div>

> [@pturmel](#):
>
> gradle

Yes, the [Ignition Module Gradle plugin](https://github.com/inductiveautomation/ignition-module-tools/tree/master/gradle-module-plugin) adds a `deployModl` task that does exactly this.

You do need the enable the module loading servlet using following parameter in your `ignition.conf` file:

```python
-Dia.developer.moduleupload=true

```

---

<div class="post-metadata">

**Author:** ![YF129701](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/yf129701/32/60498_2.png) [@YF129701](https://forum.inductiveautomation.com/u/YF129701)\
**Post date:** [March 31, 2025, 6:54pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/9 "2025-03-31T18:54:19Z")

</div>

Huh, this is cool, I haven't noticed this task before...

Does that get around the OPs issue though, meaning that when you deploy the module, you don't need to do either a gateway restart as Phil was suggesting above or a designer restart, or are you referring to something else?

---

<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 31, 2025, 6:55pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/10 "2025-03-31T18:55:56Z")

</div>

The ignition-maven-plugin can also hook into the install phase to upload the module.

---

<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 31, 2025, 6:56pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/11 "2025-03-31T18:56:19Z")

</div>

> [@YF129701](#):
>
> Does that get around the OPs issue though, meaning that when you deploy the module, you don't need to do either a gateway restart as Phil was suggesting above or a designer restart, or are you referring to something else?

No, just a convenience to build and install the module in one step, rather than manually installing it on the Gateway webpage.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 7:07pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/12 "2025-03-31T19:07:13Z")

</div>

This is exactly what I am looking for, as I use maven religiously. I will look into it. Any suggestions/docs on implementation of the plugin? Thank you all for your prompt responses.

---

<div class="post-metadata">

**Author:** ![bmusson](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bmusson/32/87530_2.png) [@bmusson](https://forum.inductiveautomation.com/u/bmusson)\
**Post date:** [March 31, 2025, 7:08pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/13 "2025-03-31T19:08:15Z")

</div>

> [@YF129701](#):
>
> designer restart, or are you referring to something else?

I wasn't paying that much attention to what the OP was asking 😆 You still definitely need to restart the designer.

Ask @kgamble, I know he's done some work related to live-reloading the designer.

---

<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 31, 2025, 7:09pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/14 "2025-03-31T19:09:42Z")

</div>

If you launch the Designer in debug mode out of a real IDE, i.e. IntelliJ and not VSCode, you might have the option to do hot code reloading... maybe.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 7:10pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/15 "2025-03-31T19:10:38Z")

</div>

How do you mean launch the designer out of the IDE? I have never heard of this approach.

---

<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 31, 2025, 7:11pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/16 "2025-03-31T19:11:09Z")

</div>

If you dig through old SDK docs there's some mention of it... to be honest I don't know if it's still supported or possible given the set of public/published artifacts.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 7:12pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/17 "2025-03-31T19:12:43Z")

</div>

By old SDK docs, are you still referring to the SDK programmers guide? Or something more esoteric?

---

<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 31, 2025, 7:15pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/18 "2025-03-31T19:15:33Z")

</div>

Yeah, but I can't even find a link to it any more. All I can find is the current guide at [https://www.sdk-docs.inductiveautomation.com/](https://www.sdk-docs.inductiveautomation.com/) 😕

---

<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 31, 2025, 7:19pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/19 "2025-03-31T19:19:09Z")

</div>

> [@bmusson](#):
>
> Ask @kgamble, I know he's done some work related to live-reloading the designer.

I have primarily done work around hot-reloading Perspective component contents and reloading the full JXBrowser automatically with the deploy step. However I am not doing a full hot-reload of the actual java classes being initialized.

---

<div class="post-metadata">

**Author:** ![Porter\_Ellis](https://avatars.discourse-cdn.com/v4/letter/p/ed8c4c/32.png) [@Porter\_Ellis](https://forum.inductiveautomation.com/u/Porter_Ellis)\
**Post date:** [March 31, 2025, 7:19pm UTC](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408/20 "2025-03-31T19:19:26Z")

</div>

looks like the 'post' goal of the maven plugin is what I need. I will attempt and report back.

[Next page](https://forum.inductiveautomation.com/t/programmatically-update-third-party-modules/104408.md?page=2)
