# Perspective Custom Icons

**URL:** <https://forum.inductiveautomation.com/t/perspective-custom-icons/115999>\
**Category:** Ignition\
**Tags:** perspective\
**Created:** [June 16, 2026, 8:01am UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999 "2026-06-16T08:01:44Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![pgmo](https://avatars.discourse-cdn.com/v4/letter/p/d07c76/32.png) [@pgmo](https://forum.inductiveautomation.com/u/pgmo)\
**Post date:** [June 16, 2026, 8:01am UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/1 "2026-06-16T08:01:44Z")

</div>

I'm on a dockerized Ignition 8.3.6. I'm trying to add a custom icons library following help and forum topics, but nothing works: `ignition` and `material` are the only libraries that show up.

If I execute a bash in the docker Ignition container I cannot find the folder

`/usr/local/bin/ignition/data/modules/com.inductiveautomation.perspective/icons/`

as suggested by the help, I find instead

`/usr/local/bin/ignition/data/modules/com.inductiveautomation.perspective/.migrated-icons-20260607-214/icons`

where `material.svg` and `ignition.svg` are stored - note that I restored a 8.1 gateway exactly on 2026-06-07, hence maybe the folder name.

I tried to add a `myicons.svg` file, where I pasted the _ **Custom Icon Repository Example** _ from the help, but `myicons` does not show up for a button icon (designer restarted, gateway restarted, no matter)

I tried to `mkdir` the `icons` folder in the `/usr/local/bin/ignition/data/modules/com.inductiveautomation.perspective` folder and copied there my file, no success.

I double checked user/group/other permissions of the library files: all are set to `ignition`

Any help?

Thanks in advance, regards

---

<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:** [June 16, 2026, 4:28pm UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/2 "2026-06-16T16:28:07Z")

</div>

The location and structure of Perspective asset files changed a bit in the overhaul of the configuration management system we did in 8.3 (so that everything shares the same patterns and can be managed the same way).

The new path is described here - make sure if you're referencing the documentation you're using the correct version of the docs:

> **[Add a Custom Icon Repository​ - Images and Icons in Perspective | Ignition User...](https://www.docs.inductiveautomation.com/docs/8.3/ignition-modules/perspective/working-with-perspective-components/images-and-icons-in-perspective#add-a-custom-icon-repository)**
>
> Perspective supports the import and display of PNG, JPG, JPEG, GIF, and SVG images. Images can be loaded into Perspective using the Image Management tool, dragged and dropped directly into a view, or derived from an external web address. All images...

> [@Custom Icon Library in 8.3](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/2):
>
> Okay, here's the current steps. Navigate to your install directory, and in the /data/config/resources/core/ folder, create a new folder com.inductiveautomation.perspective/ (if it doesn't already exist). Within that folder create an icons/ folder. Within that folder create a \<repository name\>/ folder. Within that folder, create: The spritesheet of your SVG, at whatever arbitrary filename you want, e.g. icons.svg. A config.json file that contains a single entry, svgFileName, that co…

---

<div class="post-metadata">

**Author:** ![nminchin](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/nminchin/32/6911_2.png) [@nminchin](https://forum.inductiveautomation.com/u/nminchin)\
**Post date:** [June 17, 2026, 11:16am UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/3 "2026-06-17T11:16:24Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/7/673cc4cdd1f290ead0f11ed4d6ee72c469df0b90.png)

[Standalone Perspective Icon Library Manager.zip](https://forum.inductiveautomation.com/uploads/short-url/aDKVOdPUMlH1RfIoDghYVDWzLzG.zip) (15.5 KB)

I got Claude to write me a Perspective icon library manager to make icon management simple directly within the Designer; no admin rights or remote server access required! (admin rights provided by the service account that the Ignition service runs under)

- it adds an icon into the Project Browser toolbar to launch it
- you can drag SVGs into the Icons panel on the right
- it uses a gateway message handler (included in the project export) which does the file scan and saving of Icon libraries directly on the gateway.

"Install" the icon in the toolbar using:

```python
dev.tools.standalone.iconLibraryManager.install()

```

If you have Vision installed (including in expired trial mode), you can have it install on Designer launch with a Vision Client expression tag with the expression:

```python
now(0) # fire once on launch

```

Tag Events -\> Value Change:

```python
dev.tools.standalone.iconLibraryManager.install()

```

(thanks go to @justinedwards.jle for this cool trick!)

I suggest you try this in a local system first and test it. The code is written for v8.3+

_PS. I'm ready to cop flak for using AI for this 😅 But this would have taken me a **lot** more coffee and time than I have available to write myself! Considering my Java is flakey at best_

_PPS. Also, if anyone knows how to add a new toolbar panel into the top main UI toolbar area (instead of the Project Browser which I'm using atm), I'm all ears!_

---

<div class="post-metadata">

**Author:** ![e.sagnelonge](https://avatars.discourse-cdn.com/v4/letter/e/7cd45c/32.png) [@e.sagnelonge](https://forum.inductiveautomation.com/u/e.sagnelonge)\
**Post date:** [June 17, 2026, 2:46pm UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/4 "2026-06-17T14:46:15Z")

</div>

I generated something fairly similar (using AI), with a modular approach, to manage my icon libraries.

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/3/4/340b02ae565eb162cf555ad958e3004aeda39105.jpeg)

If it can inspire anyone, feel free to take a look. [https://youtu.be/BLcZl-pZKgw](https://youtu.be/BLcZl-pZKgw)

---

<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:** [June 17, 2026, 3:16pm UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/5 "2026-06-17T15:16:13Z")

</div>

> [@nminchin](#):
>
> _PS. I'm ready to cop flak for using AI for this 😅 But this would have taken me a **lot** more coffee and time than I have available to write myself! Considering my Java is flakey at best_

In my opinion this is one of the _perfect_ use cases for AI.  
You have a well-bounded problem, where you know the input and output shape you care about, but don't particularly care about how the sausage is made internally. You can use the non-deterministic machine to come up with a deterministic output you can then iterate over.

> [@nminchin](#):
>
> _PPS. Also, if anyone knows how to add a new toolbar panel into the top main UI toolbar area (instead of the Project Browser which I'm using atm), I'm all ears!_

You need to get an instance of [`IgnitionDesigner`](https://sdk.inductiveautomation.com/javadoc/ignition83/latest/com/inductiveautomation/ignition/designer/IgnitionDesigner.html) and then call the `getDockableBarManager()` method to get a [`DockableBarManager`](https://seadas.gsfc.nasa.gov/mvn-seadas/junk/javadoc/com/jidesoft/action/DockableBarManager.html); see also [https://www.jidesoft.com/products/JIDE\_Action\_Framework\_Developer\_Guide.pdf](https://www.jidesoft.com/products/JIDE_Action_Framework_Developer_Guide.pdf)

---

<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 31, 2026, 11:18pm UTC](https://forum.inductiveautomation.com/t/perspective-custom-icons/115999/6 "2026-07-31T23:18:28Z")

</div>

I ended up having to make one tweak to the scripting because you could potentially be working in a project that isn't currently the gateway scripting project. I added a constant named GW\_SCR\_PROJ with my gateway scripting project name in it, then used it in the \_gw function instead of proj.
