Ignition Designer shows a modal reading Unable to save session props when you press Save. The save does not complete. How often it happens depends on the gateway. Some gateways never show it. On others it appears within about 2 minutes of opening Designer. Every save attempt after the first failure fails the same way. The one thing that matters is the network path between Designer and the gateway at the moment you save. The cause is broken session state, not a fault in the project.
Fixes That Fail and Why
The usual responses to this dialog either cost work or do not touch the fault.
| Attempted fix | Result | Why |
|---|---|---|
| Press Save again | Same dialog | Each save runs the same Perspective commit step. That step looks up the same missing value and throws again. |
| Close and restart Designer | Clears the error | Everything edited since the last successful save is lost. This is the loss engineers are trying to avoid. |
| Clear the Designer launcher cache or reinstall Designer | No effect on the running session | The fault is in memory, in the running Designer's session binding. Nothing on disk is corrupt. |
| Search the gateway logs | Usually nothing relevant | The exception is raised inside the Designer JVM on the Swing event thread, before the save reaches the gateway. |
| Change Windows versions or builds | No effect | The error is reported on Windows 11 24H2 (build 26100.3775) and Windows 23H2 (build 22631.5039). The Ignition build is the variable that matters, not the OS build. |
Save-Time Call Path That Throws
The full exception from an affected Designer shows the whole path:
java.util.concurrent.ExecutionException: java.util.NoSuchElementException: No value present
at java.util.concurrent.CompletableFuture.get
at com.inductiveautomation.perspective.designer.workspace.pageconfig.SessionPropsAdapter.commit(SessionPropsAdapter.java:222)
at com.inductiveautomation.perspective.designer.workspace.pageconfig.WorkspaceRootConfig.commit(WorkspaceRootConfig.java:22)
at com.inductiveautomation.perspective.designer.workspace.ViewWorkspace.notifyProjectSaveStart(ViewWorkspace.java:330)
at com.inductiveautomation.perspective.designer.DesignerHook.notifyProjectSaveStart(DesignerHook.java:560)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.commitAll(IgnitionDesigner.java:1629)
at com.inductiveautomation.ignition.designer.IgnitionDesigner.handleSave(IgnitionDesigner.java:1394)
Caused by: java.util.NoSuchElementException: No value present
at java.util.Optional.orElseThrow
at ...SessionPropsAdapter.lambda$commit$10(SessionPropsAdapter.java:221)
at ...CompletableFuture.complete
at com.inductiveautomation.perspective.designer.workspace.JavaJsBridge.lambda$invokeFunction$2(JavaJsBridge.java:287)
at com.teamdev.jxbrowser.frame.internal.FrameImpl$1.onNext(FrameImpl.java:359)
The trace reads from the bottom of the save call upward:
-
IgnitionDesigner.handleSavecallscommitAll. This gives every module a chance to commit its pending edits before the project is pushed to the gateway. - The Perspective module's
DesignerHook.notifyProjectSaveStartpasses the call down throughViewWorkspaceandWorkspaceRootConfigtoSessionPropsAdapter.commit. - The adapter asks the Perspective workspace for the current session props. That workspace runs inside the embedded JxBrowser frame. The request goes through
JavaJsBridge.invokeFunction, and the adapter waits on aCompletableFuture. - The browser side does complete the future, but it returns an empty
Optional. At line 221,orElseThrowraisesNoSuchElementException: No value present. -
CompletableFuture.get()wraps that as anExecutionExceptionat line 222. The whole save aborts, and Designer shows the modal.
So the bridge call works: it round-trips and returns. What is missing is the session-props object the adapter expects to find. Every known trigger is a change in the network path while a Designer session is live. That points to the session-props binding going stale when the connection is re-established. Your views, scripts, and other edits are still in memory. Only the reference that the Perspective commit step needs is gone.
Connection Events That Trigger the Fault
| Trigger | What changes under Designer | Observed result | Where to read it |
|---|---|---|---|
| Ethernet-to-Wi-Fi reconnection (undocking, cable pull, adapter failover) | Client interface and source address change. Designer re-establishes its gateway connection. | The next save throws the error. | Windows network adapter events, compared with the time of the error |
| Load balancer redirect between Designer and gateway | The same Designer session continues over a different connection or backend. | Any save after the redirect throws the error. | Load balancer logs for affinity changes, failovers, and connection resets |
| No obvious network event | A short drop and reconnect that goes unnoticed | Never on some gateways; within about 2 minutes of opening on others | Designer console timestamps compared with switch and Wi-Fi logs |
| VM host with periodic CPU saturation (reported on 8.3) | The VM's CPU spiked periodically to over 100% at the same time | Error appeared during those periods | Hypervisor CPU ready/usage graphs for the VM running Designer |
The intermittent pattern follows directly from the trigger. If the network path never changes while Designer is open, the error never appears. On a laptop that roams between docking and Wi-Fi, it appears within minutes. Because it depends on timing, it often will not reproduce during a support call.
Affected Versions and Platforms
| Ignition version | OS | Status |
|---|---|---|
| 8.1.45 | Windows | Reported |
| 8.1.47 | Windows | Reported by several users, some of whom first saw it right after upgrading to this version |
| 8.3 | Windows (VM) | Reported, together with periodic CPU spikes above 100% |
| 8.1.49 | — | Inductive Automation support indicated the fix is in this release |
| Any reported version | Linux | Not observed in long-term Linux Designer use |
| Any reported version | macOS | A separate macOS Designer issue with a similar symptom may exist; check the macOS release notes on its own |
The 8.1.49 fix is for the 8.1 line. The error has also been reported on 8.3. Before you count on an 8.3 build being fixed, confirm that its release notes list a correction for this save failure.
Recovering an Open Designer Without a Restart
Reopening the project in place rebinds the Perspective workspace to the current connection. This clears the stale session-props reference without closing Designer.
- Dismiss the dialog. Leave Designer running.
- Get the network settled first. Use one adapter, either wired or wireless. Confirm that the Designer status bar shows it is connected to the gateway. If you reopen while the link is still flapping, you can end up with the same stale binding.
- Protect any edits you cannot easily redo. Copy the edited Perspective components to the clipboard and paste the JSON into a text editor. Copy any changed script bodies the same way. Treat unsaved edits as at risk during the reopen.
- Go to
File > Open Projectand select the same project that is already open. - After the project loads, compare it with your copies. Paste back any edits that did not survive.
- Save. The save should finish with no modal.
Restarting Designer is the fallback if the reopen does not clear the error. Save your copies from step 3 before you restart.
Removing the Trigger: Network Path and Load Balancer
The fault needs a connection change during a live session. Remove that change and the error does not occur, even on an affected build.
- Upgrade. Move Designer and the gateway to 8.1.49 or later on the 8.1 line, the version support gave as the fix. On 8.3, check the release notes first.
- Use one network path per session. While Designer is open, use either wired or wireless, not both. Disable automatic Wi-Fi fallback on docking stations used for engineering work.
- Save before you move. Save before undocking, before a VPN reconnect, and before the laptop sleeps. Any of these can cause a reconnect, which sets up the next save to fail.
- Pin Designer through load balancers. Connect Designer directly to a specific gateway address. Or configure session affinity on the load balancer so a live Designer session stays on one backend and one connection. A redirect in the middle of a session is a known trigger.
- Give VMs enough CPU. If Designer runs in a VM and the error comes with CPU spikes above 100%, add vCPU or reduce host contention. The embedded browser that runs the Perspective workspace uses significant CPU during view editing.
Verifying the Fix
A single clean save proves nothing when the fault is intermittent. Test against the trigger you have confirmed.
- Open Designer on the upgraded build. Make a small edit to a Perspective view and save. This is your baseline.
- Cause the trigger on purpose. Switch from Ethernet to Wi-Fi, or force a load balancer failover. Wait until Designer shows it has reconnected.
- Make another small edit and save.
- Repeat steps 2 and 3 several times. Pass if every save completes with no
Unable to save session propsmodal. - Open the Designer console output and check for any
NoSuchElementExceptioncoming fromSessionPropsAdapter. The build passes only if that exception never appears.
For the in-place recovery procedure, one successful save after File > Open Project is enough to confirm the rebind worked for that session.
Data to Capture for a Support Ticket
Intermittent defects get fixed when the report includes the timing. Collect this when the error happens, not afterward:
| Item | Where to read it |
|---|---|
Full stack trace, including the Caused by section and the com.teamdev.jxbrowser frames |
Designer console / diagnostics output |
| Ignition gateway and Designer version | Gateway status page; Designer Help menu |
| Windows version and build number | Output of winver
|
| Timestamp of the error and of the last network change | Designer console; Windows network event logs |
| Load balancer in the path, and its affinity setting | Load balancer configuration and connection logs |
| CPU behavior at the time of the error | Task Manager or hypervisor metrics |
| Steps that reproduce it (for example, dock/undock followed by save) | Your controlled test from the verification section |
FAQ
How do I fix "Unable to save session props" without restarting Ignition Designer?
Once the network is stable, go to File > Open Project and select the project that is already open. This rebinds the Perspective workspace to the current connection. Copy the edited component JSON and script text to a text editor first, in case any unsaved edits are lost during the reopen.
How do I stop the session props error after switching from Ethernet to Wi-Fi?
Use one network adapter for the whole Designer session, and save before you dock, undock, or reconnect a VPN. The permanent fix is to upgrade to 8.1.49 or later, the release that Inductive Automation support identified as containing the fix.
Which Ignition versions have the Unable to save session props bug?
It has been reported on 8.1.45, 8.1.47, and 8.3, all on Windows. Support indicated the fix is in 8.1.49. On 8.3, confirm the fix in the release notes before relying on it.
How do I run Ignition Designer through a load balancer without save errors?
Configure session affinity so a live Designer session stays on one backend and one connection, or connect Designer directly to a specific gateway address. A redirect in the middle of a session followed by a save is a confirmed trigger for the NoSuchElementException in SessionPropsAdapter.commit.
How do I get the error fixed if it continues after upgrading?
If the error persists on 8.1.49 or later, or appears with no network change and no load balancer in the path, stop troubleshooting locally and open a ticket with Inductive Automation support. Include the full stack trace, the gateway and Windows versions, and timestamps of the error and of recent network events. Only a support ticket gets an intermittent defect like this into the issue tracker.