# Custom Config pages

**URL:** <https://forum.inductiveautomation.com/t/custom-config-pages/107656>\
**Category:** Module Development\
**Tags:** ignition81\
**Created:** [June 22, 2025, 2:43pm UTC](https://forum.inductiveautomation.com/t/custom-config-pages/107656 "2025-06-22T14:43:25Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![christofer.dutz](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/christofer.dutz/32/76634_2.png) [@christofer.dutz](https://forum.inductiveautomation.com/u/christofer.dutz)\
**Post date:** [June 22, 2025, 2:43pm UTC](https://forum.inductiveautomation.com/t/custom-config-pages/107656/1 "2025-06-22T14:43:26Z")

</div>

Hi all,

I'm currently working on a driver module, I've finished most parts that I wanted to, but one last thing is remaining:  
I would like to extend my Config Page with a Button; "Discover...". If a user clicks on that, he is shown a list of devices found. If he then selects one of the listed devices, the settings page is initialized with the settings found.

I have seen several posts (mostly in this forum) but none of them syntactically still work, so I assume that with Ignition 8.1 the API is quite a bit different.

Can anyone help me? Help greatly appreciated.

Chris

---

<div class="post-metadata">

**Author:** ![mazeyrat](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mazeyrat/32/10955_2.png) [@mazeyrat](https://forum.inductiveautomation.com/u/mazeyrat)\
**Post date:** [June 22, 2025, 3:26pm UTC](https://forum.inductiveautomation.com/t/custom-config-pages/107656/2 "2025-06-22T15:26:07Z")

</div>

Perhaps something interesting here

> **[ignition-sdk-examples/gateway-webpage at master ·...](https://github.com/inductiveautomation/ignition-sdk-examples/tree/master/gateway-webpage)**
>
> Ignition SDK Example Projects. Contribute to inductiveautomation/ignition-sdk-examples development by creating an account on GitHub.

---

<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:** [June 22, 2025, 3:44pm UTC](https://forum.inductiveautomation.com/t/custom-config-pages/107656/3 "2025-06-22T15:44:56Z")

</div>

The general flow is going to look something like:

1. override `BaseExtensionPointType::newRecordConfigPanel`. This returns a `ConfigPanel`, which is basically just a Wicket `Panel`.
2. learn whatever old version of Wicket we're using in 8.1 and build yourself a fancy discovery page on this panel.
3. user did stuff, you have some info, user clicks a button, it's time to move on to a `RecordEditForm`. You'll end up creating a `RecordEditForm` and then swapping it in:

```python
var recordEditForm = new RecordEditForm(configPage, parentPanel, model, records);

configPage.setConfigPanel(recordEditForm);

```

Something along these lines... you are given all the things you need to eventually create the `RecordEditForm` in `newRecordConfigPanel`. Don't be afraid to step into the decompiled code, you'll probably never figure this out if you don't.
