# 8.3 ResourceTypes + ExtensionPoints?

**URL:** <https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449>\
**Category:** Ignition 8.3 Early Access\
**Created:** [August 6, 2025, 9:48pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449 "2025-08-06T21:48:42Z")\
**Posts on this page:** 5\
**Page:** 1

<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:** [August 6, 2025, 9:48pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449/1 "2025-08-06T21:48:42Z")

</div>

I'm not doing anything real here, just playing around and trying to register _some_ kind of a mode-aware gateway-wide configuration option.

I've gathered that:

1. I need to register a `ResourceTypeMeta` with the `ConfigurationManager::ResourceTypeMetaRegistry`.
2. The `WebResourceManager` now has a `NavigationModel`, where I can add things to the UI.

I think can stumble my way through creating a resource type and creating a UI, but what I don’t understand the relationship between `ResourceTypes` and `ExtensionPoints`.

1. Do all `ResourceTypes` have to correspond to an `ExtensionPoint`?
2. If not, when should my resource be an `ExtensionPoint` 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 6, 2025, 9:57pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449/2 "2025-08-06T21:57:08Z")

</div>

Extension points, like they were in 8.1 and prior versions are...points where an original author deliberately bakes in extensibility.

Think "device drivers", or "audit profiles", or "tag providers".  
Essentially it's an Ignition/module specific _interface_/_abstract class_ definition.

You may want to **implement** one or more existing extension points in your module, but it's pretty unusual to define new extension points that you expect other modules to implement.

---

<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:** [August 6, 2025, 10:08pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449/3 "2025-08-06T22:08:53Z")

</div>

Gotcha.

But if I do define my own extension point type, would that allow me to use [ExtensionPointResourceForm](https://files.inductiveautomation.com/sdk/javadoc/ignition83/8.3.0-beta2/com/inductiveautomation/ignition/gateway/web/nav/ExtensionPointResourceForm.html) to get a “standard” config UI?

---

<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 6, 2025, 10:19pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449/4 "2025-08-06T22:19:11Z")

</div>

I don't think the plumbing is hooked up in such a way that happens automagically like it did in Wicket-land with `RecordEditForm`.

I'm way out of my depth with web UI stuff, but as far as I know it's still all a bit handcranked on the frontend side (for now?) even if you do all the "right" things on the backend.

---

<div class="post-metadata">

**Author:** ![ngomez1](https://avatars.discourse-cdn.com/v4/letter/n/3d9bf3/32.png) [@ngomez1](https://forum.inductiveautomation.com/u/ngomez1)\
**Post date:** [August 7, 2025, 3:46pm UTC](https://forum.inductiveautomation.com/t/8-3-resourcetypes-extensionpoints/109449/5 "2025-08-07T15:46:52Z")

</div>

On the ExtensionPoint, you can override a method called `getWebUiComponent`, which requires that you return a `WebUiComponent` (Either a hand cranked React component or an `ExtensionPointResourceForm`, for now). If you choose the `ExtensionPointResourceForm` then by default the UI will be auto-generated based off of a schema. The schema is defined by using decorators on the resource profile config (the file that defines the fields for your extension point).

```python
        @Override
        public Optional<WebUiComponent> getWebUiComponent(ComponentType type) {
            return Optional.of(new ExtensionPointResourceForm(
                <String resource type>,
                <String resource noun>,
                <String extensionpoint type>,
                <JSONObject profile schema>,
                <JSONObject settings schema>,
                <Optional Set<string> categories you want in advanced section
            ));
        }

```

```python
        @Required
        @FormCategory("SOME GROUPING CATEGORY")
        @Label("FORM INPUT LABEL")
        @FormField(FormFieldType.TEXT)
        @Description("DESCRIPTION")
        @DefaultValue("default")
        String someField,

```
