`explore`
Interactive terminal browser — tree pane on the left, value pane on the right, keystroke navigation. The fastest way to learn an unfamiliar address space.
A full-screen terminal UI for browsing the address space.
Usage
opcua-cli explore <endpoint> [global-options]
One argument, no extra flags beyond the globals. Connects,
starts the TUI, exits when you press q.
What it looks like
┌ Address space ──────────────────────┐┌ Details ────────────────────────────┐
│ ▾ Objects ││ NodeId: ns=2;s=PLC/Speed │
│ ▾ Server ││ BrowseName: 2:Speed │
│ • ServerArray ││ DisplayName: Speed │
│ • NamespaceArray ││ NodeClass: Variable │
│ • ServerStatus ││ │
│ ▾ DeviceSet ││ Value: 42.5 │
│ ▾ PLC1 ││ Type: Double │
│ › Speed ││ Status: Good (0x00000000) │
│ • Mode ││ Source: 2026-05-15T10:30:00+00:00 │
│ • Health ││ │
└─────────────────────────────────────┘└─────────────────────────────────────┘
┌ Log — q=quit ↑↓=move →/Enter=expand ←=collapse/up r=refresh ───────────┐
│ [10:30:00] Connected. Browsing Objects folder (i=85)... │
│ [10:30:00] Loaded 4 root children. │
│ [10:30:02] Browsed ns=2;s=PLC: 3 children. │
└─────────────────────────────────────────────────────────────────────────────┘
The screen has three regions: the address-space tree (left,
scrollable), the selected node's details (right), and the log
pane (bottom). The pane titles are literally Address space,
Details, and Log — … (the log border carries the keybinding
hint).
Only browse / read / connection-level events appear in the
log — moving the selection with the arrow keys doesn't log
anything.
Keybindings
| Key | Action |
|---|---|
↑ / ↓ |
Move selection |
→ or Enter |
Expand the selected node (loads its children on first use) |
← |
Collapse the current node; if already collapsed, move selection up to the parent |
r |
Refresh the value of the selected Variable (force a fresh read) |
q or Esc |
Quit and disconnect |
The TUI is keyboard-only — no mouse handler is wired up
(php-tui exposes mouse events, but ExploreApp does not
consume them).
What happens under the covers
explore runs on top of php-tui.
The application:
-
01
Browses lazily.
Only the currently-expanded folders are fetched. Expanding a folder issues a
browse()for that NodeId and renders the children. -
02
Caches values.
Once a Variable node's value has been read, it's cached for the session. Reload with
rto force a fresh read. -
03
Logs at the bottom.
Every action (browse, read, error) appears in the log pane. Useful for understanding what triggered each round-trip.
-
04
Drains input then sleeps 50 ms
per loop iteration — effectively a ~20 Hz tick. Snappy on every modern terminal.
When to use it
- First exploration of an unfamiliar server. Faster than
browse --recursivebecause you only descend into the parts you care about. - Verifying a path. Click through to confirm
/Objects/PLC1/Speedexists and has the value you expect. - Demoing to non-developers. The TUI is intuitive enough that a process engineer can use it without reading docs.
Limitations
- Read-only. No write support. Use
opcua-cli writefor modifications. - No subscriptions. Values are point-in-time on read. Press
rto refresh; for live updates useopcua-cli watch. - Terminal-dependent rendering. Best on a 100×30+ terminal with UTF-8 + true-color. Tiny terminals will clip the panes.
- No search. Browse manually; no global node-name search yet.
Common pitfalls
- Slow expansion on huge folders. A folder with 10 000
children fetches them all on expand. Cap your patience or
prefer
dump:nodesetfor full-address-space work. - Connection drops are not recovered. A network blip during
exploration disconnects the session. Press
qand re-launch. - Untrusted certificates.
explorefollows the same trust rules as the other commands. If the server cert is not yet trusted, the session fails to open and the TUI never starts — the CLI prints the helpfultrust <endpoint>hint and exits. See Trust store workflow.