# Custom Icon Library in 8.3

**URL:** <https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259>\
**Category:** Ignition 8.3 Early Access\
**Tags:** perspective\
**Created:** [August 1, 2025, 2:25pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259 "2025-08-01T14:25:58Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![bwirth](https://avatars.discourse-cdn.com/v4/letter/b/41988e/32.png) [@bwirth](https://forum.inductiveautomation.com/u/bwirth)\
**Post date:** [August 1, 2025, 2:25pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/1 "2025-08-01T14:25:58Z")

</div>

From the documentation: This does not appear to be the proper location for a custom icon library in 8.3. Did a search for material.svg and it is not found. I'm assuming this is still allowed. What folder should a custom library go into now?

### Use a Custom Icon Repository

The materials icon repository is a great source for icons, but if you have a custom library of icons, you can set it up to be accessible by Ignition. All icon repositories are stored as SVG files within the Gateway's Installation Directory. A typical path to an icon file will look like:

- Windows
- MacOS
- Linux

```python
C:\Program Files\Inductive Automation\Ignition\data\modules\com.inductiveautomation.perspective\icons\<repository name>.svg

```

You can create custom libraries by adding your own SVG file at this path. The properties inside the file are defined using XML, which

---

<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:** [August 1, 2025, 6:43pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/2 "2025-08-01T18:43:39Z")

</div>

Okay, here's the current steps.

1. 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).

2. Within that folder create an `icons/` folder.

3. Within that folder create a `<repository name>/` folder.

4. Within that folder, create:

5. Restart the gateway (or POST the `/data/api/v1/scan/config` endpoint) to pick up the changed resource.

---

<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:** [August 1, 2025, 6:47pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/3 "2025-08-01T18:47:09Z")

</div>

As an aside, I'm not sure if there's a rationale I'm not aware of for the indirection of the `config.json` resource. I'm going to make a case to drop it for final release, so you would _just_ have a `resource.json` file pointing to the svg file (by whatever arbitrary name). There may be a complicated upgrade related reason we had to do things this way, though.

---

<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:** [August 1, 2025, 6:53pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/4 "2025-08-01T18:53:51Z")

</div>

That worked for me. Thanks.

---

<div class="post-metadata">

