Getting started
The release carries three artifacts from one version — a Windows zip, a Linux tarball and a macOS tarball. Each holds the installer scripts at its root and the binary under service/.
Installing
| Platform | Command |
|---|---|
| Windows | powershell -ExecutionPolicy Bypass -File install.ps1 |
| Linux and macOS | sudo ./install.sh |
The installer registers the tool as a native service, one per instance:
| Windows | Linux | macOS | |
|---|---|---|---|
| Service | sbn-virtual-receiver-<instance> in the SCM, plus the instance dashboard sbn-virtual-receiver-dashboard | sbn-virtual-receiver-<instance>.service | com.innovative.sbn-virtual-receiver-<instance> |
| Install root | C:\Innovative\sbn-virtual-receiver | /opt/innovative/sbn-virtual-receiver | /Library/Innovative/sbn-virtual-receiver |
| Config and logs | <root>\data\<instance> | /var/lib/innovative/sbn-virtual-receiver/<instance> | /Library/Innovative/sbn-virtual-receiver/data/<instance> |
The service runs serve --no-browser --bind 127.0.0.1 --port <port>, so the console is reachable from the box itself only and no firewall rule is created. A receiver link in listen role still needs its own inbound rule — that stays a manual step.
Uninstall (uninstall.ps1 / uninstall.sh) removes the service and the binary. vr-config.json and the logs stay unless -RemoveConfig (Windows) or --remove-config (Linux and macOS) is passed.
Running the console
The installed service runs serve on the instance's internal port (7100 for the first instance, the next free in 7100—7199 for each further one; -MemberPort / --member-port pins it) and the instance dashboard fronts it on 7080 (-Port / --port). Run it by hand for a console session:
| Flag | Default | Effect |
|---|---|---|
--port | 7080 | TCP port the console listens on |
--bind | 127.0.0.1 | Address to serve on. Anything other than loopback must be named explicitly; the tool never binds every interface silently, and the address it bound is printed at start |
--config | the executable's folder | Folder holding vr-config.json and log/ |
--overlay | the user config dir | User signal overlay file |
--no-browser | off | Print the URL instead of opening a browser. Use it for headless runs and anywhere there is no desktop |
The console is served over HTTPS with an in-memory self-signed certificate, so the browser warns on first visit. A console started from a desktop session opens the browser automatically at https://127.0.0.1:<port>.
Signing in
The console keeps a signed-in session in a cookie, good for 24 hours. Use from the machine itself does not ask for a login — a console started on loopback, which is the default, opens straight into the tool. Only a console exposed with --bind asks a caller from elsewhere to sign in.
The credential is admin with the password ibsibs, created on first run beside vr-config.json. Set a different initial password with the SBN_VIRTUAL_RECEIVER_ADMIN_PW environment variable. Changing the password afterwards can only be done from the machine the tool runs on, never from across the network. Repeated failed sign-ins from one address are refused for a while.
Configuration file
vr-config.json beside the data holds everything: the list of connections, each with its receiver, role, links, heartbeat and selection, and the list of saved campaigns. It is rewritten on every change and read at start, so a configured receiver comes back exactly as it was. A file written by the Delphi tool, or by an earlier version of this one, is migrated on first load into a single connection named Default. The user signal overlay is separate — see Signals and catalog.
Logs
Daily files under log/ in the data folder, mirrored to the console's Log pane, with size, retention and free-disk guardrails. When the machine carries the shared Innovative NATS broker, every log line is also published on the standard log subject; when it does not, the tool logs to file only. NATS is never required.
The instance dashboard
The installer also registers sbn-virtual-receiver-dashboard, listening on https://127.0.0.1:7080. It lists every virtual receiver on the machine, starts and stops them, adds and removes them, holds the users and API keys, and opens each receiver's console in place — see Managing instances. The receiver itself has no API keys; anything scripted runs on the machine, where a loopback caller needs no sign-in.
Command-line verbs
The console is one way in; the same engine is driven directly by these verbs.
| Verb | Purpose |
|---|---|
serve | Host the web console and its live log stream |
send | Play a signal set at a receiver line once, or --repeat n times |
campaign | Sustain a signal rate for a duration — the soak driver |
catalog | Dump the embedded signal catalog as JSON, with the user overlay merged |
fleet | List the registered drivers and their type= codes |
version | Print the version and build stamp |
send and campaign share the connection flags: --mode dial or --mode listen, --addr host:port, --type (the concport TYPE= of the line, required), --driver, --signals, --heartbeat, --heartbeat-signal, --read-timeout, --quiet. A bare :port binds loopback, never every interface.
send and campaign transmit in the receiver’s wire form, exactly as the console does. Add --bare to send the stored catalog bytes instead, with nothing added — see Receivers and signals.
Building
ibs build sbn-virtual-receiver (or ibs publish) produces all three artifacts from one VERSION.