# Perspective Workstation: native file-open dialog (\<input type="file"\>) freezes the entire client

**URL:** <https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385>\
**Category:** Module Development\
**Tags:** perspective\
**Created:** [July 13, 2026, 10:20pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385 "2026-07-13T22:20:40Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![porter.grigg](https://avatars.discourse-cdn.com/v4/letter/p/71c47a/32.png) [@porter.grigg](https://forum.inductiveautomation.com/u/porter.grigg)\
**Post date:** [July 13, 2026, 10:20pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385/1 "2026-07-13T22:20:40Z")

</div>

**Context:**  
We have a custom Perspective component (built with the Component SDK) that needs to import a JSON config file from the local filesystem. It uses a standard hidden `<input type="file">`, triggered via `fileInputRef.current.click()` from a button handler. This works correctly in Perspective web sessions. In Perspective Workstation, it hangs the entire client.

**Steps to reproduce:**

1. In a custom component, have a button call `fileInputRef.current.click()` on a hidden `<input type="file">`.
2. Click that button while running the session in Perspective Workstation.

**Observed:** the screen darkens as if a file picker is about to open, then nothing happens. The window becomes completely unresponsive and has to be force-closed via Task Manager.

**Diagnostics:** we attached Chrome DevTools to the session (`devTools=true` launch argument) before reproducing. No error, warning, or any console output appears at all — the freeze happens before anything returns to JS, and the DevTools connection itself becomes unresponsive along with the rest of the window. This points to the renderer sending a request to the native host asking it to show an OS file-open dialog, and that request never being answered — i.e., Workstation's embedded browser shell doesn't appear to implement the native file-chooser callback that `<input type="file">` (and, presumably, `showOpenFilePicker()`) depends on.

**Workaround we're using:** drag-and-drop (`ondrop`/`event.dataTransfer.files`) instead of the native picker, since that doesn't invoke any native dialog request at all — the OS hands file data to the page directly as part of the drag gesture.

**Ask:** Is this a known limitation of Workstation's embedded browser shell? Is there a supported way to invoke a native file-open dialog from a custom Perspective component that's known to actually work in Workstation, or is drag-and-drop / the built-in File Upload component the only sanctioned way to get a local file into a Workstation session?

---

<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:** [July 13, 2026, 10:34pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385/2 "2026-07-13T22:34:01Z")

</div>

My educated guess is that it's less about what's intended/supported, and much more about what we actually have on hand to test against.

Unfortunately, you're probably a bit stuck until we are able to prioritize fixing this ourselves, which...won't be for a while.

---

<div class="post-metadata">

**Author:** ![porter.grigg](https://avatars.discourse-cdn.com/v4/letter/p/71c47a/32.png) [@porter.grigg](https://forum.inductiveautomation.com/u/porter.grigg)\
**Post date:** [July 14, 2026, 1:24pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385/3 "2026-07-14T13:24:06Z")

</div>

But to your knowledge there is no way to have a Perspective component invoke a native file-open dialogue in Workstation?

---

<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:** [July 14, 2026, 4:11pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385/4 "2026-07-14T16:11:16Z")

</div>

What is probably going on, in both this and the other issue you reported, is that we're not implementing some [JxBrowser](https://teamdev.com/jxbrowser/) hooks in Workstation. As I said in my first message, that's not out of some intentional restriction on our part; it's simply that we have never _needed_ those capabilities, because none of our first party code uses the same browser hooks/inputs you're trying to use.

What that means _for you_ is fairly little. We provide the module SDK on an "available effort" support basis; there is no SLA or guarantee of fixing bugs that impact module authors like there are actual support contracts for Ignition itself. I'll get a ticket filed internally reporting these issues, then it'll get prioritized into a (large) backlog of other maintenance and feature work, and at some point in the future eventually picked up. I will tell you, at this point in time, the earliest version of workstation that this _could_ end up fixed in would be a future 2027.x release. It's very unlikely to end up fixed in 8.3.x.

---

<div class="post-metadata">

**Author:** ![porter.grigg](https://avatars.discourse-cdn.com/v4/letter/p/71c47a/32.png) [@porter.grigg](https://forum.inductiveautomation.com/u/porter.grigg)\
**Post date:** [July 14, 2026, 4:25pm UTC](https://forum.inductiveautomation.com/t/perspective-workstation-native-file-open-dialog-input-type-file-freezes-the-entire-client/116385/5 "2026-07-14T16:25:04Z")

</div>

Ok, thanks for the info!