**Author:** ![bwirth](https://avatars.discourse-cdn.com/v4/letter/b/41988e/32.png) [@bwirth](https://forum.inductiveautomation.com/u/bwirth)\
**Post date:** [August 1, 2025, 7:21pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/5 "2025-08-01T19:21:21Z")

</div>

Perfect. Thank you sir!

---

<div class="post-metadata">

**Author:** ![robert.william.parr](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robert.william.parr](https://forum.inductiveautomation.com/u/robert.william.parr)\
**Post date:** [September 18, 2025, 5:26pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/6 "2025-09-18T17:26:41Z")

</div>

Any update here now that the final release is out?

---

<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:** [September 19, 2025, 3:48pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/7 "2025-09-19T15:48:56Z")

</div>

Icons work the same way in the final release, though there were some changes in themes.

---

<div class="post-metadata">

**Author:** ![robert.william.parr](https://avatars.discourse-cdn.com/v4/letter/r/ea5d25/32.png) [@robert.william.parr](https://forum.inductiveautomation.com/u/robert.william.parr)\
**Post date:** [September 19, 2025, 3:57pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/8 "2025-09-19T15:57:46Z")

</div>

I haven’t been able to get the icons to open in designer by adding the icon folder as described above. I have my svg file formatted per this section of the manual: [Images and Icons in Perspective | Ignition User Manual](https://www.docs.inductiveautomation.com/docs/8.3/ignition-modules/perspective/working-with-perspective-components/images-and-icons-in-perspective). Nothing populates in the migrated-icons folder after a gateway restart either.

Attaching the svg and json files below.

[PlantPAxIcons\_resource\_with\_readme(1).zip](https://forum.inductiveautomation.com/uploads/short-url/uHuZgHlO6bHnvBOIazKSuP1Eu03.zip) (18.5 KB)

---

<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:** [September 22, 2025, 10:32pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/9 "2025-09-22T22:32:10Z")

</div>

Your icons file is malformed:

```stacktrace
E [P.IconManager] [15:28:30.982] [platform-executor-84]: Unable to parse PlantPAxIcons icon library collection=core
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the element content of the document.
	at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:262)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.computeLibraryAndCache(IconManagerImpl.java:182)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.lambda$onResourceAdded$5(IconManagerImpl.java:150)
	at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.onResourceAdded(IconManagerImpl.java:150)
	at com.inductiveautomation.ignition.gateway.config.NamedResourceHandler$Lifecycle.onAfterChanges(NamedResourceHandler.java:705)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycle$LifecycleResourceListener.onAfterChanges(ResourceCollectionLifecycle.java:183)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyListener(AbstractResourceCollection.java:386)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyResourceListeners(AbstractResourceCollection.java:315)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.updateEffectiveState(AbstractResourceCollection.java:156)
	at com.inductiveautomation.ignition.common.resourcecollection.RuntimeResourceCollection.applyChange(RuntimeResourceCollection.java:267)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$5(ResourceCollectionLifecycleFactory.java:210)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.updateOrStartAffected(ResourceCollectionLifecycleFactory.java:190)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.collectionUpdated(ResourceCollectionLifecycleFactory.java:167)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.notifyCollectionChanged(ResourceCollectionManagerImpl.java:1610)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.notifyCollectionChanged(ResourceCollectionManagerImpl.java:1594)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$onFileTreeChange$27(ResourceCollectionManagerImpl.java:1515)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$onFileTreeChange$28(ResourceCollectionManagerImpl.java:1514)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$wrapNotificationTask$0(ResourceCollectionManagerImpl.java:204)
	at com.inductiveautomation.ignition.common.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:238)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)
E [P.IconManager] [15:28:30.985] [platform-executor-84]: Unable to parse PlantPAxIcons icon library collection=core
org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the element content of the document.
	at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:262)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.computeLibraryAndCache(IconManagerImpl.java:182)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.lambda$onResourcesUpdated$7(IconManagerImpl.java:167)
	at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.lambda$onResourcesUpdated$8(IconManagerImpl.java:166)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at com.inductiveautomation.perspective.gateway.assets.icons.IconManagerImpl.onResourcesUpdated(IconManagerImpl.java:166)
	at com.inductiveautomation.ignition.gateway.config.NamedResourceHandler$Lifecycle.onAfterChanges(NamedResourceHandler.java:720)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycle$LifecycleResourceListener.onAfterChanges(ResourceCollectionLifecycle.java:183)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyListener(AbstractResourceCollection.java:386)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.notifyResourceListeners(AbstractResourceCollection.java:315)
	at com.inductiveautomation.ignition.common.resourcecollection.AbstractResourceCollection.updateEffectiveState(AbstractResourceCollection.java:156)
	at com.inductiveautomation.ignition.common.resourcecollection.RuntimeResourceCollection.applyChange(RuntimeResourceCollection.java:267)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.lambda$updateOrStartAffected$5(ResourceCollectionLifecycleFactory.java:210)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.updateOrStartAffected(ResourceCollectionLifecycleFactory.java:190)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionLifecycleFactory$1.collectionUpdated(ResourceCollectionLifecycleFactory.java:167)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.notifyCollectionChanged(ResourceCollectionManagerImpl.java:1610)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.notifyCollectionChanged(ResourceCollectionManagerImpl.java:1594)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$onFileTreeChange$27(ResourceCollectionManagerImpl.java:1515)
	at java.base/java.lang.Iterable.forEach(Iterable.java:75)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$onFileTreeChange$28(ResourceCollectionManagerImpl.java:1514)
	at com.inductiveautomation.ignition.gateway.resourcecollection.ResourceCollectionManagerImpl.lambda$wrapNotificationTask$0(ResourceCollectionManagerImpl.java:204)
	at com.inductiveautomation.ignition.common.util.ExecutionQueue$PollAndExecute.run(ExecutionQueue.java:238)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:840)

```

There's a bunch of invalid binary characters:

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/0/6/0681cc30753434ddc3d2e24084d57fc9c6e607a4.png)

---

<div class="post-metadata">

**Author:** ![MG3](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mg3/32/84125_2.png) [@MG3](https://forum.inductiveautomation.com/u/MG3)\
**Post date:** [October 22, 2025, 3:13pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/10 "2025-10-22T15:13:08Z")

</div>

Was this updated in the 8.3.1 release?

Your fix worked perfectly for me in the 8.3.0 release, but on a fresh Gateway (running 8.3.1) using the same setup methodology (and using the same SVG sprite sheet), I am getting the following error.

### Error

Failed to load resource: the server responded with a status of 404 (Not Found)

![Screenshot of Chrome Dev Tools Console](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/0/507769f8f6f5e0cb68a1c3e0dee1ac7bf2f488d3.png)

My `config.json` and `resource.json` files are identical to yours (I even used the same `icons.svg` file name). If I follow the link at the end of the _Dev Tools Console Error_ I am greeted with the following page:

 ![Screenshot of link followed from error present in Chrome Dev Tools Console](https://us1.discourse-cdn.com/inductiveautomation/original/3X/5/2/52d3d56a42ca93dfcfa42e3b56ef5b3a78c312b8.png)

_Note_: I have been send POST requests to `/data/api/v1/scan/config` to pick the update (I have also tried restarting the Gateway several times.

### Files

I can send the SVG if required but as I say, the same file was used on a different gateway with no problems. So I didn’t bother copying it over.

- Result of running the `ls` command on the directory in which my `dashboard_icon_set` resource is located.

![Result of 'ls' command run in the directory of my icon resource](https://us1.discourse-cdn.com/inductiveautomation/original/3X/e/8/e88b921bf0d60556dac9134a20c9190c18a23a52.png)

- My `config.json` file:

```python
{
 "svgFileName": "icons.svg"
}

```

- My `resource.json` file:

```python
{
    "scope": "A",
    "version": 1,
    "restricted": false,
    "overridable": true,
    "files": [
        "config.json",
        "icons.svg"
    ],
    "attributes": {
    }
}

```

Any solutions would be appreciated, I very well may have made a silly mistake somewhere when copying my resource from one Gateway to another but I can’t figure out what’s going on. Any ideas?

---

<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:** [October 22, 2025, 3:57pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/11 "2025-10-22T15:57:00Z")

</div>

Nothing should have changed. Are there any errors in your gateway logs from the asset manager?

---

<div class="post-metadata">

**Author:** ![MG3](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mg3/32/84125_2.png) [@MG3](https://forum.inductiveautomation.com/u/MG3)\
**Post date:** [October 22, 2025, 4:44pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/12 "2025-10-22T16:44:49Z")

</div>

I am so sorry! I completely forgot to check the logs (didn’t even realise an error like this would get logged). There was a small error in my SVG. I assume I must have accidentally introduced it when copying the file over somehow.

Thanks for your help!

---

<div class="post-metadata">

**Author:** ![a.alghannam](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/a.alghannam/32/75158_2.png) [@a.alghannam](https://forum.inductiveautomation.com/u/a.alghannam)\
**Post date:** [November 7, 2025, 9:19am UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/13 "2025-11-07T09:19:34Z")

</div>

Hello. Is anyone else unable to add icons with this approach?

---

<div class="post-metadata">

**Author:** ![Graham\_Dewdney1](https://avatars.discourse-cdn.com/v4/letter/g/2acd7d/32.png) [@Graham\_Dewdney1](https://forum.inductiveautomation.com/u/Graham_Dewdney1)\
**Post date:** [December 15, 2025, 2:13am UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/14 "2025-12-15T02:13:34Z")

</div>

Yes, I’ve spent hours trying to get the ‘sample’ SVG file to be recognised, and now I’ve got an exception preventing my gateway from starting.

wrapper.log contains: java.nio.file.FileAlreadyExistsException: Resource collection path '/usr/local/bin/ignition/data/config/resources/core' exists but is not empty

Gateway error is ‘unable to create ‘core’ resource collection’. I don’t understand the exception, since the core folder has never been empty.. very confusing.

---

<div class="post-metadata">

**Author:** ![kcollins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kcollins/32/19646_2.png) [@kcollins](https://forum.inductiveautomation.com/u/kcollins)\
**Post date:** [December 15, 2025, 4:16pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/15 "2025-12-15T16:16:13Z")

</div>

If you're attempting to preload some portion of the `core` resource collection, make sure that you've got a `data/config/resources/core/config-mode.json` file in place:

```json
{
  "title": "Core",
  "description": "Core collection of locally managed Gateway configuration resources",
  "enabled": true,
  "inheritable": true,
  "parent": "external"
}

```

The exception you're getting is when it tries to load the resource collection, cannot find the `config-mode.json` and then fails to create the collection fresh since the directory is not empty.

---

<div class="post-metadata">

**Author:** ![Graham\_Dewdney1](https://avatars.discourse-cdn.com/v4/letter/g/2acd7d/32.png) [@Graham\_Dewdney1](https://forum.inductiveautomation.com/u/Graham_Dewdney1)\
**Post date:** [December 15, 2025, 7:37pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/16 "2025-12-15T19:37:34Z")

</div>

Thanks for the quick response. I’m not aware of preloading and I’ve never heard of the config-mode.json file. All I want is some customised icons instead of the materials set.

It wasn’t me getting the exception, it was the Gateway. Placing creating the custom icons svg and associated config as described in the examples linked to above is what broke it, and removing the folders did not fix anything. I had to completely remove Ignition, re-install and restore a backup.

So is there any way to safely add custom icons in 8.3 or not?

---

<div class="post-metadata">

**Author:** ![kcollins](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kcollins/32/19646_2.png) [@kcollins](https://forum.inductiveautomation.com/u/kcollins)\
**Post date:** [December 15, 2025, 8:57pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/17 "2025-12-15T20:57:42Z")

</div>

> [@Graham\_Dewdney1](#):
>
> Placing creating the custom icons svg and associated config as described in the examples linked to above is what broke it

The sequence Paul [posted above](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/2) assumes that the Ignition installation is an existing one and that the `core` resource collection has already been created.

Based on the error you mentioned:

```python
java.nio.file.FileAlreadyExistsException: Resource collection path '/usr/local/bin/ignition/data/config/resources/core' exists but is not empty

```

... it indicates that you might have started with a completely clean Ignition installation (i.e. one that hasn't launched for the first time) and created the folders and files per that sequence. If this is the case, you'll have to add _the extra step_ of adding that `config-mode.json` file to the `core` resource collection base folder.

If this isn't the case, it might help to have a) more information on your specific environment, and/or b) more details from your wrapper.log.

---

<div class="post-metadata">

**Author:** ![Aiasa21](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Aiasa21](https://forum.inductiveautomation.com/u/Aiasa21)\
**Post date:** [April 30, 2026, 6:52am UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/18 "2026-04-30T06:52:38Z")

</div>

Good morning everyone,

I’m also trying to add some icons to version 8.3.6. For example, I’m using the Bootstrap set downloaded from the Exchange (which I currently use in 8.1.47), but I can’t get them to show up in the Designer.

What am I doing wrong?

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/d/a/da28bbf28a38185c8925d06b67cc69b2680d2790.png)

Thanks for the support.

---

<div class="post-metadata">

**Author:** ![aaronrai24](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/aaronrai24/32/87248_2.png) [@aaronrai24](https://forum.inductiveautomation.com/u/aaronrai24)\
**Post date:** [April 30, 2026, 3:05pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/19 "2026-04-30T15:05:18Z")

</div>

![image](https://us1.discourse-cdn.com/inductiveautomation/optimized/3X/5/d/5d7930ca49ffd9851bae60ad1a933ed701d1694a_2_690x31.png)

is bootstrap-icons actually a `.svg` file? After that use the **Scan File System** button found on the top right of the Gateway's Platform Overview page to pull in your file changes.

---

<div class="post-metadata">

**Author:** ![Aiasa21](https://avatars.discourse-cdn.com/v4/letter/a/aeb1de/32.png) [@Aiasa21](https://forum.inductiveautomation.com/u/Aiasa21)\
**Post date:** [April 30, 2026, 3:48pm UTC](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259/20 "2026-04-30T15:48:39Z")

</div>

Thanks for your help, it works perfectly. After clicking the **Scan File System** button now I can see the bootstrap icons.

Just a note: if you migrate a project, the folder containing the .svg and .json files must have the same name of the library, otherwise, the icon paths in the designer will be incorrect.

[Next page](https://forum.inductiveautomation.com/t/custom-icon-library-in-8-3/109259.md?page=2)
