Skip to content

Browse and monitor OPC UA servers from your terminal. Lightweight, cross-platform, keyboard and mouse friendly.

License

Notifications You must be signed in to change notification settings

SquareWaveSystems/opcilloscope

Repository files navigation

opcilloscope

A lightweight, cross-platform OPC UA client for the terminal.

Browse, monitor, and subscribe to industrial automation data right from your terminal. Keyboard-driven with mouse support. No bloated GUI, no complex setup, no license fees.

.NET 10 License Terminal.Gui

opcilloscope demo: install, connect, browse, subscribe, scope view

Why opcilloscope?

Traditional OPC Clients opcilloscope
Heavy desktop apps Single portable binary
Minutes to install curl | bash and you're running
Resource-hungry GUIs ~40 MB RAM
Windows-only Windows, Linux, macOS (x64 & ARM)
Click-heavy workflows Keyboard-driven, mouse support

Use cases: commissioning (verify PLC tags), troubleshooting (live values during fault diagnosis), integration testing (validate OPC UA server configs), recording (export to CSV for reports).

Features

  • Browse — Lazily explore the OPC UA address space. Expand only what you need.
  • Monitor — Subscribe to variables with Enter. Real-time updates via OPC UA pub/sub, not polling.
  • Inspect — Full node attributes: Description, DataType, AccessLevel, ValueRank.
  • Scope — Real-time multi-signal oscilloscope (up to 5 signals, 30 s sliding window).
  • Trend Plot — Single-signal trend view with auto-scaling.
  • Record — Export monitored values to CSV. Zero data loss — every server-pushed sample is captured.
  • Configure — Save/load connection and subscription configs (.cfg JSON files).
  • Themes — Dark (default) and light.

Dark theme Light theme

opcilloscope scope view with live sine wave
Scope view — a soothing sine wave

How signal sampling works

opcilloscope does not poll your OPC UA server. The server pushes value updates using OPC UA's built-in publish/subscribe mechanism.

OPC UA Server
  │  pushes values every 250ms (configurable 100ms–10s)
  ▼
opcilloscope receives value change events
  ├─→ Scope View     — stores every sample (up to 2,000 per signal)
  ├─→ Trend Plot     — stores last 200 samples in a ring buffer
  └─→ CSV Recording  — writes every sample to disk (zero data loss)

Data capture and screen rendering are decoupled:

What Rate Details
Server → Client updates ~4 Hz (250 ms) Default publishing + sampling interval, adjustable in connect dialog
Scope / Trend Plot redraw 10 FPS (100 ms) Renders whatever samples arrived since last frame
CSV recording Every update Captures 100% of server-pushed values, flushes every 10 records

The scope view holds a sliding 30-second window (zoomable 5 s – 300 s). Display resolution is limited by terminal width — each character cell is one data point.

Keyboard Shortcuts

Key Action
Tab Cycle between panes
Enter Subscribe to selected node
Delete Unsubscribe from selected variable
Space Toggle selection / pause scope
S Open scope with selected variables
T Show trend plot
W Write value to node
+ / - Zoom in / out (scope)
Ctrl+O / Ctrl+S Open / save configuration
Ctrl+R Toggle CSV recording
? Help

Install

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/SquareWaveSystems/opcilloscope/main/install.sh | bash

Windows (PowerShell):

irm https://raw.githubusercontent.com/SquareWaveSystems/opcilloscope/main/install.ps1 | iex

Or grab a binary from GitHub Releases.

Then run:

opcilloscope
Linux dependency: ICU libraries

opcilloscope requires ICU libraries at runtime for globalization support.

# Debian 13 / Ubuntu 24.04+
sudo apt install libicu72       # or: sudo apt install libicu-dev

# Fedora / RHEL
sudo dnf install libicu
Uninstall

Linux / macOS:

curl -fsSL https://raw.githubusercontent.com/SquareWaveSystems/opcilloscope/main/uninstall.sh | bash

Or manually:

rm ~/.local/bin/opcilloscope
rm -rf ~/.config/opcilloscope/       # optional: remove config files
rm -rf ~/.local/share/opcilloscope/  # optional: remove OPC UA certificates

Windows (PowerShell):

irm https://raw.githubusercontent.com/SquareWaveSystems/opcilloscope/main/uninstall.ps1 | iex

Or manually:

Remove-Item "$env:LOCALAPPDATA\Opcilloscope" -Recurse -Force   # binary
Remove-Item "$env:LOCALAPPDATA\opcilloscope" -Recurse -Force   # OPC UA certificates
Remove-Item "$env:APPDATA\opcilloscope" -Recurse -Force        # config files

If you installed to a custom directory (OPCILLOSCOPE_INSTALL_DIR), replace the paths above with your custom install location.

Quickstart (Developer)

Requires .NET 10 SDK.

git clone https://github.com/SquareWaveSystems/opcilloscope.git
cd opcilloscope
dotnet build
dotnet run

Run tests:

dotnet test

OPC UA Test Servers

Built-in test server (Counter, SineWave, RandomValue, writable nodes):

dotnet run --project Tests/Opcilloscope.TestServer
# Starts at opc.tcp://localhost:4840

Public servers (no setup required):

Server Endpoint URL
OPC UA Server opc.tcp://opcuaserver.com:48010
Eclipse Milo opc.tcp://milo.digitalpetri.com:62541/milo

Docker (Microsoft OPC PLC):

docker run -p 50000:50000 mcr.microsoft.com/iotedge/opc-plc:latest \
  --autoaccept --unsecuretransport
# Connect to opc.tcp://localhost:50000

Contributing

Contributions welcome! Please submit an issue or a pull request.

License

MIT — see LICENSE.

Built by Square Wave Systems
Inspired by lazygit

About

Browse and monitor OPC UA servers from your terminal. Lightweight, cross-platform, keyboard and mouse friendly.

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors