# Ignition SDK Purpose

**URL:** <https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632>\
**Category:** Module Development\
**Tags:** sdk\
**Created:** [December 30, 2023, 3:21pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632 "2023-12-30T15:21:07Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![jacob.ramirez](https://avatars.discourse-cdn.com/v4/letter/j/9dc877/32.png) [@jacob.ramirez](https://forum.inductiveautomation.com/u/jacob.ramirez)\
**Post date:** [December 30, 2023, 3:21pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/1 "2023-12-30T15:21:07Z")

</div>

Can people share what you would build using the SDK that you can't build with the tools already provided by the Ignition platform?

I see the new guide and inductive university course on this (haven't gone through but will) so I'm curious of why there is such a need for this.

I haven't came across a situation where I've needed a custom module yet.

---

<div class="post-metadata">

**Author:** ![Transistor](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/transistor/32/3380_2.png) [@Transistor](https://forum.inductiveautomation.com/u/Transistor)\
**Post date:** [December 30, 2023, 3:24pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/2 "2023-12-30T15:24:58Z")

</div>

I haven't done or used any SDKs but you could explore the forum to see what's going on. Clicking the **All tags** link on the left sidebar and select [**sdk**](https://forum.inductiveautomation.com/tag/sdk) and you'll get a load of reading.

---

<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:** [December 30, 2023, 3:42pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/3 "2023-12-30T15:42:27Z")

</div>

It's not for most users, but some things that are possible:

- custom scripting functions
- custom expression functions
- vision and perspective components
- drivers for the OPC UA server

Java development experience, or being willing and able to gain it, is a pre-requisite that excludes most.

---

<div class="post-metadata">

**Author:** ![Matrix\_Engineering](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/matrix_engineering/32/19781_2.png) [@Matrix\_Engineering](https://forum.inductiveautomation.com/u/Matrix_Engineering)\
**Post date:** [December 30, 2023, 3:43pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/4 "2023-12-30T15:43:28Z")

</div>

One example:

> [@VNC Connection from Perspective page](https://forum.inductiveautomation.com/t/vnc-connection-from-perspective-page/34969):
>
> Hi, I’m on a project looking to consolidate all of the different operations into one portal: an Ignition Perspective page. One of the absolute requirements is they need to VNC to site computer running specialized software. Anyone know of where to start for building out an embedded VNC client? I dont think this option exists for perspective, I’m thinking of hosting a react page that handles this function, that they can reach with a link in the Perspective app. Of course any perspective authenti…

Another example:

> [@Where do/should Gateway Scripts live with respect to an inherited project structure?](https://forum.inductiveautomation.com/t/where-do-should-gateway-scripts-live-with-respect-to-an-inherited-project-structure/83460/15):
>
> That just means there should be function in your "universe" project that does this work, and your message handlers in your leaf nodes would be just one-liners. man_shrugging Write a module. Modules can declare any desired RPC they like.

The IA driver modules, e.g. for Ethernet/IP, will not use any reverse engineering to get advanced functions. Users like @pturmel are happy to reverse engineer to offer advanced functionality.

---

<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:** [December 30, 2023, 4:07pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/5 "2023-12-30T16:07:11Z")

</div>

A 3rd-party module written in Java or Kotlin is also the only way to offer any sort of protection for intellectual property.

---

<div class="post-metadata">

**Author:** ![jacob.ramirez](https://avatars.discourse-cdn.com/v4/letter/j/9dc877/32.png) [@jacob.ramirez](https://forum.inductiveautomation.com/u/jacob.ramirez)\
**Post date:** [January 2, 2024, 4:49pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/6 "2024-01-02T16:49:34Z")

</div>

@Kevin.Herron Thank you for the suggestions. In my case, I don't use any drivers for OPC, all MQTT here. You can create custom functions just using the built-in Jython correct? No need for a module?

@pturmel That makes sense about the intellectual property. I guess building a module hides any code from anyone being able to view it when they have the .modl file.

---

<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:** [January 2, 2024, 5:50pm UTC](https://forum.inductiveautomation.com/t/ignition-sdk-purpose/83632/7 "2024-01-02T17:50:35Z")

</div>

You can create arbitrary user-defined functions in the project library, and they'll be available anywhere in the project inheritance chain starting from that project.

You can create arbitrary _`system.*`_ scripting functions, available **globally** , via the module SDK.
