Script IDE 1.23.0
See who else has the file open
A bar above the editor and a badge on the tab when somebody else is in the same script — from another browser, or from the Ignition Designer. It names them and says where they are working from.
Two feeds, one list. Browser clients report their open paths over the socket they already hold. Designers come from Ignition's own concurrent-editing feed: the gateway posts DesignerResourceSessionEvent on the Guava EventBus that CommonContext.getEventBus() returns — a public SDK accessor — carrying session id, username, hostname, IP, start time and the exact ResourcePaths open. This module registers on the same bus the platform's own manager uses; nothing is injected, wrapped or replaced. Everything is pushed, so a badge appears as fast as a keystroke travels.
Verified against a real Designer on 8.3.8, not off the bytecode. Opening MiningDemo.config in the Designer put ignition/script-python/MiningDemo/config in the list within seconds, and the browser showed "admin in the Designer on 172.31.0.2 also has this open." Closing the script cleared the path; exiting the Designer cleared the peer.
It is a warning, not a lock
Nothing here refuses a save — If-Match on the write path is what prevents a lost update. Presence exists so two people find out about each other before the conflict rather than after it, and the bar says so: "Saving is not blocked — talk to them first."
The wording is "has it open", never "is editing". That is what both feeds actually report, and a tab left open over lunch counts.
The caveat, stated plainly
DesignerResourceSessionEvent lives in gateway.jar, not in the SDK's gateway-api — checked on both 8.3.6 and 8.3.8. It is an internal type and may change in any patch release. Everything it carries is public SDK, so the reflection is confined to reaching the accessor.
If a future Ignition renames it, the listener stops matching and says so once, and presence falls back to session level from GatewaySessionManager, which is fully supported. The module never fails to start over it. GET /api/presence reports designerFeed (attached) and designerEventSeen (a real event actually read), so the failure is visible rather than silent.
Also
Run history is searchable, and records how long a run took. Fifty runs are kept and finding one was scrolling. The search reads the source and the output, because "which run printed that error" is not answerable from the code. Duration is wall time; a record kept before this release shows none rather than claiming 0 ms.
Signed module, Ignition 8.3.0+. 763 unit tests, 17 live suites (429 checks) against a running 8.3.8 gateway, plus a real Designer.