OpenShack Manual Remote Station
🧭 Looking for a specific setup?

This page covers full remote operation with OpenShack. If you only want to relay CW keying between two OpenShack Boxes with no PC in the path, see Box-2-Box mode. For local keying of a networked FlexRadio through the SmartSDR API, see the Flex Keyer mode of CW Link.

⚡ Remote operation without manual router setup

In normal use, remote operation does not require manual router setup. No port forwarding and usually no extra firewall rules. Enter the same passphrase on both sides and the connection can be established.

🔌 Use OpenShack's tools — or your own

OpenShack is open by design. You can operate through the built-in windows (Remote Control, Keyer, DX Cluster, Audio Decoder, Waterfall, Rotator) — or hand the radio to the software you already use. OpenShack exposes the host's CAT line to your client PC as a virtual serial port or a TCP socket, and the host's rigctld through a local proxy port. Your logger, digital-mode app, or anything else that talks to a radio just keeps working — only now it's over the network.

All Remote Station windows open — complete operating environment
Complete operating environment — main window, rig control, rotator, DX cluster, waterfall, and audio decoder
Remote Station
              window
Remote Station window
🔊

Bi-directional Audio

WASAPI and OPUS codec. Sidetone remains responsive because the mixing is done in the OpenShack Box. Optional binaural CW spatializer on the client pans each tone by pitch.

📻

Rig Control

Two paths: CAT Proxy as a raw byte tunnel without rigctld, or rigctld for OpenShack Remote Control, the rigctld proxy port, and the TRX Emulator.

🖥️

TRX Emulator

Client-side TS-2000 emulator. Contest loggers can connect through COM or TCP. Requires rigctld on the host.

True CW Transport

Paddle timing is sent directly to the host. Your own sending style is preserved.
WINKEY is also supported on the client so your logging program can continue to work as usual.

🗺️

Waterfall

Live spectrum waterfall for compatible ICOM rigs (CI-V), Kenwood TS-890S / TS-990S (KNS LAN) and FlexRadio 6000- / 8000-series and Aurora AU-series (SmartSDR API). Click a frequency to QSY.

🌐

DX Cluster

Live DX spots with direct QSY from the list.

🧭

Antenna Rotator

A compass rose shows antenna heading. Click a bearing to turn the rotator. Control is provided through PSTROTATORAZ over UDP.

🔌

Aux Devices

Monitor and control external amplifiers, tuners, and antennas such as SPE Expert, Elecraft KPA500/KAT500/KPA1500, Rf2k S, Juma PA600/PA1000, OM Power, Ultrabeam, and SteppIR SDA 100 / SDA 2000 — plus generic URL Switchers (hamparts.shop / qro.cz remote relays) and an optional remote Shutdown-Host-PC control.

🎛️

Command Center

A small, always-on-top panel that lists every open window and switches to any of them with one click — plus a single button to minimize them all. Handy on a laptop screen.

How It Works

Two instances of OpenShack connect through the host's Station-ID (its callsign) plus a shared secret that you choose. The secret is processed locally and is never sent in the clear. A club can operate several stations independently, and a caller needs to know both the host's callsign and the secret. The application then selects a suitable connection path across IPv4 or IPv6 networks, using professionally operated infrastructure where necessary.

Remote connection between operator and radio site with audio, control, CW and PTT
The operator and radio site exchange audio, control, CW and PTT over a protected remote connection.
Role Location What It Does
Host At the radio station Connected to the transceiver through CAT and/or rigctld, and also to the OpenShack Box, which handles CW and PTT. rigctld.exe must run on the host if Remote Control, the rigctld proxy, or the TRX Emulator is used. The host provides the selected services to the client over the protected remote connection.
Client Your remote location Receives audio and rig data, and sends keying and CAT commands back. A local OpenShack Box can be used for sidetone and paddle input.

Both roles use the same window. Select Host or Client with the radio buttons at the top before connecting. You cannot switch roles while a connection is active.

Setting Up a Connection

The home tab is where you set the shared secret that controls who can connect, plus your on-air callsign. It is labelled Stations when you run as Client — a live dashboard of the remote stations you can reach — and My Station when you run as Host, where you publish your own station's secret. Your callsign is required: it is your Station-ID in Host role (clients use it together with the secret to find you) and your Operator-ID in Client role (the identity the host sees). The top half changes with the role; the bottom half — your callsign and Note — is the same in both.

Windows Firewall Warning

⚠️ Windows Firewall prompt on first connect

The first time you click Connect on a PC, Windows may show a Windows Security dialog asking whether to allow the app to access public and private networks. This is normal — OpenShack needs network access to reach the connection service and establish the remote session. Click Allow so the connection can be set up. If you click Cancel, remote operation will be blocked until you allow the app through the firewall.

The same prompt can appear again after you install a new version — Windows treats the updated program as a new app. On the host especially, expect it on the first connect after each update and simply click Allow again. See Updating OpenShack.

Windows
                Firewall prompt asking to allow the app to access public and
                private networks — click Allow
Click Allow when Windows asks to grant network access on the first connect.

My Station tab — Host role

My Station
              tab in Host role: a masked secret with an Edit secret button, and a
              live status panel showing who is operating and online
The My Station tab in Host role — your station's secret (masked) and a live status panel

A host station has exactly one identity. The top of the My Station tab shows your station's Secret as a row of dots — never the value itself — with an Edit secret (✎) button next to it. Together with your Station-ID (your callsign, in the identity area below) the secret defines the channel clients connect to. If no secret is set yet, the field reads "no secret set — click ✎ to set one" and the editor opens automatically the first time you visit the tab.

Click Edit secret to open a small dialog where you set or change the value:

  • Secret — the passphrase that defines your station. Clients have to type the exact same value to reach you, including upper/lower case. Minimum eight characters. The value never leaves your machine — only a hash of it is used to derive the channel name. Allowed characters: letters (A–Z, a–z), digits (0–9) and the punctuation $ & % { } [ ] + - . , : ; _ # @ ! ? * = ~ ^; spaces and quotes are rejected, so a pasted secret can never pick up stray whitespace.
  • Show — reveals the value while you check it; otherwise it stays masked.
  • Generate — picks a random secret for you, using uppercase letters and digits only (skipping look-alikes like I, O, 0, 1) so it is easy to read aloud and to type. Copy it once and share it (through any out-of-band channel) with the people who should be able to connect.

There is deliberately no Delete in this dialog: you cannot delete your own station identity, only change its secret.

Below the secret, the My Station panel shows your station's live state, derived from who is present on your channel:

  • StatusOffline (you are not hosting / not advertising), Online (reachable, nobody operating) or Busy (a client is connected and operating).
  • Operating — the callsign of the operator currently on the air, or when the station is free.
  • Online — co-operators who are watching your station but are not on the air.

Release current operator ends the active operator's session and frees the station for the next client. Your station stays online the whole time — only that operator is dropped — so there is no gap in availability. The released operator is told their session was ended by the host: their client disconnects and shows Released by host in its window title. It is enabled only while the station is Busy.

Stations tab — Client role

Stations tab
              in Client role: a dashboard of remote hosts with live Status,
              Operator and Online columns plus per-row edit and connect buttons
The Stations tab in Client role — a live dashboard of the remote hosts you can reach

As a client you save the remote stations you use in one place and see their live state at a glance — before you even try to connect. Each row in the Remote hosts table is one station:

  • Active (radio) — marks the station the Connect button on the Session tab will use. Click any row to move it. While you are connected the radios are greyed out — you cannot switch station in the middle of a session.
  • Station-ID — the callsign of the host you want to reach (for example DL0AA or DL0AA/P). Required, and must match the host's Station-ID exactly — it selects which station you reach, so a typo lands you on a different (empty) channel. Entered in upper case; allowed characters are letters, digits and # - /. Click the cell to edit.
  • Status — the station's live reachability, shown without connecting: Online (reachable and free), Busy (someone is operating it) or Offline (not currently hosting). A blank Status means the Station-ID or secret does not yet match a real station.
  • Operator — when a station is Busy, the callsign of the operator currently on the air.
  • Online — the other co-operators watching that station (their Operator-IDs). You appear here on the stations you watch, so everyone holding the secret can see who else is around.
  • ✎ (Edit secret) — opens the secret dialog for that row: set or change the secret (the same passphrase as the host, with identical casing — the match is case-sensitive), with the same Show and Generate helpers as the host side, plus a Delete station button to remove the row. The secret appears only inside this dialog, never in the table.
  • ▶ (Connect) — connects straight to that station; see Connecting to a station below.

Add a new host by typing the host's Station-ID into the blank row at the bottom of the table — a new entry is created and selected automatically; open its dialog to set the secret. Each entry also remembers which side windows (Keyer, DX Cluster, Aux Devices …) were open the last time you were connected to it, so reconnecting restores the same layout. Your callsign, Note and audio preferences are shared across all stations — only each station's Station-ID, secret and remembered-window list are per-station.

Reorder the list by dragging. Grab any row and drag it up or down to a new position — a blue line shows where it will drop, and the new order is remembered, so you can keep your most-used stations at the top. The pointer shows a move cursor over a row you can drag. Reordering is locked while you are connected. (Picking up a row also selects it, so it becomes the active station — the same as clicking it.)

ℹ️ How the live Status works
The Status / Operator / Online columns come from a lightweight presence layer: every station scoped to a secret quietly announces who is hosting, operating and watching, so the holders of that secret can see one another. It is presence only — no connection attempt is made to read it, nothing is stored on a server, and there are no accounts. Only people who already know a station's secret can see its presence, exactly as only they can connect to it.
ℹ️ When am I visible to others?
Presence follows what you are doing, not just having the window open — nothing is published merely by launching the Remote Station window:
  • As a client you appear as Online (a watching co-operator) on every saved station while the Stations tab is open; leaving the tab makes you disappear. You only become a station's Operator once you actually connect and the link is established.
  • As a host your station goes Online the moment you press Connect to start hosting, and stays up for the whole hosting session. Opening the My Station tab only reads your own status — it does not advertise anything by itself.
ℹ️ Your own host entry
When you switch to Host role the app keeps a reserved entry for your local station's identity — its secret is the one you edit on the My Station tab, and its Station-ID is the callsign you enter there. This entry is hidden from the client list (you connect to other stations, not to yourself) and cannot be deleted.

Connecting to a station

There are two ways to connect from the Stations dashboard:

  • One click from the dashboard — press the button on the station's row. It becomes the active station and the connection starts immediately. This is the quickest way to jump onto a station you can see is Online.
  • Active radio, then Connect — select the station's Active radio, then press Connect on the Session tab. Use this when you want to review or change settings before connecting.

Either way, before the link is built the app checks that the station has a Station-ID and a valid secret (at least eight characters) and that your own Operator-ID is filled in; if anything is missing it opens the right editor so you can fix it, then press connect again. Connecting to a station whose Status is Busy is refused by the host (see Station already in use?) — wait until it shows Online. The first connect on a PC may also raise a Windows Firewall prompt (above); click Allow.

Your callsign and Note (both roles)

Below the secret area you find your own callsign and a note. The callsign field is the same control in both roles, but it is labelled to match what it does:

  • Station-ID (Host role) / Operator-ID (Client role), required — your own callsign. Entered in upper case; allowed characters are letters, digits and # - /. In Host role it is your Station-ID, the callsign clients type to reach you. In Client role it is your Operator-ID, shown to the host once a beacon is exchanged. You cannot connect until it is filled in.
  • Note (optional, multi-line) — a short message your partner sees alongside your callsign. Useful for things like "20m CW until 18:00" or "QRT after this QSO." Empty entries are fine — nothing is shown if you leave it blank.

Whatever you enter here and in Note is sent in the periodic beacon and shown on the other side at the top of the Operation tab next to the Connect button. Changes appear after a few seconds; no reconnect is needed. Your callsign, note, audio devices and other personal preferences are shared across all hosts — only each host's Station-ID, secret and remembered-window list are per-host.

Host side — at the radio

  1. Open Operate → Remote Station from the dashboard.
  2. Select the Host role. Your local-station identity is created automatically the first time you do this.
  3. On the My Station tab, click Edit secret (✎) and type a secret (or press Generate in the dialog for a random one) — this is the passphrase clients will need to reach you. It never leaves your machine.
  4. Fill in your Station-ID (required) — your callsign. Clients enter it together with the secret to reach you. Add a Note if you want to show a short status message.
  5. Select which services to provide (Audio, CAT, rigctld, CW/PTT). Start with Audio at minimum.
  6. Click Connect. OpenShack makes the station available and waits for the client.

The Settings → Host tab holds the cards that tell OpenShack how to reach your radio and station hardware. They are described below in the order they appear, top to bottom.

RIG Connection Path — rigctld (Hamlib)

rigctld (Hamlib) is the main way OpenShack reaches your radio, and it is needed for most functions — the Remote Control panel, frequency and mode readback, the client-side rigctld proxy that loggers connect to, click-to-QSY from the DX cluster, and waterfall retuning. Set this up first.

This card lets OpenShack start Hamlib's rigctld.exe for you. Choose your radio model and port; the command line is built automatically and shown for reference.

Host settings — Local rigctld.exe launcher card
Host settings — Local rigctld.exe launcher
ControlWhat it doesDefault
automatically start rigctld.exe (preferred)When ticked, OpenShack launches rigctld for you using the command line shown at the bottom of the card.On
ModelHamlib radio model; the number after the name (e.g. 3078) is the Hamlib model ID placed on the command line.
COM Port / Baud RateSerial port and speed rigctld uses to reach the radio.— / 115200
Listen PortTCP port rigctld listens on. Hamlib's standard is 4532.4532
TESTLaunches rigctld once with the current settings so you can confirm it connects before going live.
VFO-ModeAdds Hamlib VFO mode to the command line — some programs need it for correct split / VFO handling.Off
CIV Address (optional)Leave empty — Hamlib then uses the selected model's standard CI-V address automatically. Only fill this in (hex) if you changed your rig's CI-V address from the factory default, for example to run two identical radios.empty (model default)

Transceiver handling — power through rigctld

The Transceiver handling card controls the radio's power state through the same host-side rigctld connection. Both options are off by default, so a normal remote connection never changes whether your radio is on or off.

Host settings — Transceiver handling with Radio ON and Radio OFF via rigctld
Host settings — enable only the power action your unattended station needs
ControlWhat it doesDefault
Radio ON via rigctldBefore the remote rigctld service starts, OpenShack checks whether the radio already answers. If it does not, it sends Hamlib's power-on command and waits for the radio to boot before making rig control available to the client.Off
Radio OFF via rigctldSends Hamlib's power-off command when the remote session ends or the Host Remote Station window closes.Off
⚠️ Enable only for an unattended station
These are real power commands, not a status display. Leave them off if somebody may be using the radio locally, if another program manages its power, or if the radio should stay on after a remote session. They require a rig and Hamlib driver that support power-state commands.

Native CAT & existing rigctld — optional

The next two cards sit below the launcher and are optional — most stations run rigctld alone and can ignore them.

Use external rigctld service on the network — rather than have OpenShack launch rigctld, attach to one that is already running (e.g. started by another program) at a given IP and port. Leave it off to let OpenShack manage rigctld itself.

Host settings — use external rigctld service on the network
Host settings — use an external rigctld already running on the network (IP and port)

Connect optional additional CAT port (native CAT) — exposes the radio's native CAT protocol in addition to rigctld. Useful only if you have a second path to the radio and want a program to speak the rig's own CAT directly. If in doubt, leave it alone.

Host settings — optional native CAT path (COM or TCP)
Host settings — optional native CAT path: COM or TCP
ControlWhat it doesDefault
TransportNative CAT over a COM port or a TCP endpoint. The unused set is greyed out.COM
Host COM / BaudSerial port and speed of the radio's CAT interface (COM transport).— / 115200
TRX IP / PortAddress and port of the network CAT endpoint (TCP transport).127.0.0.1 / 9700

Rotators

Bridges the host to PSTROTATORAZ so the client can steer the antenna. OpenShack never talks to rotor hardware directly — see Antenna Rotator Control for the full picture and the client view. You can set up up to four rotators, each with its own PSTROTATORAZ connection and a name — handy if you run separate controllers for different antennas.

Host settings — Rotators card
Host settings — Rotators (up to four PSTROTATORAZ bridges)
ControlWhat it doesDefault
Rotator 1–4Ticking a row turns that rotator on. Enable only the rows you actually use.Off
IP / PortAddress and UDP port of the PSTROTATORAZ instance for this rotator. OpenShack sends on this port and listens on port + 1. Give each rotator its own port.127.0.0.1 / 12000
NameA label of your choice. The client shows it as Rotator: <name>, so you can tell several rotators apart.

Hardware PTT for Audio Modes

For voice and digital (audio) modes, the host decides how the radio is keyed, so the client never has to choose. The Hardware PTT for Audio Modes card on the host's rig settings tab selects the keying path and a safety timeout.

Host settings — Hardware PTT for Audio Modes: transport and timeout
Host settings — Hardware PTT for Audio Modes: keying path and safety timeout
⚠️ Why the path matters for USB audio
Some radios choose the TX audio source from how PTT is asserted. A hardware PTT (the OpenShack Box relay / footswitch jack) makes the radio use its rear-panel input and ignore the USB audio stream, so your voice is not heard on air. Keying via rigctld CAT tells the radio a computer is transmitting, so it routes the USB audio to TX. If your audio reaches the radio over USB, choose rigctld CAT; otherwise Box (DL2CC) is fine.
Setting What it does
Transport Keying path for audio (voice/digital) overs — Box (DL2CC) hardware PTT or rigctld CAT. Only the paths actually configured on the host are offered.
Timeout Safety auto-release, in seconds, for an audio-mode over. The OpenShack Box firmware also enforces its own 60 second limit.

When you transmit in an audio mode, OpenShack keeps the radio keyed until the buffered audio has actually played out on the host before releasing — so the end of every transmission is no longer clipped (important for SSB tails and FT8 decodes at the far end). The title bar shows a PTT countdown in the last 15 seconds before the safety timeout.

On the client, the Mic control on the Operation tab chooses when your microphone is streamed: Auto (only while you are transmitting), Open (always — needed for VOX), or Muted. Auto is the default and avoids sending audio when you are not transmitting.

Aux Devices — amplifiers, tuners & antennas

Each row connects one auxiliary device so the client can monitor and control it. Tick the device, set its port (and, where shown, its model or antenna); the status square turns green once connected. Every device is off until you enable it. See Aux Devices for what the client sees.

Host settings — Aux Devices cards
Host settings — Aux Devices: one row per amplifier, tuner or antenna controller
DeviceConnectionDefault baud / option
SPE AmplifierCOM115200
Elecraft KPA500COM38400
Elecraft KAT500COM4800
Elecraft KPA1500COM38400
RF2K-SNetwork (IP)port 8080
JUMA PACOM19200 · PA1000
SteppIRCOM9600 · Yagi 3-El
UltrabeamCOM
OM Power (up to 4 amplifiers)Network (IP)192.168.1.211 · port 10001

OM Power amplifiers have their own card right below the Aux Devices card, with one row per amplifier — up to four. Supported models: OM2000A+, OM1700A+, OM2501A, OM3501A, OM4001A and OM4001C (each connected through its built-in LAN port). Each row takes the amplifier's IP address and port (the factory defaults are already filled in) and an optional name such as "Main" so you can tell several amplifiers apart. Close OM Power's own remote control program first: the amplifier accepts only one network connection at a time.

Host settings — OM Power Amplifiers card
Host settings — OM Power Amplifiers: up to four, each with address, port and name

Waterfall sources

Three independent cards — ICOM, Kenwood and FlexRadio — choose where the panadapter data comes from. Enable the one that matches your radio (normally just one). Full details and the client view are under Waterfall Display.

Host settings — ICOM, Kenwood and FlexRadio waterfall cards
Host settings — waterfall sources (ICOM / Kenwood / FlexRadio)
CardKey fieldsDefault
ICOM Waterfall SupportICOM Model + CI-V Address (hex)CI-V B2
Kenwood Waterfall SupportModel, Host IP, Port, KNS User + PwdTS-890S · port 60000
FlexRadio Waterfall SupportModel, Host IP, PortFLEX-6400 · port 4992

URL Switcher

Up to ten labelled buttons that fire an HTTP request when pressed — handy for web-controlled relays, antenna switches or smart plugs. Each row carries three visibility tick-boxes plus a label and a URL. See URL Switcher for how the buttons appear to the client.

Host settings — URL Switcher card with ten rows
Host settings — URL Switcher: ten rows, each a labelled button with its own URL
ColumnWhat it does
NameTitle shown on the client's URL Switcher panel.
ShowInclude this row on the client panel.
On / OffMark the row as an ON or OFF action so paired buttons (e.g. ICOM ON / ICOM OFF) can reflect their state.
Label / URLButton text and the HTTP URL it requests when clicked.

Enable remote PC shutdown

When ticked, the client may shut down the host PC remotely — useful for an unattended station so you can power it down at the end of a session. Leave it off if the host PC should not be shutdownable from the client. The square turns green when the feature is armed.

Host settings — Enable remote PC shutdown
Host settings — Enable remote PC shutdown

Inactivity Shutdown

This is the station shutting itself down — you don't need a client for it. Tick Shut down host PC after no client for and choose a time between 5 and 600 minutes. Whenever nobody has been connected for that long, the station shuts down on its own. It's meant for an unattended station so it doesn't sit powered on all day when no one is operating.

The shutdown is the same graceful one you'd start from the client: before Windows shuts down, your URL Switcher's Off actions fire first (for example, powering your amplifier down), so nothing is left switched on. There's no long warning countdown — when the time is up, the station simply goes down. The status line under the setting just confirms it's armed and shows the timeout. Off by default.

Host settings — Inactivity Shutdown
Host settings — Inactivity Shutdown

Browser Network Box support

This card lets an operator use an OpenShack Box with the Remote web client on an iPad or another browser device. The Box sends its paddle and footswitch data straight to the Host, avoiding an extra browser/WebRTC trip and reducing CW latency.

ControlWhat it doesDefault
Direct connectionListens for the operator Box on TCP and UDP port 7373. Use this only when that port is reachable at the station, normally through a router port forward or VPN.Off
Relay connectionConnects the Host outbound to relay.openshack.com. This is the usual choice when either end is behind CGNAT or no station port should be opened.Off

Configure the operator Box once as a Box-to-Box client, using direct or relay mode to match the checked Host option. Enter this Remote Station's station secret (10 to 64 characters) as the Box-to-Box authentication key. The browser does not need a second copy of the key and the Host never announces it.

The Box source defaults to Box-2-Box mode when two physical Boxes already manage their CW/PTT link directly or through the relay. The browser does not open a USB or WebSocket connection to either Box, so its Connect and Disconnect buttons remain disabled. While the protected station session is connected, it automatically authorizes the Host's announced native Box route so authenticated CW/PTT traffic is forwarded to the station Box.

To use the browser-managed host route instead, open the Box tab, select Network Box, and click CONNECT BOX. There is no separate ARM step: the connection becomes active automatically once the station session, CW/PTT route, and physical Box are ready. Switching browser tabs does not disconnect it. The client marks the native route as Direct Box-to-Host preferred because it removes the browser from the CW edge path. The browser Network Box relay remains available as a compatibility fallback.

The Host's Status tab has a dedicated Browser Network Box card. It shows the Direct and Relay connection state, the active CW route, traffic counters, and the current timing sample. The Log tab also records service start and stop, waiting, connection, UDP activation, and disconnection events. Values refresh about every two seconds while either Host option is enabled; they remain idle when both options are off.

ℹ️ Opt-in and idle when unused
Both Host options are off by default. When both are off, OpenShack runs no Network Box listener, relay connection, or monitoring timer. If direct, relay, and the normal web CW route are all connected, the first one that starts keying owns the stream; the others cannot mix edges into the same transmission.

Client side — your remote location

  1. Open Operate → Remote Station from the dashboard.
  2. Select the Client role.
  3. On the Stations tab, look at the Remote hosts table. Either click the blank row at the bottom to add a new host, or pick an existing row by clicking anywhere on it.
  4. Type the host's Station-ID (its callsign, for example DL0AA), then click the row's button and enter the same secret as the host you want to reach in the dialog (both must match the host exactly). The secret is shown only inside that dialog, never in the table. Watch the Status column — once it shows Online, the station is reachable.
  5. Make sure the row for the host you want to connect to is the selected (Active) one — that is the host the Session tab's Connect will use. (Or skip straight to the connect by pressing that row's button.)
  6. Fill in your own Operator-ID (required) and an optional short Note — the host will see them next to the Connect button once the session is up.
  7. Click Connect. OpenShack locates the host and starts the remote session.
  8. Once connected, enable the services you want (Audio, CAT, rigctld, CW/PTT).

Next time you want to reach a different remote station, just pick its row in the table — there is no need to retype a secret. Each row keeps its own remembered side windows, so switching between hosts also restores each host's preferred window layout.

ℹ️ Station already in use?
If a third operator tries to connect with the same Station-ID and secret while a host and client are already connected, they get a clear popup — ”Station is currently in use by CALLSIGN. (note) Please try again later.” (callsign and note shown when known) — and the connection attempt is stopped. The active connection is not disturbed.

The Settings → Client tab collects the client-side endpoints that other programs on your remote PC connect to. The cards are described below, top to bottom.

Hamlib rigctld proxy

The main client endpoint: a local rigctld listener that Hamlib-aware programs (loggers such as N1MM+, Win-Test, fldigi …) connect to exactly as they would to a local rigctld. See rigctld / Hamlib.

Client settings — rigctld proxy and TS2000 emulator
Client settings — Hamlib rigctld proxy (top) and Client TS2000 emulator (bottom)
ControlWhat it doesDefault
Listen IP / PortAddress and TCP port the proxy listens on. Hamlib's standard rigctld port is 4532.localhost / 4532
Status lineReads idle until a program connects, then shows the active state.idle

Client TS2000 emulator

A Kenwood TS-2000 CAT port for loggers that don't speak Hamlib (bottom card in the screenshot above). Reachable over a COM port or TCP. See TRX Emulator.

ControlWhat it doesDefault
TransportExpose the TS-2000 port on COM or TCP.COM
TRX COM / BaudVirtual COM port and speed (COM transport).— / 115200
IP / PortAddress and port (TCP transport).localhost / 4574

Client RIG CAT (1:1 CAT) — optional

An optional raw CAT byte tunnel straight to the host's rig, with no rigctld in between. Use it only for a program that must speak the radio's native CAT protocol directly; most loggers use the rigctld proxy above instead. See CAT Proxy.

Client settings — Client RIG CAT card
Client settings — Client RIG CAT (1:1 CAT)
ControlWhat it doesDefault
TransportExpose the tunnel on a local COM port or as a TCP listener. The unused set of fields is greyed out.
Client COM / BaudVirtual COM port and speed your program opens (COM transport).(none) / 115200
IP / PortAddress and port your program connects to (TCP transport).localhost / 4573

Wavelog Integration

Live frequency/mode sync to WaveLog plus automatic QSO upload from digimode programs. Full details under WaveLog Gateway.

Client settings — Wavelog Integration card
Client settings — Wavelog Integration
ControlWhat it doesDefault
Sync to WavelogStarts the WaveLogGate-compatible gateway so the WaveLog browser extension receives live rig data.Off
URL / API keyYour WaveLog address and personal API key (shared with the QSO uploader).
UDP Listener for WavelogListens for finished QSOs from MSHV / WSJT-X / JTDX / FLDigi and uploads them to WaveLog.Off
Listen IP / UDP PortWhere the listener binds and which port the digimode program broadcasts to.localhost / 4575
Station ProfileWhich WaveLog station logbook the contacts go to. Press REFRESH to load your profiles.

Winkey Emulator & Winkey Proxy

A virtual Winkey COM port for any contest logger that speaks the Winkey protocol. With an OpenShack Box the Proxy relays Winkey to the Box; without one the Emulator keys the remote rig over the protected connection — the mode switches automatically. Full setup under Winkey Emulator & Winkey Proxy.

Client settings — Winkey Emulator and Winkey Proxy card
Client settings — Winkey Emulator & Winkey Proxy
ControlWhat it doesDefault
Virtual COM PortThe DL2CC side of the Winkey com0com pair; your logger opens the external side.Pre-selected by setup on a new install (e.g. COM25); otherwise —
Enable WinkeyStarts the proxy/emulator on the selected port.On for a new install when setup created the Winkey port; otherwise Off

On a new install, OpenShack pre-selects the bundled com0com Winkey port and enables Winkey automatically (Client role) — you usually only need to set the matching external port in your logger.

The Client tab also has an advanced area for the jitter buffer and timing compensation — see Latency and Codec Selection.

Remote Station status panel
Remote Station status panel — connection state, P2P/Relay indicator and active services
✅ P2P vs Relay — Connection Type Display
The status panel shows whether the active connection is P2P (direct, lowest latency) or Relay (routed through managed infrastructure). Both work correctly — P2P is simply preferred for latency reasons.

Command Center — Switch Between Your Windows

A remote session can fill the screen with windows — Remote Control, Keyer, DX Cluster, Audio Decoder, Waterfall, Rotator, one or more Aux Device panels. On a laptop they overlap and get hard to reach. The Command Center is a small, always-on-top panel that lists every window you currently have open and lets you jump to any of them with a single click.

Open it with the blue Windows button on the Remote Station window, next to the other window buttons (Remote Control, Keyer, DX Cluster …). Click it again to hide the panel.

Command Center window switcher listing all open remote-session windows
Command Center — one-click switching between all open windows
  • Click a name to bring that window to the front. It gets an amber dot to mark it as the one you last picked.
  • Click the amber-marked name again to minimize that window — a quick way to set a single window aside and call it back later.
  • The order is always the same: Remote Control at the top, the main Remote Station window at the bottom, and everything else alphabetically in between. Each row uses the window's own title, so Aux Device panels show the actual device name.
  • Minimize all windows — the button at the bottom — clears the screen in one click: every listed window, plus the OpenShack dashboard, is minimized and only the Command Center stays on top. Click any name to bring a window back.

Drag the Command Center by its title bar to park it wherever you like. It stays on top of the other windows and remembers its position for next time.

💡 Made for small screens
When you connect to a station, the OpenShack dashboard is minimized automatically to free up space — and if the Command Center was open when you last disconnected, it reopens by itself, in the same spot, the next time you connect.

Reopen the Same Windows on Connect

Client side only. Whatever Remote-Connect child windows you have open at the moment you click Disconnect — Keyer, DX Cluster, Audio Decoder, Rotator, one or several Aux Device panels, Waterfall, Remote Control — are remembered and reopened automatically the next time you click Connect with the same secret. The list is stored on disk, so it survives an app restart: come back tomorrow, hit Connect, and your usual window layout returns by itself.

Some windows have prerequisites and reopen as soon as those are satisfied — Audio Decoder waits for the audio session to start, Rotator and Aux Device panels wait for the host to announce the corresponding service, Waterfall waits for the host's CI-V announcement. You don't have to do anything; they just appear once the host is ready. (An Aux Device panel you deliberately closed is the exception — it stays closed until you reopen it from the Aux Devices button; see Aux Devices.)

Changing the secret clears the memory. A new secret usually means a different host, where the old window set no longer makes sense, so OpenShack starts with a clean slate.

Start Directly into Remote Station

Normally you start OpenShack from its usual icon and open Remote Station from the dashboard. If you run a fixed remote station, you can instead create shortcuts that open Remote Connect and connect automatically — reusing the host or client role, secret and settings from the last time you used it, and switching on always stay connected so the link keeps re-trying through network drops until it is up.

Open Remote Station → Advanced. Under Start into Remote Station shortcuts you will find three checkboxes — tick the ones you want, untick to remove them again:

  • Start menu entry — adds a normal OpenShack (Remote Station) entry to the Start menu, next to the regular one.
  • Desktop shortcut — puts an icon on the desktop for a one-click start straight into a connected station.
  • Start automatically with Windows (auto-connect) — the station comes up and connects by itself every time you sign in to Windows. Ideal for an unattended host PC at the radio or a fixed client console.
Advanced tab with Start into Remote Station shortcuts
Advanced tab — the shortcuts for starting directly into Remote Station (Start menu, Desktop, auto-start with Windows).

Set the role, secret and the services you want once the normal way; these shortcuts then reuse them every time. Hardware detection still runs first, so the Box is ready before the connection starts. These shortcuts are optional — if you never tick a box, nothing extra is added, and you can remove any of them at any time by unticking it here.

Startup delay before auto-connect (s) — on the same Advanced tab you can set a delay of up to 120 seconds (0 = off). It applies only to the auto-connect launch: when the PC starts the station this way, the app first fires any URL Switcher On URLs (to switch your gear on), then waits the chosen time before opening Remote Connect — so USB COM ports, rig interfaces and any relay-switched equipment have time to come up after a fresh boot. A short countdown is shown while it waits. Normal (manual) launches ignore this setting; the On URLs still fire, but without a wait.

ℹ️ Only one feature can auto-start with Windows
The Remote Station and CW Link both offer a Windows-autostart shortcut, but only one of them can be on at a time — both would try to use the same keying hardware the moment you sign in. If you tick the Remote Station's Start automatically with Windows while CW Link's is already set, it refuses and tells you to turn the other one off first: go to CW Link → Advanced and untick Start automatically with Windows. It works the same way in reverse.

Optional: Windows Auto Logon for Unattended PCs

The OpenShack Windows auto-start shortcut runs after a user has signed in to Windows. If a remote host PC should recover by itself after a reboot or power failure, Windows also needs to sign in to the station user automatically.

The most reliable way is Microsoft's Sysinternals Autologon tool:

  1. Download Autologon from Microsoft Sysinternals.
  2. Run Autologon64.exe as administrator.
  3. Enter the Windows user name, domain or computer name, and password for the account that should run OpenShack.
  4. Click Enable and restart the PC to test it.

If you use a Microsoft account and Windows Hello, use the real account password, not the PIN. If auto logon fails, check the exact Windows user and computer name with whoami, and disable the setting that allows only Windows Hello sign-in for Microsoft accounts before enabling Autologon again.

⚠️ Security caveat
Auto logon is convenient for fixed station PCs, but it reduces physical security: anyone with access to the computer can reach the signed-in Windows session. Microsoft notes that the saved password is encrypted, but an administrator can still retrieve and decrypt it. Use auto logon only on machines you physically control, and avoid it on portable or publicly accessible computers.

WaveLog Gateway

When Sync to Wavelog is enabled on the Client tab of Remote Connect, OpenShack starts a local WaveLogGate-compatible gateway on your PC. Any application that supports the WaveLogGate protocol (including the official WaveLog browser extension) can connect to it and receive live rig data — no server URL or API key needs to be entered in OpenShack itself.

Gateway Endpoints

Protocol Address Purpose
HTTP GET http://localhost:54321/api/radio Current frequency & mode snapshot (JSON)
HTTP POST http://localhost:54321/api/qsy QSY request — tune the rig to a frequency
WebSocket ws://localhost:54322 Live push every 2 seconds

Data Format

All endpoints use the standard WaveLogGate JSON format:

{"freq": 14195000, "mode": "USB", "rig": "DTM Remote"}

freq is in Hz. mode reflects the current operating mode reported by the rig (e.g. CW, USB, LSB, FM). The gateway broadcasts an update every two seconds while a rigctld connection is active.

QSY from WaveLog

The WaveLog browser extension can send QSY commands back to the gateway. OpenShack forwards these to the rig automatically via the active rig control channel — clicking a spot in WaveLog tunes the remote radio instantly.

Gateway Status

The Status tab in Remote Connect shows the gateway state next to Wavelog GW: Stopped when the gateway is not running, Running when active with no WebSocket clients connected, and Running (N client(s)) when one or more applications are connected via WebSocket.

Upload QSOs from MSHV / WSJT-X

OpenShack can also push your logged contacts straight into WaveLog. When you finish a QSO in a digimode program — MSHV, WSJT-X, JTDX or FLDigi — the program broadcasts the contact on the local network, OpenShack picks it up and uploads it to your WaveLog logbook automatically. Duplicate contacts are filtered out by WaveLog itself.

Enable UDP Listener for Wavelog on the Client tab of Remote Connect, underneath Sync to Wavelog. A small group of fields appears — the WaveLog Base URL and API Key (shared with the sync feature, shown just below the Sync to Wavelog switch), and the listener's own Listen IP, UDP Port and Station Profile:

  • Base URL and API Key — your WaveLog address (e.g. https://log.example.com) and a personal API key from WaveLog (Account → API Keys).
  • Listen IP — which local address the listener binds to. Leave it on localhost when the digimode program runs on this same PC; pick this computer's LAN address if the program runs on another computer in your network.
  • UDP Port — the port the digimode program broadcasts to. The default is 4575; only change it if that port is already in use.
  • Station Profile — click Refresh to load your station profiles from WaveLog, then pick the one your contacts should be logged against.
ℹ️ Set up the broadcast in your digimode program

The listener reads the program's secondary / N1MM-style broadcast (plain ADIF or N1MM XML), not its primary digital-mode port. Point that broadcast at 127.0.0.1 on the same port (default 4575):

  • MSHV: Options → Enable network, then under Broadcast tick QSOs and Use N1MM QSO format, with the address set to 127.0.0.1:4575.
  • WSJT-X / JTDX: Settings → Reporting, enable the Secondary UDP Server (N1MM Logger+) broadcast to 127.0.0.1 port 4575.

If the digimode program runs on a different computer, broadcast to this PC's LAN address instead of 127.0.0.1, and set Listen IP to that same address.

Upload activity (and any errors, such as a wrong URL or missing station profile) is shown on the Status tab and written to the debug log.

Service Overview

OpenShack splits remote operation into six independent service layers. Each can be started and stopped while connected, without interrupting the others. The host automatically mirrors the client's active service set — if the client enables audio, the host's audio capture starts automatically. If the client disables it, the host stops.

Service Transport What It Does Runs on
🔊 Audio Protected remote audio Bi-directional receive audio and microphone. Configurable bitrate and frame size. Host + Client
📻 CAT Proxy Protected remote control channel Raw byte pass-through between host (COM or TCP) and client (COM or TCP). The rig’s own CAT protocol travels unchanged — no Hamlib required. Host COM/TCP ↔ Client COM/TCP
🔌 rigctld Protected remote control channel Makes Hamlib rigctld available remotely. Requires rigctld.exe running on the host. Several client-side consumers share this single channel: OpenShack Remote Control, rigctld Proxy (for external loggers), and TRX Emulator, AUX devices. Host: rigctld.exe
🖥️ TRX Emulator Protected remote control channel Client-side TS-2000 emulator on a COM or TCP port. Contest loggers connect directly — no virtual COM bridge needed. Requires rigctld on host. Client only
CW / PTT Timing-preserving remote channel CW keying and PTT forwarded from the client Box to the host Box while preserving operator timing. Host: OpenShack Box
🔑 Winkey Proxy Local (virtual COM port) Bridges a logger's raw Winkey binary to the OpenShack Box via WINKEY:BYTES: commands. Enables simultaneous Winkey keying + DL2CC features over the bundled COM25/COM26 com0com pair. Client only
ℹ️ Service Auto-Recovery
Each service monitors itself and attempts automatic restart for up to 60 seconds after an unexpected failure, without requiring manual intervention or dropping the remote connection.

Audio

OpenShack carries the radio's audio over the internet with the low-latency OPUS codec, using WASAPI for capture and playback on both ends. For a new station there is really only one thing to set up: which sound devices to use. Everything else on the Audio tab — codec quality, mono blend, binaural — ships with sensible defaults you can leave alone.

Setting Up Audio — Pick Source and Target Client

On the client the Audio source and target card holds the only two choices you have to make:

  • Audio source — the audio that is sent to the remote radio and put on the air (your transmit audio).
  • Audio target — where the audio received from the radio comes out on your PC.

Pick the two devices to match how you operate — that one decision sets up the whole audio path:

How you operate Audio source (you → radio) Audio target (radio → you)
CW or SSB — listening and talking by ear/key Your PC headset / sound-card microphone (used for SSB; CW is keyed separately) Your PC headset / speakers
Digital modes (FT8, RTTY, JS8, …) decoded by software The virtual audio cable your software transmits into — e.g. CABLE Output (VB-Audio Virtual Cable) The virtual audio cable your software decodes from — e.g. CABLE Input (VB-Audio Virtual Cable)

Then start audio — that is all the audio setup most stations ever need. Leave the Audio quality on its default OPUS preset (change it only if your link is slow or unstable), and leave Mono blend and Binaural CW off unless you want them.

ℹ️ Digital modes — hear the radio too
With a virtual audio cable the received audio flows into your decoding software instead of your speakers. Turn on the Local monitor to play the received (and, if you like, sent) audio on your real headset or speakers at the same time, so you can still follow the band by ear. Your digital software's own devices are the mirror image: set its output to CABLE Input and its input to CABLE Output.
Audio settings — Client, set up for a digital mode
A digital-mode setup on the Client: the Audio source and target card points both devices at a VB-Audio Virtual Cable, and the Local monitor card below plays the received and sent audio on the PC speakers so the operator can still hear the band. For CW/SSB you would instead pick your headset for both devices and leave the monitor off.

Audio Source Mode — Single or Dual Host

By default the host captures a single audio device and sends it as the remote audio stream. This is the normal setup for one radio at the host site and needs no extra configuration.

As an optional extra feature, the host can capture two audio sources at the same time — typically two different radios — and pack them into a single stereo stream: source A goes to the Left channel, source B to the Right. The remote operator hears the first source in one ear and the second in the other. This is the standard SO2R-over-internet workflow, but it works equally well for any two mono inputs you want to keep separate (a radio plus a scanner, two receivers, etc.).

Switch the Audio source mode drop-down to Dual mono combine (two radios). A second device picker appears for source B and the first picker is relabelled Radio A (Left). Leave it at Single device for normal one-radio operation.

Audio settings — Host with dual-mono combine
Audio settings on the Host with Dual mono combine active — Radio A (Left) and Radio B (Right) device pickers visible. Audio mode, OPUS preset and mono blend rows are disabled on the host because the client controls them.
  • Pick a different physical capture device for A and B — the same device cannot be used twice.
  • Dual-mono combine requires a stereo transport. If the client has selected a mono OPUS preset or Compatibility Mono (PCMU), the host will fall back to single-device mode for that session. Ask the client to switch to a stereo OPUS preset.
  • The two audio devices have independent clocks, but source A drives the timing and source B is realigned on every 20 ms WASAPI callback. Typical USB sound cards drift by less than one sample per callback, so the correction adds no perceptible latency and no audible artefacts.
  • Status events log a periodic drift summary (sample inserts and drops per 10-second window) for support diagnostics.
ℹ️ Client side is unchanged
The client does not need to know whether the host runs one or two sources — it always receives a single audio stream and simply hears the two sources in separate ears when the host is in dual-mono combine.

Mono Blend — Soften L/R Separation Client

When the host sends stereo (especially in dual-mono combine mode, where the two ears carry different sources), some operators want to blend the two channels toward mono — for example to listen on a single speaker, or to keep both sources audible in both ears with a softened directional cue.

The Mono blend slider on the client's Audio tab does exactly that. It applies a simple cross-mix to every inbound stereo frame:

  • 0 % — original L/R untouched. Each ear hears only its own channel.
  • 50 % — diffuse mix: each ear hears 75 % of its own channel and 25 % of the opposite channel. Both sources audible in both ears, directional cue preserved.
  • 100 % — full mono mix. Both ears hear (L + R) / 2.

The setting is purely on the client side — the host is unaffected and need not know. The slider is disabled when the negotiated audio is mono (PCMU mono or OPUS mono preset) and when the local instance is the host, because both cases have no second channel to blend.

Binaural CW — Frequency-Positioned Stereo Client

CW signals close together in frequency are easier to copy when each one sits at a distinct point in the stereo field. Binaural CW takes the inbound audio and pans each tone left or right based on its pitch — lower tones move to the left ear, higher tones to the right, with the centre pitch staying in the middle.

Audio settings — Binaural CW controls on the Client
Binaural CW controls on the Client — enable checkbox, stereo width slider, centre pitch and pan range, and a Swap L/R toggle for reversed-channel headphones.

Switch the effect on with the Binaural CW checkbox. The remaining controls fine-tune how it sounds:

  • Centre pitch (Hz) — the frequency that stays exactly in the middle. Default 620 Hz, matching the OpenShack Box default sidetone, so signals you've tuned to zero-beat remain centred. Range 300–1200 Hz.
  • Pan range (Hz) — the offset from the centre pitch that maps to the full left or right edge. Default 150 Hz: with a 620 Hz centre, a 470 Hz tone is fully left, a 770 Hz tone is fully right, and anything in between is panned proportionally. A smaller range concentrates the spread into a tighter pitch window; a larger range needs a bigger pitch difference to reach the extremes.
  • Stereo width — scales the maximum pan magnitude. 0 % = pure mono (no spread); 100 % = full L↔R spread within the pan range. Useful to soften the effect without changing the centre or range.
  • Swap L/R — flips low ↔ high so lower tones land on the right and higher tones on the left. Provided for listeners whose headphones, cable or audio routing are wired with reversed channels.
ℹ️ Pure constant-power panning
The spatializer uses constant-power panning (cosine/sine pair) in the frequency domain via a 1024-point FFT with 50 % overlap and a sin (sqrt-Hann) window on both analysis and synthesis. The total perceived loudness stays the same as you sweep across the stereo field, and overlap-add reconstruction is exact so sustained tones sound like clean sines without the amplitude-modulation buzz that a naive Hann-on-both-sides implementation would produce.

Binaural CW works on any inbound audio — both mono modes (PCMU, OPUS mono) and stereo modes (OPUS stereo, L16). On a mono inbound the spatializer expands the playback chain to stereo automatically. On a stereo inbound the channels are first folded to mono and then re-spatialised by frequency, which replaces the original L/R separation; that combination is offered as a user-choice rather than a recommendation. The effect adds about 22 ms of extra latency at 44.1/48 kHz (one FFT block) on top of the network jitter buffer.

All four binaural settings are persisted in the client settings file and restored on the next session. The controls are disabled in host role.

Local Monitor — Listen on a Separate Device Client

When you run a digital mode through a virtual audio cable (VAC), the received audio is routed into the decoding software instead of your speakers — so you can no longer hear what the radio is doing. The Local monitor sends a copy of the sent and/or received audio to a separate listening device (real speakers or headphones) so you can still follow the band by ear while the digital stream keeps flowing to the VAC.

The monitor has its own card on the client's Audio tab. Pick a Monitor device, then enable the stream(s) you want to hear — each has an independent switch and volume slider:

  • Monitor received audio (RX) — plays the incoming rig audio. The common case: hear the band while a decoder reads the virtual audio cable.
  • Monitor sent audio (TX) — plays a copy of what you are transmitting, a confidence monitor for the audio your station is putting on the air.
ℹ️ Same device as the audio target
If you pick the same device for the monitor as your main Audio target, the received audio is already playing there, so the RX monitor switches itself off automatically to avoid doubling it. The checkbox stays ticked and the RX monitor resumes the moment you choose a different device; the TX monitor is unaffected.

Both streams are intended for the digital / virtual-audio-cable workflow. With an open microphone the TX monitor will feed back, so leave it off in that case. The monitor is a client-only feature, and its device and volumes are saved in the client settings.

Client Audio tab — Local monitor card with RX and TX monitors and the PC sidetone for WinKey + Keyer control
The Local monitor card on the client's Audio tab — the RX and TX monitors plus the PC sidetone for box-less CW

The same card also carries the PC sidetone for WinKey + Keyer control. This one is unrelated to the digital-mode monitor: it gives you an instant local sidetone when you key CW without an OpenShack Box at the client location. It plays on the Monitor device selected above and is on by default at 20 %. See Operate CW Without a Box for the full story.

Audio Modes

Two transport modes are available. The mode is selected on the client side and pushed to the host automatically before the session opens.

Mode Encoding Typical Use Notes
Opus Default OPUS codec, configurable preset Internet connections — recommended for all remote operation 40 presets covering 8–48 kbps in mono and stereo across four latency tiers. See below.
Uncompressed Stereo Uncompressed PCM 16-bit stereo (L16, 44.1 kHz) Local area network (LAN) only Zero compression overhead — bit-exact audio, but ~1.4 Mbps and no packet-loss concealment. Do not use over the internet.

Latency and Codec Selection

When Opus mode is selected, the Audio Preset dropdown offers 40 presets that combine a bitrate (8–48 kbps), channel count (mono or stereo), and one of four latency tiers. The tier controls the OPUS frame duration and jitter buffer depth — together these form the codec contribution to end-to-end audio delay. Your actual perceived latency will be this figure plus your one-way network propagation time (roughly half the round-trip time shown by a ping to the host).

Audio quality / codec preset on the Client
The Client Audio quality card — the OPUS Audio preset (bitrate · channels · latency tier) plus the mono blend slider.
ℹ️ Default preset
New setups start on 24 kbps · mono · High latency. Mono puts the full bitrate on the radio's single audio channel, and 24 kbps is plenty for amateur-radio audio — there is no need to change the bitrate. For a stereo application (e.g. two independent receivers or genuine stereo audio), switch to one of the stereo OPUS presets, where the left and right channels are carried independently. The High latency tier is a robust all-round starting point that also suits digimode decoding (e.g. FT8). You can try switching the latency to Medium or Low, depending on your network connection; or, if connected via slower links, go to the Very High setting.

Choose the tier based on the stability of your network path, not just its speed. A stable fibre or cable connection can use Low or Medium. Mobile data, VPN tunnels, satellite, or any path with variable packet timing benefit from High or Very High — the larger jitter buffer absorbs burst losses without audible dropouts, at the cost of extra codec delay.

Tier Frame size Jitter buffer Codec delay Total (excl. network RTT) Best for
Low 10 ms 20 ms ~30 ms ~50–80 ms Fibre / LAN, rock-solid internet path
Medium 20 ms 60 ms ~80 ms ~100–150 ms Standard broadband (cable, DSL) — lower latency for live CW/SSB on a stable path
High Default 60 ms 140 ms ~200 ms ~220–350 ms Robust on most internet paths (mobile, VPN, intercontinental) and a good match for digimodes
Very High 60 ms 300 ms ~360 ms ~380–450 ms Satellite internet, congested or unstable links where dropout avoidance is critical

Within any latency tier, a higher bitrate improves receive audio quality at the cost of more bandwidth. For typical HF receive audio, 12–16 kbps (mono or stereo) is a good choice. For SSB/AM monitoring where audio fidelity matters, step up to 24–32 kbps. The 40–48 kbps stereo presets are for wideband listening on a fast link.

If audio is choppy or breaking up, increase the tier one step at a time and allow 10–15 seconds for the connection to stabilise after each change. If latency is already acceptable but audio sounds thin or compressed, try a higher bitrate within the same tier.

💡 Still experiencing high latency?
Codec settings only address the codec contribution to delay. Network routing, NAT traversal type, and relay fallback can add significantly more. See How to Improve Your Latency for network-level steps: UDP port forwarding, IPv6 direct paths, and site VPN access.

Recommended Audio Workflow — OpenShack Box as Monitor

For the best CW operating experience on the client side, route the PC audio output into the OpenShack Box rather than listening through PC speakers:

  1. With the client-side OpenShack Box connected to OpenShack, open Hardware Settings → Audio / Codec and make sure Mix Enabled is On (default). Pick a Mix ModeDigital gives you the Line In filter and a software volume slider, Analog uses the codec's hardware bypass path. Set Line-In Mix Volume and, in Digital mode, the Mix Filter band to taste. Without this, the Box won't pass the PC audio to your headphones.
  2. Connect a 3.5 mm stereo cable from the PC headphone or line out to the Box's Line In Mix jack. Alternatively, pair the PC to the Box via Bluetooth Audio (requires WiFi off on the Box).
  3. On the client PC, open the Remote Station Settings → Audio tab and set the playback device to the sound card output that physically feeds the Box — i.e. the device whose headphone or line-out jack the cable from the previous step is plugged into.
    Tip: Some sound cards expose the headphone output as a separate device that only appears in the Windows playback device list once a cable is plugged in — which is exactly why we connect the cable first. If the expected entry still isn't there, close the Remote Station window and reopen it so OpenShack re-enumerates the playback devices.
  4. Plug your headphones into the Box's headphone jack.
  5. The Box now mixes the remote receive audio with its own hardware-generated sidetone in analogue or digital mode — you hear both in your headphones simultaneously.

This is the key advantage: the sidetone is generated entirely in the Box hardware with no audible latency, even though the remote audio travels over the internet. The operating feel is almost identical to sitting at the radio.

Set the receive audio level and the sidetone mix in the Box itself — see Hardware → Audio / Codec Tab for the relevant level controls. We recommend a PC headset with its own inline volume control and the following approach: drive the Box at a high output level and use the headset's volume knob as an attenuator. That way the noise floor of the headset amplifier sits well below the signal, and you can dial back the overall level to a comfortable listening volume without losing dynamic range.

⚡ Constant Hum or Noise on the Line In Cable? Use a Ground Loop Isolator
If you hear a constant hum or noise (typically 50/60 Hz buzz plus broadband hiss) once the 3.5 mm cable from the PC reaches the Box's Line In Mix, you could be looking at a ground loop between the PC and the Box. A passive 3.5 mm audio ground loop isolator placed inline in that cable breaks the loop and removes the constant hum or noise — no settings, no driver, no power needed. See Hardware → Constant Hum or Noise on Line-In for a picture of the part and where exactly to insert it.
ℹ️ PTT Safety Timer
A built-in safety timer automatically releases PTT after 30 seconds if the remote connection drops or a release signal is missed. This prevents a stuck transmitter at the remote site.

Rig Control

OpenShack offers two independent, parallel approaches to rig control. Choose one or both depending on what your station software expects:

Approach How it works Requires on host Best for
CAT Proxy Raw byte pass-through. Host COM/TCP ↔ client COM/TCP. Rig CAT cable connected to host PC Software that speaks the rig's own proprietary CAT dialect; simple setups
rigctld (Hamlib) Makes Hamlib rigctld TCP available remotely. Three client-side tools use the same channel. rigctld.exe running on host PC OpenShack Remote Control panel, contest loggers (N1MM+, Win-Test, WriteLog), TRX Emulator

CAT Proxy

The CAT Proxy is a transparent byte tunnel: every byte the rig sends is forwarded to the client, and every byte the client sends goes back to the rig. OpenShack has no knowledge of the rig protocol — it simply passes data in both directions over the protected remote connection. No Hamlib, no rigctld.exe needed.

Host PC Client PC Rig CAT jack ──→ COM port ─┐ ┌─ COM port ──→ CAT software or ──→ TCP port ─┤ ├─ TCP port ──→ CAT software └── protected remote connection ──┘

Both the host and client endpoints can be either a COM port or a TCP port, independently. Examples: host COM3 → client TCP 4573 (logging software connects via TCP localhost). Or host TCP 4572 (existing CAT server) → client COM5 (legacy app).

Host setup

  1. Connect the rig's CAT cable to the host PC and note the COM port (or TCP address of an existing CAT server).
  2. In the Remote Station window (Host), expand the CAT section.
  3. Select COM or TCP, enter the port/address and baud rate.
  4. Enable the CAT service.

Client setup

  1. In the Remote Station window (Client), expand the CAT section.
  2. Select whether to expose the rig as a COM port or TCP port locally.
  3. Enable the CAT service. OpenShack starts listening on the selected port.
  4. Point your logging or CAT software at that local COM or TCP port.
⚠️ No active writes during polling
OpenShack only forwards bytes that arrive from either side. The CAT Proxy never initiates commands on its own — no polling, no unsolicited writes to the rig. This keeps any other software sharing rigctld on the host side stable.

rigctld / Hamlib

Hamlib is an open-source library that speaks the native CAT dialect of over 300 different transceivers. Its network daemon, rigctld, connects to the rig via COM port on the host PC and exposes a simple text-based TCP server (default localhost:4532). Clients send universal commands like \set_freq 14195000 and rigctld translates them for the specific rig model.

All three rigctld-based features in OpenShack require rigctld.exe to be running on the host PC before enabling the rigctld service. The application coordinates their access over the protected remote connection.

Host PC Client PC (three consumers, one channel) rigctld.exe ──→ rig COM port OpenShack Remote Control (built-in panel) ↕ TCP localhost:4532 rigctld Proxy → N1MM+ / Win-Test / … OpenShack host connector ══ protected remote connection ══ TRX Emulator → COM or TCP for loggers
Assisted Host setup
  1. Go to Remote Control - Settings - Host
  2. Select your transceiver model, COM Port, Baud rate (leave default listen port at 4532 if you don't have another rigctld.exe running on your PC).
  3. For ICOM Transceivers: Check "VFO" mode and enter the CIV address for your transceiver in 0x form like 0xB2. You can check the address in the menu of your ICOM transceiver
  4. Check "Start rigctld.exe with this command line" to let OpenShack automatically launch the bundled rigctld.exe when the rig proxy starts. The generated command line always binds rigctld to localhost (-T 127.0.0.1) so it is not accessible from the network.

Using an already-running rigctld: If you already have rigctld running as a service or started manually, check "Use external rigctld service" instead. Enter the IP address and port of that service. The two options are mutually exclusive — enabling one automatically disables the other.

MANUAL Host setup

  1. Install Hamlib on the host PC.
  2. Start rigctld for your transceiver model, e.g.:
    rigctld -m 229 -r COM3 -s 9600  (Kenwood TS-2000 on COM3)
  3. In the Remote Station window (Host), enable the rigctld service and confirm the port (default 4532).

Virtual COM Ports

Some logging or CAT software only supports a physical COM port and has no TCP client option. If your client application cannot connect directly via TCP, you can bridge the gap with a virtual COM port pair: two COM ports that appear as real serial ports to Windows, with data written on one side arriving on the other.

Two common scenarios where this is useful:

  • CAT forwarding — the client-side CAT Proxy exposes a TCP port, but your logging software only speaks COM. The bundled com0com pair connects the logger's COM port to OpenShack's COM port.
  • WinKey Proxy — the bundled COM25/COM26 com0com pair lets logger software talk Winkey while OpenShack keeps full control of the Box over USB.

OpenShack setup can install com0com and create the port pairs for you. No separate VSPE purchase or manual virtual-COM setup is needed for the standard configuration.

Port pairs created by setup

UseSelect in OpenShackSelect in external software
CAT bridgeCOM21COM22 (WSJT-X / logger)
TRX Emulator / TSEMUCOM23COM24 (external software)
Winkey Proxy / EmulatorCOM25COM26 (N1MM+ / logger Winkey)

On a new install, OpenShack fills these ports in for you (Client role): the CAT, TRX Emulator and Winkey COM fields are pre-selected from what setup created, and the Winkey proxy is enabled automatically. You normally only set the matching external port in your other software.

ℹ️ Use the setup notes on your PC
The COM numbers above are the preferred defaults. If any preferred number was already in use, setup created fallback ports. The actual mapping is written to %LocalAppData%\DL2CC-STUDIO\Setup\virtual-com-ports.txt and also included in %LocalAppData%\DL2CC-STUDIO\Setup\setup-notes.txt.
🔧 Setup tools and virtual audio
com0com support tools and the generated setup notes are described under Advanced → Bundled Virtual Audio & COM Ports. Normal users do not need to run the com0com tools after setup.

OpenShack Remote Control Panel

The Remote Control window is OpenShack's own virtual radio front panel, built on top of the rigctld service. Open it from the Remote Station window while connected. It works identically in both Host and Client roles — the connection wiring is handled internally and is transparent to the user.

⚠️ Requires rigctld Service
The Remote Control window requires the rigctld service to be running on the host PC. See Rig Control → rigctld / Hamlib for host setup.
OpenShack Remote Control
              panel
OpenShack Remote Control panel — VFO, mode, levels, and CW memories

What you can control

Control Function
VFO A / VFO B frequency Read and set. The amber VFO A display updates immediately when you tune and is confirmed once the rig echoes the new frequency back. See Frequency Tuning for all input methods.
Mode & Passband USB, LSB, CW, CWR, AM, FM, and more — all modes reported by rigctld. Passband width in Hz.
Split operation Enable/disable split, set TX frequency and mode independently on VFO B.
PTT Send PTT to host (use space key).
RF / AF / SQL levels Read and set all supported levels (RF gain, AF volume, squelch, etc.). Available controls depend on the rig's rigctld capabilities.
Attenuator / Preamp Populated automatically from dump_caps — only the steps your rig actually supports are shown.
Functions (NR, NB, RIT, XIT, …) Toggle or set any function supported by the rig's rigctld driver.
Transverter Icom only The X-VERTER button on the ANTENNA & TUNER tab switches the radio's transverter function on and off — for stations operating through a transverter. It appears only on Icom models that expose this function (e.g. IC-7760) and is hidden on every other rig.
CW Memories Programmable CW text macros sent via rigctld PTT and CW keying.
Power per band Preset a TX power level for each band (with three profiles) so it is applied automatically on a band change — see Power per Band.

How VFO A, VFO B and Split work

The panel follows the classic receive on A, transmit on A or B model. A few points are worth knowing before you tune:

  • You always listen on VFO A. The large amber display is your receive frequency. The knob, mouse wheel, +/− buttons, band buttons and direct entry all move VFO A.
  • VFO B is a second frequency store, not a second receiver. Pressing VFO B does not switch your receiver to B — it simply points the tuning controls at the VFO B value so you can set it. Press VFO A again to return to normal tuning.
  • SPLIT uses VFO B as your transmit frequency. With split on you receive on VFO A and transmit on VFO B — the classic setup for working a DX station that listens up. Turn split off to transmit on VFO A again.
  • The RX / TX tags under the VFO labels show this at a glance: RX always sits under VFO A; TX sits under VFO A when split is off and moves under VFO B when split is on. These tags reflect the actual state read back from the radio, not just your button press — so the TX tag moves under VFO B a moment later, once the rig confirms the change.

Frequency Tuning

Several input methods are available for changing the VFO A frequency. All of them go through the same tuning pipeline, so the step size set with the STEP buttons applies to the mouse wheel and the +/− buttons alike.

Input How it works
Mouse wheel Scroll anywhere on the panel (except over a slider or the frequency text box) to tune up or down by one step per detent. Hold Shift while scrolling to move 10 steps at once.
Tuning knob Scroll the mouse wheel over the large knob — it has its own wheel handler and behaves identically to scrolling on the rest of the panel.
+ / − buttons The two small buttons to the right of the VFO A display. A single click moves one step; press and hold for continuous auto-repeat tuning.
Direct frequency entry Type a frequency in kHz into the text box on the MAIN tab and press Enter or click SET. The rig QSYs immediately, and the mode switches automatically to match the sub-band — see Frequency, Mode & Filter Memory.
Band buttons Click any band button (160m … 6m) to jump to that band. The panel stays in the current mode group (SSB or CW) and recalls that band's last frequency for it, picking the correct sideband automatically — see Frequency, Mode & Filter Memory.
STEP buttons Select the tuning step used by the wheel and +/− buttons: 10, 50, 100 Hz or 1, 5, 10 kHz. The active step is highlighted.

Frequency, Mode & Filter Memory

The Remote Control panel remembers the operating settings you normally want back after a band or mode change:

What is remembered How it behaves
Per-band, per-mode frequency Each band keeps separate last frequencies for SSB (USB/LSB) and for CW (CW/CWR). Clicking a band button stays in the current mode group and recalls the matching frequency on the new band. The sideband is chosen for the band automatically (LSB below 10 MHz, USB above), so USB on 20 m becomes LSB when you drop to 40 m. This frequency memory is shared across stations.
Filter width per mode The passband/filter you last chose for each mode is restored when you switch back to that mode: narrow for CW, wider for SSB. This is remembered per station, so each radio can keep its own suitable filter values.
CW / CWR preference Whether you operate CW or CW-reverse is remembered per station and re-used by the automatic mode selection.
ℹ️ Automatic mode selection
When you jump to a frequency — by typing it in the box, or via a DX-cluster / Wavelog click — the panel switches to the conventional mode for that part of the band: CW (or CWR) in the CW segment and USB/LSB in the phone segment. It leaves the mode alone in the narrow-band data segments (so it won't pull you out of a digimode area), and it only acts on a deliberate jump — not while you tune with the knob.

RIT / XIT and Frequency Offset

The RIT and XIT buttons enable receive or transmit incremental tuning. Once active, use the offset row (−500 … +500 Hz buttons) to shift the receive or transmit frequency relative to the displayed VFO. The current offset is shown between the buttons. Click CLR to zero the offset without disabling RIT/XIT.

Rig Monitor

All commands sent and responses received by the Remote Control panel are logged to the Rig Monitor tab in the Remote Station window. This is useful for diagnosing unexpected rig behaviour or verifying that a command was actually received.

ℹ️ Capability Auto-Discovery
On first connect, OpenShack sends \chk_vfo and \dump_caps to the host rigctld. This discovers VFO naming (VFOA/VFOB or Main/Sub), supported attenuator and preamp levels, and all available level and function names. The Remote Control panel then shows only the controls Hamlib supports for your specific rig.
Remote
              Control TX & CW tab
Remote Control — TX & CW tab: TX power with the S/C per-band power memory buttons, CW keying and processing controls
Remote
              Control memories
Remote Control — CW memory macros
Remote
              Control audio filter
Remote Control — audio filter settings
Remote Control antenna tuner
Remote Control — antenna tuner controls (with the X-VERTER transverter switch, shown on supported Icom models)

Power per Band (PWR tab)

The PWR tab lets you preset a TX power level for every band. When you move to a band, the panel applies that value to the radio automatically — full power on 40 m, but a lower value on 6 m through a delicate amplifier, for example.

Remote Control PWR
              tab — power per band
Remote Control — PWR tab: per-band TX power with three profiles
Control Function
ENABLE Master switch for the feature. Off by default — the panel then never changes the radio's power on its own. When on, changing band applies that band's stored level once.
PROFILE 1 / 2 / 3 Three independent sets of per-band power levels — handy for different antenna systems (a beam vs. a wire, or with and without an amplifier). Switch profile and, if the current band has a stored level in the new profile, it is applied to the radio straight away. Profiles are remembered per station.
Band sliders One slider per HF band (160 m … 6 m). Drag to set the power level (0–100 %) for that band in the active profile.
EMPTY Marks a band as not set — its readout shows “—”. For a band without a stored level, no power value is sent on band change; the radio's current power is left untouched. Click EMPTY again to use the slider value as that band's stored level.

The power is sent to the radio once when you change band — by band button, by tuning across into another band, or when the rig is tuned elsewhere (for example from your logger). Bands without a stored level send no power value.

Saving from the TX & CW tab — the S and C buttons

Next to the TX POWER slider on the TX & CW tab are two small buttons, S and C (labelled “S save · C clear”):

  • Ssave: store the current TX power as the level for the band you are on, in the active profile.
  • Cclear: remove the stored level for the current band (marks it empty).

This is the quick way to build up your per-band power levels while operating: set the power you want, press S, and it is remembered the next time you return to that band.

Spacebar PTT

While the Remote Control window is focused, press and hold Space to assert PTT — release to drop it (hold-to-talk). Enable Hold Mode to change this behaviour: each press of Space then toggles PTT on and off instead of requiring the key to be held down.

PTT Source

How the radio is keyed for audio (voice/digital) modes is now chosen once on the host, under Hardware PTT for Audio Modes — the Remote Control panel no longer has a per-panel PTT SOURCE button. The host applies the selected path automatically and keeps the radio keyed until the audio tail has drained before releasing, so transmissions are never clipped.

ℹ️ One place to set it
Live voice PTT, the Voice Keyer, the footswitch and external digital programs (e.g. WSJT-X) all key the radio through the same host-selected path — there is no longer a separate toggle in the control panel or the keyer.

TRX Emulator

The TRX Emulator is a client-side Kenwood TS-2000 CAT emulator. It runs inside OpenShack and exposes a TS-2000-compatible interface on a local COM port or TCP port. Your contest logger or logging software connects to it exactly as if a real TS-2000 were plugged into that port. Frequency and mode data are fed from the host rigctld through the protected remote connection.

⚠️ Requires rigctld Service
The TRX Emulator requires the rigctld service to be running on the host PC before use. It reads frequency and mode data from rigctld through the protected remote connection. See Rig Control → rigctld / Hamlib for host setup.
Client PC N1MM+ / Win-Test ──── COM or TCP ──── OpenShack TRX Emulator (TS-2000 CAT) ↕ protected remote connection rigctld.exe on host ──→ real rig

TRX Emulator vs. rigctld Proxy

Aspect rigctld Proxy TRX Emulator
Protocol exposed to logger Hamlib rigctld (text protocol) Kenwood TS-2000 CAT
Client connection type TCP only COM port or TCP port
Requires rigctld on host Yes Yes
N1MM+ — no virtual COM needed No — N1MM+ needs a COM port for Hamlib Yes — connect via TCP directly
Best for Hamlib-native apps (fldigi, WSJT-X, …) Contest loggers that natively support TS-2000 or Kenwood

Setting Up for N1MM+

  1. On the client, enable the TRX Emulator (TCP) in the Remote Station window. Note the TCP port.
  2. In N1MM+, open Config → Configure Ports → Radio.
  3. Set the radio type to Kenwood TS-2000.
  4. Set the address to localhost and the port to the TRX Emulator TCP port.
  5. N1MM+ now reads frequency and mode directly from OpenShack over TCP — no virtual COM port software required.

Setting Up for Win-Test / other loggers (COM mode)

  1. Enable the TRX Emulator (COM) in the Remote Station window and select a virtual COM port from the drop-down. With the bundled com0com setup, select the DL2CC side of the TRX Emulator / TSEMU pair, normally COM23.
  2. In your logger, configure a TS-2000 rig on the other port, normally COM24, at the matching baud rate.
ℹ️ Tab-Triggered Readback
The TRX Emulator re-reads rig state (frequency, mode, split) each time your logging software's relevant tab or window is brought into focus. This ensures the logger always shows confirmed radio values, not stale cached defaults.

CW Keying & PTT

When the CW/PTT service is active, OpenShack captures your keying from the local OpenShack Box on the client side and transports microsecond-precision keying-edge timestamps to the host's OpenShack Box, which keys the radio. This is not a decode-then-re-encode process — your exact timing, including every nuance of your fist, travels to the radio.

Advanced settings tab
Advanced tab — minimum jitter buffer, connection routing (Force direct P2P), and shortcuts for starting directly into Remote Station. Available on host and client.

Input Sources

🎛️

Iambic Paddle

Connect a dual-lever (or single-lever) iambic paddle to the OpenShack Box. The Box runs its own keyer engine locally — timing is generated in the Box, not on the PC, for zero-latency keying feel.

🔑

Straight Key / Bug

Connect via the straight key input on the Box. Every edge timestamp is captured and forwarded. Your bug timing goes on air exactly as you sent it.

Footswitch PTT (SSB Mode)

Connect a footswitch to the OpenShack Box footswitch input. Pressing the footswitch asserts PTT at the remote radio — ideal for SSB operation with a PC headset and microphone. The footswitch signal is debounced in the Box firmware before forwarding.

🔴 PTT Safety Max Timer
A safety timer on the host automatically releases PTT after 30 seconds regardless of remote state. This protects the remote transmitter if the connection drops while PTT is asserted. The timer resets on every received PTT update.

Connection Buffer & Latency Compensation

Network delivery varies from moment to moment. OpenShack and the Box compensate for those variations so remote CW keeps the operator's original rhythm. The connection is measured automatically and the buffer adapts without interrupting active keying.

Automatic Connection Measurement

The host measures connection quality automatically and adjusts the buffer. The client displays the resulting round-trip and buffer values in the Status tab and title bar.

Adaptive Tuning

The adaptive setting smooths short-lived network variation and changes the buffer only when the connection quality genuinely requires it. Measurements are coordinated so they do not disturb active keying, and both sides show the same current status.

ℹ️ JB indicator in the title bar
While the CW/PTT service is active, the Remote Connect window title shows the current connection buffer value. This gives you a quick at-a-glance indication of the buffer size without opening the settings. The value is received from the host when the session connects and updates automatically as the connection changes.

The Status tab Roundtrip row shows the host's live RTT statistics. If you press the Ping button yourself, the row is temporarily replaced with your own client-side roundtrip result instead.

Optimize Jitter Buffer

The Optimize Jitter Buffer dropdown on the Advanced tab lets you choose how the automatic tuning balances low latency against protection from dropouts. The buffer itself is always calculated on the host (the station with the rig and the OpenShack Box), but both sides can express a preference: the client's choice is sent to the host, and the host then uses the more protective of the two. In other words either side may ask for a bigger safety margin, but neither can force a smaller one on the other — the same idea as the Minimum Jitter Buffer below. There are three settings:

  • Low-Latency — keeps the buffer as small as possible and rejects spikes most aggressively. Best for good, stable connections, or for links like Starlink where the occasional huge ping is almost always a brief glitch and you want the shortest possible keying delay.
  • Balanced (default) — a sensible middle ground that suits most connections.
  • Robust — keeps a more generous buffer and lets it grow faster when latency really does climb. Best for genuinely poor or highly variable connections where you would rather have a little extra delay than risk choppy CW.
ℹ️ Which one should I pick?
Start with Balanced. If your CW feels sluggish on a good connection, try Low-Latency. If you still hear choppy or missing CW after the buffer has had time to settle, switch to Robust (and, if needed, also raise the Minimum Jitter Buffer below).

Minimum Jitter Buffer

The Minimum Jitter Buffer dropdown in the CW/PTT settings section lets you set a floor that the adaptive algorithm will never go below. Values range from 20 ms to 1000 ms in 10 ms steps. The automatic measurement still runs in the background, but the computed value will always be at least as high as your minimum setting.

Both the host and client have their own independent minimum setting. If the client changes their minimum, it is sent to the host automatically. The host then uses the higher of its own minimum and the client's minimum as the effective floor — neither side can lower the other's preference.

ℹ️ Adaptive Jitter Buffer
The Minimum Jitter Buffer setting is the floor. The host measures round-trip time (RTT) continuously and automatically adjusts the buffer to max(RTT × factor, minimum floor). The active value is shown in the title bar as JB:<ms>. Raise the floor if you experience dropouts despite the adaptive algorithm.
⚠️ Jitter buffer too small?
If the buffer is too small for your internet connection, you may hear choppy CW or missing elements at the remote station. The automatic measurement sets a safe value in most cases. If you experience issues, raise the minimum jitter buffer to 200–300 ms and observe whether CW quality improves.

Box Diagnostics

The Status tab can retrieve detailed Box diagnostics for support. If keying quality is poor, reset the statistics, key normally for a minute, retrieve the status again, and include the result in your support request.

⚠️ If monitored CW is clipped or uneven
First rule out congested WiFi, then raise the Minimum Jitter Buffer or choose a more robust optimization setting. Test again while monitoring the actual RF signal.

Require a Direct Connection

By default, OpenShack automatically selects a suitable connection path and can use professionally operated infrastructure where necessary.

The direct-only connection option on the Advanced tab restricts the session to a direct network path. Use it only on a known, reliable network or for connectivity diagnostics.

ℹ️ When to use this
If the connection succeeds with the checkbox on, a direct path is available. If it fails, leave the checkbox off so automatic routing can be used. The setting works on both host and client, is saved across restarts, and takes effect on the next connection.
⚠️ Connection may fail by design
With the direct-only setting enabled and no direct path available, the connection simply fails. This is intentional. If you are unsure whether your network supports a direct path, leave the checkbox off (the default).

CW Keyer & Digital Voice Keyer (DVK)

The CW Keyer provides 10 programmable memory buttons (F1–F10) for sending CW macros — CQ calls, 5NN, your callsign, contest exchanges, and more. The Digital Voice Keyer (DVK) adds 10 voice message slots for SSB operation. Open it from Operate → Keyer on the dashboard.

CW Keyer and DVK window
CW Keyer & DVK window — F1–F10 memory buttons and voice slot controls

CW Memory Buttons (F1–F10)

  • Each button stores a free-text CW macro. Edit by clicking the label next to the button.
  • Common variables are supported — use your callsign, contest serial number, etc.
  • WPM and sidetone frequency are adjustable directly in the Keyer window.
  • During remote operation, macros are transmitted through the active CW/PTT service over the protected remote connection to the host Box, which keys the radio.
  • Locally (no remote connection), macros play through the OpenShack Box sidetone or PC audio.

Digital Voice Keyer (DVK)

  • 10 audio message slots — record voice messages for CQ, 5NN, exchange, QSL, 73, etc.
  • Press a slot button to play the recorded message. PTT is asserted automatically for the duration of playback.
  • Space key = PTT — while the Voice Keyer tab is focused, hold Space to assert PTT and release to drop it (hold-to-talk). Enable Hold Mode to toggle PTT on and off with each press of Space instead of holding it down.
  • During remote operation, DVK audio is routed through the remote audio service to the remote station.
  • Recording length is configurable in File → Settings.

Keyboard Shortcuts from Other Windows

During remote operation, focus often sits on the Waterfall or Remote Control window rather than the Keyer. OpenShack routes the most important keyboard shortcuts automatically, so you never have to click back to the Keyer in the middle of operating:

Key Focused window Action
F1 – F10 Waterfall or Remote Control Fires the matching CW macro (CW tab active in Keyer) or voice slot (Voice tab active in Keyer). No action if the Keyer window is not open.
Space (hold) Waterfall Asserts PTT while held. Routed to the Remote Control panel if it is open (respects its Hold Mode toggle), otherwise forwarded to the Keyer Voice tab PTT.
Space (hold) Remote Control Asserts PTT directly on the Remote Control panel while held, or toggles PTT on/off in Hold Mode. Primary path for SSB push-to-talk when operating from the Remote Control window.
Escape Waterfall or Remote Control Stops the current transmission immediately — cancels voice playback or sends a CW stop to the Keyer.
ℹ️ Space bar routing priority
When Space is pressed while the Waterfall has focus, OpenShack first checks whether the Remote Control window is open. If it is, PTT is sent there. If not, PTT is forwarded to the Keyer Voice tab. This ensures the most natural behaviour when both windows are open during a remote SSB session.

PTT for the Voice Keyer

The Voice Keyer no longer has its own PTT-path toggle. Voice and digital playback key the radio through the same path chosen on the host under Hardware PTT for Audio Modes, so the keyer, live voice and the footswitch always key the radio the same way — and the keyer's tail is held until the audio has drained, so the end of each message is not clipped.

Keyer settings
                tab
Keyer Settings — speed and Command Receiver toggle
DVK voice slots
DVK Voice Slots — record and label up to 10 SSB voice messages

Command Receiver (N1MM+ Integration)

The Command Receiver lets external logging software such as N1MM+ trigger OpenShack voice messages directly from F-key macros — without touching the mouse. During a contest, your logging macros play the correct voice message at the right moment while you focus entirely on the keyboard and keyer.

ℹ️ How it works
A small companion tool — DL2CC-STUDIO-COMMANDRECEIVER.exe — is called by N1MM+ whenever you press a function key. It sends a short UDP message to OpenShack on your local PC (loopback only, no network traffic). OpenShack receives the message and plays the corresponding voice slot — exactly as if you had pressed that F-key inside OpenShack yourself.

Step 1 — Enable the Command Receiver in OpenShack

  1. Open the Keyer form in OpenShack.
  2. Go to the Settings tab.
  3. Switch the Command Receiver (UDP 50444) toggle to ON.
  4. The status line confirms: Command Receiver: enabled (UDP :50444).

This setting is saved automatically. OpenShack will start the listener automatically on next launch as long as the toggle remains on.

Step 2 — Copy the companion tool

The companion executable is included in the OpenShack installation folder at:

Resources\DL2CC-STUDIO-COMMANDRECEIVER\DL2CC-STUDIO-COMMANDRECEIVER.exe

Copy DL2CC-STUDIO-COMMANDRECEIVER.exe to a permanent location that N1MM+ can reach — for example:

C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe
⚠️ Keep the path simple
Avoid spaces in the path. If you must use a path with spaces, wrap it in double quotes in the N1MM+ macro (see below).

Step 3 — Configure N1MM+ function key macros

In N1MM+, open Config → Config Ports, Mode Control, Winkey, etc. and select the Function Keys tab, or open the Function Key Messages editor directly. For each F-key that should trigger a voice message, add a macro using the {RUNPROGRAM} tag:

N1MM+ Macro OpenShack Action
{RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe VOICE 1} Play voice message F1
{RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe VOICE 2} Play voice message F2
{RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe VOICE 3} Play voice message F3
… up to …
{RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe VOICE 10} Play voice message F10
{RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe STOP} Stop current playback

A typical N1MM+ F-key entry looks like this — you can mix the {RUNPROGRAM …} tag with normal CW message text in the same macro:

5NN {RUNPROGRAM C:\N1MM+\DL2CC-STUDIO-COMMANDRECEIVER.exe VOICE 1}

Voice message slots

Record your voice messages inside OpenShack on the Voice tab of the Keyer form. Enable Record Mode, then press any F-key button (F1–F10) to record a message for that slot. The same slots map directly to the VOICE 1VOICE 10 commands sent by N1MM+.

Give each slot a short label in the Name field (e.g. CQ, 5NN, TU) so you can identify them at a glance during a contest.

PTT during voice playback

When a voice message is triggered by the Command Receiver, OpenShack follows the same PTT logic as when you press the button manually:

  • If a OpenShack Box is connected, PTT is asserted via the box before playback and released when the file finishes.
  • If rigctld PTT is enabled on the Settings tab, PTT goes through the rigctld channel instead.
  • A safety timeout of 60 seconds prevents transmitter lock-up if something goes wrong.

Troubleshooting

Symptom Check
Nothing happens when the macro fires Verify the Command Receiver toggle is ON in OpenShack → Keyer → Settings. Check the OpenShack log panel for a CMD: VOICE N entry.
“Voice message Fn not found” No WAV file has been recorded for that slot yet. Use Record Mode in OpenShack to record it.
N1MM+ shows an error running the program Verify the path to DL2CC-STUDIO-COMMANDRECEIVER.exe is correct and the file exists.
Voice plays but no PTT Ensure the OpenShack Box is connected (local or remote) or that rigctld PTT is configured in the Settings tab.

For more detail when something doesn't work, see the Log tab further down this page — its Debug view shows the verbose internal log including every Command Receiver event.

Operate CW Without a Box

You don't need an OpenShack Box at your remote location to work CW. When the client PC has no Box, your contest logger keys the remote rig through the software Winkey Emulator, and OpenShack plays a local PC sidetone so you can hear what you are sending without waiting for the audio to travel back from the host.

ℹ️ Box vs. no Box
With an OpenShack Box at the client you key from a paddle or straight key and hear the Box's own hardware sidetone — see CW Keying & PTT. Without a Box you key from your logger (Winkey) and hear the PC sidetone described here. The mode switches automatically depending on whether a Box is detected at the client.

Keying from your logger

Any contest logger that speaks the Winkey protocol (N1MM+, Win-Test, …) keys the remote rig through the Winkey Emulator. The emulator runs a software WinKeyer engine on the client, turns your logger's characters into precise keying edges, and sends them over the protected remote connection to the host's Box, which keys the radio. You set it up once on the Settings → Client tab — full details, including the virtual COM port, are under Winkey Emulator — no box at client.

PC sidetone for Winkey + Keyer

Without a Box there is no hardware sidetone, and the audio coming back from the host trails the link by the jitter buffer plus network latency — far too late to work with. OpenShack therefore generates a local sidetone on the client PC the instant you key, so your sending feels immediate. The same sidetone is used for the Winkey Emulator and for CW macros played from the built-in CW Keyer.

The control sits at the bottom of the Local monitor card on the client's Audio tab (shown under Local Monitor):

ControlWhat it doesDefault
PC sidetone for WinKey + KeyerTurns the local PC sidetone on or off. Switch it off if you would rather monitor by ear from the rig audio alone, or if a Box already provides the sidetone.On
Volume sliderSidetone level, 0–100 %. Kept low by default so the tone sits comfortably under the received audio. The slider takes effect immediately, even while you are sending.20 %
ℹ️ Which device plays the sidetone
The PC sidetone plays on the same Monitor device chosen at the top of the Local monitor card. Pick the speakers or headphones you want to hear CW on there; if no monitor device is set, the sidetone falls back to your system default output. See Local Monitor.

The switch, volume and device are saved in your client settings and restored on the next connect.

Winkey Emulator & Winkey Proxy

OpenShack provides a Winkey-compatible virtual COM port so any contest logger that speaks the Winkey protocol can key CW during a remote session. The mode — Proxy or Emulator — is chosen automatically based on whether an OpenShack Box is connected; you only need to enable the feature and pick a COM port.

ℹ️ Virtual COM port required
Both modes expose Winkey through a virtual COM port pair. With the bundled com0com setup, select the DL2CC side in OpenShack (normally COM25) and the external side in your logger (normally COM26). Use virtual-com-ports.txt if setup assigned different ports.

Setup

  1. During setup, select the com0com virtual COM port option, or rerun setup and add it later.
  2. In OpenShack, open Operate → Remote Station and select the Client role.
  3. Go to the Settings → Client tab and scroll to the Winkey Proxy card.
  4. Select the DL2CC side of the Winkey pair (normally COM25) from the dropdown, then tick Enable Winkey. On a new install this is already done for you — the port is pre-selected and Winkey is enabled; just confirm it.
  5. In your logging software, set its Winkey port to the external side (normally COM26). In N1MM+ this is under Config → Config Ports, Mode Control, Winkey, etc.

OpenShack detects whether a Box is connected and activates the appropriate mode automatically. The two modes are mutually exclusive — enabling one stops the other.

⚠️ Client role only
The Winkey settings are only visible when the Client role is selected. The Host has direct hardware access to the OpenShack Box and does not need a virtual Winkey port.

Winkey Proxy — Box connected via USB

When an OpenShack Box is connected via USB serial, OpenShack takes over that serial port to run the full DL2CC protocol at 115200 baud. Your logger can no longer use that port directly for Winkey. The Winkey Proxy solves this: it listens on the virtual COM port, translates Winkey binary to DL2CC commands, and forwards them to the Box — so your logger gets Winkey, and OpenShack keeps full control of all other Box features (sidetone, PTT, macros, remote CW transport).

ℹ️ Recommended: USB plus Winkey Proxy
With the bundled com0com ports there is usually no reason to move the Box to WiFi just to keep Winkey available. Leave the Box on USB, select COM25 in OpenShack, set the logger's Winkey port to COM26, and enable Winkey. WiFi remains useful when a USB cable to the client PC is impractical, but it is no longer needed for parallel logger Winkey operation.
Logger (raw Winkey binary @ 1200 baud 8N2) │ ▼ com0com external side (normally COM26) │ ▼ com0com DL2CC side (normally COM25) │ ▼ OpenShack Winkey Proxy (translates → DL2CC protocol) │ ▼ OpenShack Box (USB serial 115200 baud) │ Winkey engine → key the rig │ status bytes back to the logger ▼ Logger (receives Winkey status bytes)

Winkey Emulator — no box at client

When operating remotely without an OpenShack Box at the client location, the Winkey Emulator provides a software Winkey device at the same virtual COM port. Your logger connects as usual, and the emulator translates Winkey commands into remote CW keying. The host's OpenShack Box then physically keys the rig.

Logger (raw Winkey binary @ 1200 baud 8N2) │ ▼ com0com external side (normally COM26) │ ▼ com0com DL2CC side (normally COM25) │ ▼ OpenShack Winkey Emulator (software WinKeyer engine) │ ▼ Protected remote connection (CW keying → remote host) │ ▼ OpenShack Box at host (keys the rig)

Status Monitoring

The Status tab in Remote Connect shows the current state:

Status Meaning
Stopped Feature is disabled or the CW service is not yet connected.
Waiting Virtual COM port is open; waiting for the logger to connect.
Active The logger is connected and sending Winkey data.

The status panel also shows byte counters (bytes received from the logger and responses sent back) so you can verify data is flowing in both directions.

Audio Decoder

OpenShack includes a software CW decoder that can receive audio directly from the Remote Station audio stream or from any Soundcard audio stream which exists on your PC (when opened standalone in the main menu). When the remote station connection is active, enable use remote audio in the Audio Decoder and it will automatically feed from the incoming remote audio — no additional cables or sound card routing required.

Audio Decoder
Audio Decoder — FFT spectrum display with adaptive CW signal detection

How the Decoder Works

The decoder performs a 4096-point FFT on every 10 ms audio window and analyses the spectrum around the selected centre frequency. It measures the signal-to-noise ratio (SNR) and applies hysteresis thresholds to classify each window as signal-on or signal-off, building a sequence of timing elements that are then decoded by the same engine used for hardware input.

Control Description
Spectrum display Real-time FFT view up to 1200 Hz. Click anywhere on the spectrum to lock the decoder to that frequency.
Frequency filter Narrow the detection window to reject QRM on adjacent frequencies.
WPM range Min and max WPM filter — elements outside this range are ignored. Prevents false triggers from non-CW audio.
Adaptive noise floor The baseline SNR reference adjusts automatically to the current band noise level.
Remote audio mode Feeds directly from the incoming remote audio. Enable this when connected to a remote station.

Using the Audio Decoder with SDR / WebSDR

  1. In Windows Sound settings, enable Stereo Mix or use the bundled VB-Audio VB-CABLE to route your SDR output to a recording device.
  2. In the Audio Decoder, select that device as the input source.
  3. The decoder picks up and decodes any CW present in the audio stream.

Waterfall Display

For compatible transceivers OpenShack can display a live spectrum waterfall directly inside the application. Three vendor families are supported today: ICOM (CI-V scope stream over USB or LAN), Kenwood TS-890S / TS-990S (KNS scope stream over LAN), and FlexRadio 6000-, 8000- and Aurora AU-series (SmartSDR API over LAN — TCP control plus a VITA-49 UDP panadapter stream).

Waterfall display
Waterfall Display — live spectrum with click-to-QSY

Features

  • Live spectrum display — see the band activity in real time, just like on the rig's own screen.
  • Click to QSY — click anywhere on the waterfall to immediately tune the remote radio to that frequency via the active CAT or rigctld service.
  • DX Cluster spot overlay — when the DX Cluster window is open, live spots are drawn directly on the spectrum as labeled markers. Click any marker to QSY instantly. See DX Cluster Spot Overlay below.
  • ICOM scope Mode & Edge dropdowns — for ICOM rigs only, switch the scope display mode (Center / Fixed / Scroll-C / Scroll-F) and the fixed-mode edge straight from the waterfall toolbar. See Host — ICOM.

Setup

Waterfall configuration is a host-only setting. Once the host has configured the rig connection, any client that connects will automatically be able to open the waterfall window — no additional configuration required on the client side.

The Host settings page contains three waterfall cards — ICOM Waterfall, Kenwood Waterfall and FlexRadio Waterfall — and they are mutually exclusive: only one vendor can be announced at a time. Enabling one automatically disables the others.

Host — ICOM

  1. Connect the ICOM transceiver to the host PC via USB or Ethernet (depending on model).
  2. Ensure the rig's CI-V LAN or USB interface is enabled in the rig's menu.
  3. In the Remote Station window, open Settings → Host and scroll to the ICOM Waterfall card.
  4. Tick ICOM Waterfall Support, select the correct ICOM Model, and enter the rig's CI-V Address.
  5. The waterfall becomes available to all connected clients automatically once the session is active.
💡 Automatic power-on

With ICOM Waterfall Support ticked, the host sends a CI-V power-on command to the radio automatically whenever it opens the CAT connection. A modern ICOM left in standby therefore switches itself on — you don't have to be at the radio or open the waterfall window. This works over the USB CI-V connection (modern ICOMs keep USB alive in standby); a radio that is fully off on its network port can't be woken this way. Sending it to a radio that is already on does no harm.

🎛️ ICOM scope Mode & Edge dropdowns

For ICOM rigs the Waterfall window has two extra dropdowns in the top toolbar, next to the frequency display. They appear only for ICOM — Kenwood and FlexRadio scopes don't have them — because they drive the radio's own CI-V scope:

  • Mode — switch the scope between Center, Fixed, Scroll-C and Scroll-F. The dropdown always shows the scope's current mode, so you can put it back into the mode you want — particularly handy on a remote rig where you can't reach the radio's own screen.
  • Edge — pick which of the radio's stored fixed edges (Edge 1–4, fewer on some models) the scope shows. It is active only in Fixed and Scroll-F mode (greyed out otherwise) and simply points the radio at one of its saved edges — it does not change the edge frequencies themselves.

Both dropdowns work the same whether you are at the host or operating remotely.

Host — Kenwood TS-890S / TS-990S

The Kenwood adapter uses the KNS (Kenwood Network Service) interface built into the radio. KNS carries both rig control and the scope stream over a single TCP connection, so no extra serial cabling is needed for the waterfall itself.

  1. On the radio, enable KNS and create an admin-level KNS account (the radio's menu calls these User Profiles). Note the account name and password.
  2. Make sure the radio is reachable on your LAN — the host PC must be able to open a TCP connection to the radio. Default KNS port is 60000.
  3. In the Remote Station window, open Settings → Host and scroll to the Kenwood Waterfall card.
  4. Tick Kenwood Waterfall Support, select the Model (TS-890S or TS-990S), and enter the radio's IP address, the KNS port, and the account / password you configured on the radio.
  5. The host runs the KNS session as a background service. It starts as soon as you click Connect and is torn down cleanly on disconnect or when you change any of the Kenwood waterfall settings.
🔒 KNS credentials stay on the host
The Kenwood IP, port, account and password are host-only settings — they are persisted locally and are never sent to the remote client. The client only receives the decoded scope frames.

Host — FlexRadio (6000-, 8000- and Aurora AU-series)

The FlexRadio adapter uses the SmartSDR API built into the radio. SmartSDR is a multi-client network protocol — DTM connects directly to the radio on the LAN and creates its own panadapter, so it coexists peacefully with the SmartSDR client (or any other SmartSDR-aware software) running at the same time.

  1. Make sure the Flex is reachable on your LAN — the host PC must be able to open a TCP connection to the radio. Default SmartSDR port is 4992.
  2. The radio's SmartSDR API does not require login on the LAN, so there are no credentials to enter.
  3. In the Remote Station window, open Settings → Host and scroll to the FlexRadio Waterfall card.
  4. Tick FlexRadio Waterfall Support, select the Model (any FLEX-6xxx, FLEX-8xxx, or Aurora AU-series — they all share the same SmartSDR API, so the dropdown is for display only), enter the radio's Host IP and the Port (default 4992).
  5. The host runs the SmartSDR session as a background service. It starts as soon as you click Connect and is torn down cleanly on disconnect — the panadapter is removed from the radio so no slot is left dangling.
🛠️ Panadapter bandwidth
The default panadapter bandwidth is 25 kHz — a deliberately narrow span for remote operation, because a wider pan sends substantially more display data on every refresh. The Waterfall window has a bandwidth dropdown (top toolbar, between the frequency display and the Power button) that lets you retune the pan live from 14 kHz up to 2 MHz without restarting anything — the radio's panadapter is reconfigured in place. Your selection is remembered across sessions. The dropdown only appears for FlexRadio; the Icom and Kenwood scope widths are picked from the radio's own menus.
🔒 Flex address stays on the host
The Flex IP and port are host-only settings — they are persisted locally and are never sent to the remote client. The client only receives the decoded scope frames over the protected remote connection.

Client

No setup needed. Connect to the host as normal and open Operate → Waterfall from the Remote Station window. The waterfall stream is provided automatically by the host, regardless of which vendor adapter the host is running.

✅ Recommended ICOM wiring — use both USB COM ports

Modern ICOM transceivers (IC-7300, IC-7610, IC-7760, IC-9700, IC-705 and similar) expose two independent USB serial ports. OpenShack is happiest when you use both:

  • Bind one port to OpenShack's rigctld service — that's what Remote Control, the rigctld proxy, the TRX Emulator, and any external logger talking through rigctld will use.
  • Use the other port for direct CAT — this is the channel OpenShack needs to drive the waterfall, including click-to-QSY and the spectrum stream itself.

Splitting the two avoids contention on a single port and keeps both the logger workflow and the waterfall responsive at the same time.

ℹ️ Supported brands — ICOM, Kenwood and FlexRadio, more to follow
The waterfall feature currently supports ICOM transceivers with a CI-V scope stream (IC-7300, IC-7610, IC-7760, IC-9700, IC-705 and similar), the Kenwood TS-890S / TS-990S over KNS, and FlexRadio's SmartSDR-compatible lines — the 6000-series (FLEX-6300 / 6400 / 6500 / 6600 / 6700 and M variants), the 8000-series (FLEX-8400 / 8600 and M variants) and the Aurora AU-series (AU-510 / AU-520 and M variants). The older PowerSDR-based FlexRadios (FLEX-1500 / 3000 / 5000) use a different protocol and are not supported. Support for further brands is planned.

DX Cluster Spot Overlay

When the DX Cluster window is open and receiving spots, those spots are drawn as live markers directly on the spectrum. Each marker shows the callsign and a colored frequency tick at the exact spot frequency. No setup is required — the overlay activates automatically whenever both windows are open at the same time.

  • Show all vs. filtered — the Spots button in the waterfall toolbar switches the overlay between two modes. Spots: All draws every spot received from the cluster, independent of the column, band, mode, and age filters set in the DX Cluster window. Spots: Filtered mirrors the DX Cluster list, so only spots passing those filters appear. Switching the button refills the overlay immediately — backfilling the extra spots or dropping them — and your choice is remembered between sessions.
  • Click to QSY — click anywhere on a spot's label — first letter to last — and the radio tunes straight to that spot's exact frequency, via the active CAT or rigctld service. Clicking open spectrum away from any label still tunes to the point under the cursor.
  • Cursor change — as the mouse pointer enters a spot label, the crosshair cursor changes to a hand pointer to indicate a clickable target.
  • Hover tooltip — hovering over a label shows a tooltip with the full spot detail: callsign, frequency, date & time, spotter, and comment.
  • Last seen (age expiry) — the Seen: button next to Spots sets how old a spot may be before it is removed from the overlay. Click it to cycle through Off, 5, 15, 30, and 60 minutes. This is the waterfall's own age limit and applies in both Spots: All and Spots: Filtered modes, independent of the Max Age set in the DX Cluster window; your choice is remembered between sessions. With Seen: Off the waterfall applies no age limit of its own — in Spots: Filtered mode the cluster still pre-filters spots, so the overlay never shows more than the DX Cluster list, while in Spots: All mode the overlay keeps every received spot.
  • Band deduplication — if the same callsign is re-spotted on the same band, the earlier spot is replaced by the new one. Spots for the same callsign on different bands coexist independently.
  • Staggered labels — labels that would overlap on adjacent frequencies are placed in offset tiers so no callsign obscures another.
  • Edge clamping — when a spot falls near the left or right edge of the display, the callsign label is shifted inward so it remains fully readable, while the frequency tick stays at its exact spectral position.

DX Cluster

OpenShack includes a built-in Telnet DX Cluster client. During remote operation, open it from Operate → DX Cluster alongside the Remote Station window. Both windows can be open simultaneously with no interference.

DX Cluster window
DX Cluster window — live spots with click-to-QSY to the remote radio

Connecting to a Cluster

  1. Open Operate → DX Cluster from the dashboard.
  2. On first use, open the Settings tab and enter your callsign. If you skip this step and click Connect without a callsign, OpenShack will take you there automatically.
  3. Select a server from the drop-down list at the top of the window. OpenShack comes with a built-in list of well-known cluster nodes (DB0BCC, OH8X, GB7DXC, K0XM, VE7CC, VK2IO).
  4. Click Connect. OpenShack logs in automatically using your callsign.
  5. DX spots should appear soon.

Filtering Spots

Filters are available in both the Spots tab (quick, live) and the Settings tab (persistent).

Spots tab — live filters

  • Band filter — when checked, only spots on the same amateur band as the current rig VFO are shown (e.g. with the rig on 14.025 MHz, only 20 m spots remain visible; 40 m or 15 m spots are hidden). The current rig frequency is displayed in the label next to the checkboxes. When the rig frequency is unknown (no rig connected), the filter has no effect.
  • Mode range filter — tightens the band filter to the specific sub-range (CW, Digital, or SSB window) the rig is currently tuned to, based on the IARU Region 1 band plan. With the rig on 14.025 MHz (CW window), SSB spots at 14.250 MHz are hidden even though both are on 20 m. Can be combined with the Band filter or used on its own.
  • Column filter input fields — the four text boxes directly above the spot list (Filter Freq, Filter DX Call, Filter Spotter, Filter Comment) act on the column below them. Each one is a case-insensitive substring match by default — typing EA in the DX Call box keeps every spot whose call contains EA (so EA1ABC, K1EA, and W3EAX all stay visible). Wildcards * (any characters) and ? (single character) are supported and switch the field to glob matching against the whole value: EA* matches only calls starting with EA; ??1* matches any two-character prefix followed by a 1. The four boxes are AND-combined — a spot must pass every non-empty field. Clearing a box (or clearing all of them) restores the unfiltered list. Changes apply with a short ~300 ms debounce. These fields are not persisted across restarts.

Sorting the spot list

Click any column header (Freq, DX Call, Spotter, Comment, Time) to sort the list by that column. Click the same header again to toggle between ascending and descending order. The QSY column is not sortable. The chosen column and direction are saved automatically and restored the next time you open the DX Cluster window — so if you prefer the list sorted by frequency, you only need to set it once.

Settings tab — persistent filters

DX Cluster Settings tab
DX Cluster — Settings tab with continent and skimmer filters

The Settings tab also lets you manage the server list. To add your own cluster server, fill in the Name, Host, and Port fields and click Add. Your server then appears in the list and in the drop-down on the Spots tab. The built-in servers cannot be deleted — only servers you add yourself can be removed.

  • Spotter continent — select one or more continents (AF, AN, AS, EU, NA, OC, SA). OpenShack sends an accept/spots by_cont command to the cluster node after each login. Leaving all boxes unchecked restores all continents.
  • Include skimmer spots — sends set/skimmer to the node so RBN/Skimmer spots are included in the stream. Unchecking sends unset/skimmer.
  • Skimmer only — pre-fills the spotter filter field with -# so that only skimmer-sourced callsigns (those ending in -#) are displayed. This also enables skimmer spots automatically.
  • Max age — spots older than the chosen number of minutes are hidden. The age check runs every ~15 s, so expired spots are pruned in the background as well as on every new spot.
ℹ️ Band plan file
The mode range filter relies on a band plan stored in the local data folder:
%LOCALAPPDATA%\DL2CC-STUDIO\Cluster\BandPlan.json
OpenShack writes the built-in IARU Region 1 plan on first run. You can edit the file with any text editor to add your own sub-ranges or adjust existing ones. Each entry has four fields:
{
  "lowKHz":  14000,
  "highKHz": 14070,
  "bandName": "20m",
  "mode":    "CW"
}
Entries may overlap — for example, the 6 m SSB and Digital windows share part of the same frequency range. If the file is missing or cannot be parsed, OpenShack restores the defaults and rewrites the file automatically.

Click to QSY

Clicking any spot in the DX Cluster list sends a QSY command to the remote radio through whichever rig control service is currently active (CAT or rigctld proxy). The radio tunes to the spotted frequency instantly, without touching a dial.

Antenna Rotator Control

When the host has a rotator controller running PSTROTATORAZ, the client can see the live antenna heading on a compass rose and steer the antenna by clicking the desired bearing — all over the existing protected remote connection, with no extra network configuration required. The host can offer up to four rotators, each with its own name; they open from the Aux Devices button.

OpenShack does not talk to your rotor hardware directly. Instead it interfaces with PSTROTATORAZ on the host over local UDP, and PSTROTATORAZ does the actual driving. That single design choice means OpenShack supports every rotator and rotator-controller PSTROTATORAZ supports — which, in practice, is everything on the market.

Rotator compass window
Rotator Control window — live compass rose with click-to-steer

Host Setup

ℹ️ PSTROTATORAZ — required third-party tool
OpenShack's rotator control talks to PSTROTATORAZ by YO3DMU — a one-time €39 purchase from qsl.net/yo3dmu/index_Page346.htm. It drives essentially every rotator and rotator-controller on the market and is well worth it. (No affiliation.)
  1. Start PSTROTATORAZ on the host machine and configure it for your rotator hardware.
  2. In PSTROTATORAZ, open Communication → UDP Control Setup and configure it:
    • Set IP to 127.0.0.1.
    • Leave the port at the default 12000.
    • Tick Automatically positions reporting when the rotor is moving, so PSTROTATORAZ pushes azimuth updates to OpenShack while the antenna turns.
  3. Then tick Setup → UDP Control to actually switch the UDP interface on. The setup dialog above only configures the parameters — this menu item is the on/off toggle. Without it, PSTROTATORAZ stays silent on the network and OpenShack can neither send steer commands nor read the azimuth.
  4. In Remote Connect → Settings → Host, scroll to the Rotators section and tick a Rotator 1–4 row to turn it on.
  5. Set the IP address and UDP port to match the values configured in PSTROTATORAZ (default: 127.0.0.1 : 12000). OpenShack sends commands to this port and listens for azimuth updates on port + 1 (e.g. 12001). Optionally type a Name — the client shows it as Rotator: <name>.
  6. Have more than one rotator? Run a separate PSTROTATORAZ instance per rotator on its own UDP port, then fill in a second, third or fourth row the same way. Each rotator needs a different port.
ℹ️ Rotator settings are host-only
The rotator enable checkboxes, PSTROTATORAZ IP, port, and name are automatically greyed out when the instance is set to Client mode — they only apply on the machine directly connected to the rotator controller.

Client Usage

  1. Once connected to the host, open a rotator from the Aux Devices button — rotators now appear there alongside your amplifiers, tuners and switches (there is no separate Rotator button). If more than one device is available, a small menu lists them; pick the one titled Rotator: <name>.
  2. The compass needle updates in real time as the antenna turns. PSTROTATORAZ pushes azimuth readings continuously during rotation; when the antenna is stationary the display is refreshed every 5 seconds from a keep-alive poll.
  3. To steer, click anywhere on the compass rose or type a bearing and press GO. The bearing is sent to the host, which forwards it to PSTROTATORAZ as a steer command.
⚠️ Safety reminder
Clicking the compass immediately sends a steer command to the physical rotator. Make sure there are no obstructions and that you have line-of-sight awareness before steering remotely.

Connection Flow

Radio site PSTROTATORAZ → current antenna heading ══ protected remote connection ══ Operator compass → selected bearing ══ protected remote connection ══ PSTROTATORAZ → rotator hardware

Aux Devices — Amplifier & Tuner Control

OpenShack can monitor and control external amplifiers and tuners connected to the host station via serial port or network. Live status (power, SWR, band, temperature, faults) is pushed to the client in real time, and the client can send commands (Operate, Standby, Tune, Antenna select) back to the host.
As OpenShack can handled different devices, the user interface might look simple for individual devices, but functional. And that's what we need.
Your device is not supported?

Let the author know, make a post to request the feature in our discourse forum. Include links to documents, ideally there already is a programmers reference documentation for the device that you seek to be implemented.
We can't promise it will be implemented, that really depends on how easy it is and whether there are more people out there wanting the same thing.

Supported devices

Device Type Protocol Status
SPE Expert (1K-FA, 1.3K-FA, 2K-FA) Amplifier + built-in Tuner Binary (SYN 0xAA framing, 115 200 baud) ✅ Supported
Elecraft KPA500 Amplifier ASCII serial
✅ Supported
Elecraft KAT500 Tuner ASCII serial
✅ Supported
Elecraft KPA1500 Amplifier + built-in Tuner ASCII serial (^CMD; framing, 38 400 baud) ✅ Supported
RF Concepts / Alpha RF-2Ks Amplifier + built-in Tuner
Network HTTP
✅ Supported
Juma PA600/PA1000 Amplifier Binary serial
✅ Supported
OM Power (OM2000A+, OM1700A+, OM2501A, OM3501A, OM4001A, OM4001C) Amplifier (up to 4 at once) Network (built-in LAN port) ✅ Supported
Ultrabeam Antennas
Antenna
Binary serial ✅ Supported
SteppIR SDA 100 / SDA 2000
Antenna controller
ASCII serial (Reference Protocol, default 9600 baud) ✅ Supported
URL Switcher (hamparts.shop / qro.cz remote relays)
Switch / Relay
HTTP GET (JSON {"Status":"OK"} response) ✅ Supported
Shutdown Host PC
Remote power-off (no hardware)
Windows shutdown, with abort window ✅ Supported
💡 Power ON/OFF
The Power ON/OFF buttons are disabled for most devices because these devices cannot be powered on or off via serial command — they require a hardware switching mechanism (e.g. a relay on the rear-panel remote jack). Refer to the respective manual for instructions on remote power switching.
⚡ Automatic power-on — Elecraft KPA500 / KPA1500
The Elecraft amplifiers are the exception: they switch on automatically as soon as OpenShack connects to them. If the rear-panel power switch is left ON but the amplifier is in standby (front-panel off), the host wakes the unit and powers it on the moment the serial port opens — and again on every reconnect. You don't have to be at the amplifier to turn it on before a remote session; just leave the rear-panel switch on and the rest happens by itself. If the amp is already running, the command is ignored, so there's no harm.
⚡ Remote power on/off — OM Power
OM Power amplifiers can be switched on and off from the client, too. Leave the amplifier's mains switch on; the network interface then stays reachable even while the amplifier itself is off. Power On starts the tube heat-up — a countdown of about three minutes that you can follow live in the amplifier window — and Power Off runs the cool-down before the amplifier actually switches off. Operate/Standby, antenna selection and a fault reset are available as well, and during transmit the window shows live output power, SWR and anode current straight from the amplifier.

Host Setup

  1. Open Remote Station settings on the host.
  2. Scroll to the Aux Devices section (tab 3).
  3. Tick Enable for the amplifier and/or tuner slot you want to use.
  4. Select the device type from the dropdown.
  5. Choose the COM port and verify the baud rate (auto-filled for known devices).
  6. Click Connect. OpenShack opens the serial port and starts polling the device at ~1 Hz.
Aux Devices host settings
Host settings — Aux Devices serial port configuration

While OpenShack is using a device's serial port on the host, that device's own program (for example the Ultrabeam or SPE Expert software) cannot open the same port at the same time. So that you don't lose access to it, the host now shows the same Aux Devices windows locally. They open automatically as soon as the device has been read — the same way they do on the remote client — so you do not need a client connected. A window you close yourself stays closed — and it stays closed the next time you start up too, not just for the current session. Use the Aux Devices button on the host's Remote Station window to reopen it (or to bring an open window to the front); once you reopen it, it goes back to opening automatically. Each window's position and size are remembered, per screen layout.

Client Display

Once connected, the client automatically receives live device status. The Aux Devices window shows the appropriate tab for the detected device combination.

You don't have to open this window yourself: as soon as the station announces an aux device, the Aux Devices window opens on its own. If the station offers several devices, each one gets its own window. Don't need one? Just close it — it stays closed from then on, including the next time you connect, so it won't keep popping back up. To bring a closed window back, click the Aux Devices button in the Remote Station window's button row (next to Remote Control, Keyer and DX Cluster); when the station offers more than one device, a short menu lets you pick which one to open. Once you reopen a window this way, it goes back to opening automatically again. Each window's position and size are remembered, per screen layout, so they come back where you left them.

Only the relevant tab is shown — unused tabs are hidden automatically. The active operating state is highlighted on the Operate/Standby buttons: the currently active mode appears with a filled (blue) button while the other is outlined (light).

The following screenshots are examples of two specific integrations to give you an idea of what the Aux Devices window looks like for different device types. The actual layout adapts automatically to the connected device.

Example: SPE Expert — Amplifier & Tuner

This screenshot shows the integration of an SPE Expert amplifier with built-in tuner. The upper amplifier card displays power output, SWR, band, heatsink temperature, power level (L/M/H), and the current RX/TX state together with the active input channel. The Operate, Standby, Input (toggles between input 1 and 2) and Power buttons are available directly. The lower tuner card shows the tuner SWR, active antenna, bypass and tuning state, and provides Tune and Ant Next buttons.

SPE
              Expert amplifier and tuner control — example integration
Example: SPE Expert — amplifier card with RX/TX indicator, input channel, and power level; tuner card below

Ultrabeam — RCU-06 Antenna Controller

OpenShack talks to the Ultrabeam RCU-06 controller over its native binary protocol (STX/ETX framing with DLE escaping and an XOR-plus-one checksum). The host opens the controller's serial port and continuously polls the device at about 1 Hz for frequency, band, orientation, motor state and progress; the client UI mirrors that state live and can send frequency, orientation and retract commands back to the controller.

  1. Connect the RCU-06 to the host PC via its USB / serial port. The controller's USB interface presents itself as a standard COM port — no extra driver beyond the manufacturer's USB-serial driver is needed.
  2. In the Remote Station window, open Settings → Host and scroll to the Aux Devices section.
  3. Tick the Ultrabeam checkbox and pick the COM port the controller is connected to. The baud rate is fixed at 19200, 8N1, no hardware handshaking — OpenShack sets this automatically and explicitly disables DTR and RTS, as required by the controller.
  4. Click Connect. The host immediately starts polling and reports the supported bands to the client. If the controller is powered off or sleeping, OpenShack still announces the device so the client can show the Ultrabeam tab — status fields stay empty until the controller answers.

Supported bands on the client band panel (fixed by the RCU-06 firmware):

Bands Orientations Retract
40, 30, 20, 17, 15, 12, 10, 6 Normal / 180° / Bidirectional Dedicated command (parks elements at home)

The client side reuses the standard antenna-controller panel: a status card with current frequency, band, orientation and motor state (including a live progress indicator while the elements are moving), a row of direction buttons (Normal, 180°, Bidirectional, Retract), and the shared band panel for direct frequency steering. Unlike SteppIR, Retract on the Ultrabeam is a dedicated controller command — it parks all elements at the home position without the host having to send a fake frequency of 0.

When motors are moving, the host additionally polls the controller's progress endpoint and forwards the current and total motor travel to the client, so the UI can show how far the tuning has progressed. As soon as the motors stop, the progress indicator disappears.

Ultrabeam antenna controller — example integration
Ultrabeam — live orientation and motor status with frequency steering band panel

SteppIR — SDA 100 / SDA 2000 Antenna Controller

OpenShack talks to the SteppIR SDA 100 and SDA 2000 controllers over their published Reference Protocol (the same wire format used by N1MM, DXLab Commander, HRD and similar rig-control software). The host opens the COM port that is connected to the controller and forwards element-tune and orientation commands; the client UI looks and feels exactly like the Ultrabeam panel.

  1. Connect the SteppIR controller to the host PC via its serial port (USB-to-serial works fine). Default baud rate is 9600; 1200 / 2400 / 4800 / 19200 are also supported if you have changed it on the controller.
  2. In the Remote Station window, open Settings → Host and scroll to the Aux Devices section.
  3. Tick the SteppIR checkbox, pick the COM port the controller is connected to, and choose the matching antenna model from the dropdown next to it.
  4. Click Connect. The supported bands reported to the client are derived automatically from the selected model.

Supported models and the bands they enable on the client band panel:

Model Supported bands Orientation
BigIR80, 40, 30, 20, 17, 15, 12, 10, 6Normal only (vertical)
SmallIR40, 30, 20, 17, 15, 12, 10, 6Normal only (vertical)
DB1820, 17, 15, 12, 10, 6Normal / 180° / Bidirectional
DB3630, 20, 17, 15, 12, 10, 6Normal / 180° / Bidirectional
MonstIR40, 30, 20, 17, 15, 12, 10, 6Normal / 180° / Bidirectional
UrbanBeam20, 17, 15, 12, 10, 6Normal / 180° / Bidirectional
Yagi 3-El / Yagi 4-El40, 30, 20, 17, 15, 12, 10, 6Normal / 180° / Bidirectional

The client side reuses the existing antenna-controller panel: a status card with current frequency, band and motor state, a row of direction buttons (Normal, 180°, Bidirectional, Retract; vertical models show only Normal and Retract), and the shared band panel for direct frequency steering. Retract parks the elements at the home position; under the hood OpenShack simply sets the target frequency to 0, since the SteppIR protocol has no dedicated retract command.

URL Switcher — Generic HTTP Relays

The URL Switcher is a generic adapter for HTTP-controlled switches and relays such as the remote relay boxes sold by hamparts.shop (qro.cz). Each button on the client sends a GET request to a URL you configure on the host. The device's JSON response ({"Status":"OK"}) is relayed back to the client and shown as a brief status line that fades after a few seconds.

  1. In the Remote Station window, open Settings → Host and scroll to the URL Switcher card at the bottom of the host settings tab. Tick the URL Switcher checkbox to enable the adapter.
  2. Optionally change the device Name (e.g. QRO Switch) — it appears in the client window title.
  3. For each of the ten rows, enter a short Label (shown on the client button) and the full URL the host should call.
  4. Use the three checkboxes on each row to control what the row does:
    • Show — when ticked (the default), the row appears as a button on the client (as long as it has a Label). Untick it to hide the row from the client while still using it for automatic on/off switching below.
    • On — the URL is called once, automatically, when you open the Remote Station window. Use this to switch equipment on when you sit down to operate.
    • Off — the URL is called once, automatically, when you close the Remote Station window (or exit the app). Use this to switch equipment off when you are done.
    On/Off are tied to opening and closing the Remote Station window — not to connecting and disconnecting. While the window stays open you can connect to and disconnect from the host as often as you like (including dropped connections that reconnect) and the equipment is left alone; it is switched off only when you actually close the window. (On/Off also do not fire when you change other settings.) The responses go to the debug log only.
  5. For most relays a plain web address in the URL field is all you need. If your relay expects a POST request with a small piece of text (for example the Shelly Cloud service — see the example below), click the small button at the end of the row. A little window opens where you can edit the URL, tick Use POST with a JSON body, and type the body to send. The button is highlighted for any row set up this way. Leave it untouched for ordinary relays — they keep working as a simple web request.
  6. If any row has On ticked and the station is started automatically (via a Startup or Desktop shortcut), the On URL(s) are fired first and then the app waits the Startup delay set on the Advanced tab before it starts talking to your other equipment. This gives a device that was just switched on (for example an amplifier powered through a relay) time to boot up and have its COM port appear, so set that delay to cover your slowest device. When you start the app by hand, the On URL(s) still fire to switch your gear on, but there is no wait.

Sample URL formats used by hamparts.shop / qro.cz controllers (consult your device manual for the exact parameters):

http://192.168.124.59:59/Set0/514
http://192.168.124.59:59/Set1/0
💡 Example: switch a station on and off with a Shelly relay
A Shelly (or any relay with a simple HTTP API) can power your station equipment for you. Put the relay's on URL in one row with On ticked, and its off URL in another row with Off ticked. Untick Show on both if you don't want buttons for them on the client. Typical Shelly URLs:
On  : http://<shelly-ip>/relay/0?turn=on
Off : http://<shelly-ip>/relay/0?turn=off
(Newer Shelly Plus/Pro models use http://<shelly-ip>/rpc/Switch.Set?id=0&on=true / &on=false.) The Shelly must be reachable from the host PC, and switching must not require a password — the URL Switcher sends a plain request with no login. If your relay also powers an amplifier such as a KPA500, set the Startup delay (Advanced tab) to a few seconds so the amplifier is ready before OpenShack connects to it on an automatic start.
💡 Shelly on a network the host can't reach — use the Shelly Cloud
If the Shelly is on a different network and the host PC can't open its local web address, you can switch it through the Shelly Cloud instead. This needs a POST request, so use the button on the row: set the URL to your cloud endpoint and tick Use POST with a JSON body. Get your auth key and server from the Shelly app or control.shelly.cloud (User settings → Authorization cloud key), and the device id from each device's information page.
URL  : https://<server>.shelly.cloud/v2/devices/api/set/switch?auth_key=<KEY>
Body : {"id":"<deviceid>","channel":0,"on":false}
⚠️ When the relay powers the host PC itself
If one of your relays is the power switch for the host PC, do not simply put its off URL on an Off row — that cuts the PC's power the instant the app closes, like pulling the plug mid-shutdown. Instead:
  • Let the PC shut down Windows properly with the Shutdown Host PC device (next section).
  • For the relay feeding the PC, send a delayed off so power is cut only after Windows has finished. A Shelly can do this itself: tell it to turn on now and switch off again 60 seconds later. Put this on an Off row (via the button, as POST):
    {"id":"<deviceid>","channel":0,"on":true,"toggle_after":60}
A delayed off on its own does not shut Windows down — it only postpones the power cut. It is the safety backstop; the Shutdown Host PC device does the graceful shutdown.
URL Switcher host settings — ten rows
Host settings — URL Switcher card with ten rows (Show / On / Off / Label / URL)

The client form shows only the rows that have Show ticked and a Label filled in. After clicking a button, the device's response is displayed briefly below the buttons and fades after a few seconds. Both host and client log every click and every result line to the Remote Station debug log under %LocalAppData%\DL2CC-STUDIO\DEBUG\.

URL Switcher client window with labelled buttons
Client view — only rows with Show ticked and a Label filled in appear, and the latest response fades in under the buttons

Shutdown Host PC — Remote Power-Off

This device lets the remote operator shut the host PC down at the end of a session. It has no hardware — it simply runs a Windows shutdown on the host. Because it is destructive and one-way, it is disabled by default and protected by two safeguards: a confirmation dialog and a countdown you can still abort.

⚠️ One-way action
Once the host powers off, you cannot reconnect to it or turn it back on remotely — it needs Wake-on-LAN, a BIOS auto-power setting, or someone at the shack. Only enable this if that is acceptable for your station.
  1. On the host, open Settings → Host and scroll to the Enable remote PC shutdown checkbox at the bottom of the Aux Devices area. Tick it to offer the control to connected clients.
  2. On the client, open the Aux Devices window. The Shutdown Host PC panel shows a single Shutdown Host PC button.
  3. Click it. A confirmation dialog appears — confirm only if you really want the host to power off.
  4. The button is replaced by an Abort pending shutdown button and a live countdown (“Shutting down in 23 s…”). Click Abort any time before the countdown ends to cancel the shutdown.
Host settings — Enable remote PC shutdown option
Host settings — tick Enable remote PC shutdown to offer the control to clients
Shutdown Host PC client window — idle state with the Shutdown button
Client view (idle) — a single Shutdown Host PC button. Clicking it asks for confirmation first.
Shutdown Host PC client window — pending state with the Abort button and countdown
Client view (counting down) — the button becomes Abort pending shutdown and a live countdown is shown. Click Abort before it reaches zero to cancel.

If a client connects while a shutdown is already counting down, its window opens straight into the Abort state showing the remaining seconds, so the shutdown can still be cancelled from a fresh connection.

Log Tab — Session History & Debug

The Log tab is the last tab in the Remote Station window. It combines two views in one place: a tidy session history (who connected, when, and what note they sent) and a verbose debug log for troubleshooting. A single button at the top right of the tab flips between them.

Session view

Log tab showing the session history table
Session view — one row per remote connection, newest on top. The current connection shows active in the End column until it ends.

Each remote session adds one row to the table the moment the remote operator's callsign arrives. The row stays as active in the End column while the session is live, and gets its End time stamped the instant you click Disconnect (or when the remote side leaves). Columns:

  • Start / End — local date and time, minute precision.
  • Callsign — the callsign the remote operator set as their Operator-ID (Station-ID when hosting).
  • Comment — the optional Note the remote operator entered (free text).

The session history is kept in %LocalAppData%\DL2CC-STUDIO\Remote\session_history.json and is reloaded automatically the next time you open the Remote Station window — so the list survives restarts. If OpenShack is closed or crashes while a session is still running, that row is marked (interrupted) in the Comment column on the next load so the table never falsely shows a session as still live.

Debug view

Log tab switched to the verbose debug view
Debug view — the same tab with the Debug button clicked. The verbose internal log replaces the session table; the button is now labelled Log so you can flip back.

The Debug button switches the tab to a line-by-line internal log of everything the form is doing: connection state, remote-session events, rig proxy traffic, aux device messages, etc. This view is mostly useful when something is not working and you want to understand what the app is doing under the hood, or when you are sending a log to support. The button caption flips to Log while the debug view is shown — a single click takes you back to the session table.

Clear button

The Clear button on the right side of the header always clears whichever view is currently visible:

  • In the Session view, Clear asks for confirmation and then empties the table and wipes session_history.json on disk. If a session is in progress at the time, that row is kept so its disconnect still closes it cleanly.
  • In the Debug view, Clear empties the text panel only. The on-disk log file from this run (remote_connect_YYYYMMDD_HHmmss.log) is not touched — your trail to send to support stays intact.

Where the files live

Both per-run log files are written to %LocalAppData%\DL2CC-STUDIO\DEBUG\ while the app is running:

  • remote_connect_YYYYMMDD_HHmmss.log — full debug log for this app run.
  • session_YYYYMMDD_HHmmss.log — short human-readable START/END lines for the session table.
  • session_history.json — the persistent session table itself. This file is always written, even if internal file logging is disabled, so your history never disappears.

Connectivity Behind Routers

OpenShack automatically selects a suitable path between host and client across common IPv4 and IPv6 networks. Most users need no router changes. Professionally operated infrastructure is available where the network does not permit a straightforward path.

The Status panel identifies the active connection type. If you intentionally require a direct path on a network you control, use Require a Direct Connection on the Advanced tab.

How to Improve Your Latency

The default configuration works out of the box for most setups. The following operational steps can improve latency where you control the radio-site network. Apply only the changes that fit your setup.

UDP Port Range

For explicit firewall or router rules, the radio-site host uses the UDP range 46702–46721. The browser-listen feature uses a second block, 46722–46741, which only sends outward and never needs a firewall or router rule.

Most users do not need to configure these ranges manually. Use them only where a managed firewall or a deliberately direct host setup requires an explicit rule.

Port Forwarding (IPv4)

Most networks work without router configuration. If you deliberately require a directly reachable host, forward the documented UDP range on the host router. Otherwise leave automatic connectivity enabled.

You only need to do this on the host side (the machine at the radio site). The client benefits from the host's open port without needing its own forwarding rule.

  1. Log in to your router's admin page (typically 192.168.1.1, 192.168.0.1, or 192.168.178.1 for FRITZ!Box).
  2. Navigate to Port Forwarding (also called Virtual Servers, NAT, or Applications & Gaming depending on the router brand).
  3. Create a new rule:
    Field Value
    Protocol UDP
    External port range 46702 – 46721
    Internal IP The host PC's LAN address (e.g. 192.168.1.50) — assign it a static lease in your router's DHCP settings
    Internal port range 46702 – 46721
  4. Save and apply. Most routers activate the rule immediately.
  5. Reconnect from the client and confirm the Status panel shows P2P.
⚠️ Windows Firewall
Even with a router rule, Windows Firewall may still block inbound UDP on the host PC. Check your firewall settings: if Windows Firewall is active and has no exception for OpenShack.EXE or for the port range, you can add it manually or run this once in an elevated PowerShell on the host to allow incoming sessions on those UDP ports:
New-NetFirewallRule -DisplayName "OpenShack Remote" -Direction Inbound -Protocol UDP -LocalPort 46702-46721 -Action Allow
This rule covers both IPv4 and IPv6 — you only need to run it once.

IPv6 — Direct P2P Without NAT

If both the host and client have IPv6 connectivity (most modern ISPs provide it), OpenShack will often establish a direct IPv6 P2P path with no router configuration at all. IPv6 global unicast addresses are publicly routable — there is no NAT to traverse, so a direct path can often be established between the two machines.

No router port-forwarding rule is needed for IPv6. If you already ran the Windows Firewall command from the Port Forwarding step above, no second rule is required — that rule already covers both IPv4 and IPv6 on ports 46702–46721.

Stable IPv6 Address (advanced)

This is only relevant if your operating partner's firewall allowlists your host by its IPv6 address. Windows Privacy Extensions (RFC 4941) rotate that address every few hours or after a reboot, which would silently break such a rule.

If that applies to your setup, run these two commands once in an elevated PowerShell on the host PC:

# Disable random temporary addresses
netsh interface ipv6 set privacy state=disabled store=persistent

# Force stable EUI-64 suffix (derived from the MAC address)
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent

Then reboot. Afterwards, ipconfig will show a single Preferred address without the Temporary label — stable across reboots and safe to put in a firewall rule.

⚠️ Privacy tradeoff
A stable EUI-64 address is derived from the machine's MAC address, so the MAC can be inferred from it by anyone who sees your IPv6 address. Because the address never changes, it is also easier to identify and track the machine across sessions. Only apply this to a dedicated station PC, not a personal laptop or shared machine.

Some Starlink connections do not offer direct inbound reachability on IPv4. OpenShack therefore uses automatic managed connectivity when a straightforward path is unavailable.

The remedy is to enable IPv6 in the Starlink app or web interface:

  1. Open the Starlink app → Settings → Advanced → Local Network and switch IPv6 to On. (On the web UI at 192.168.100.1 the same toggle is under Settings → Advanced → Network.)
  2. After the setting saves, reboot the Starlink router so that it requests a fresh IPv6 prefix from the satellite network.
  3. Reconnect from the client and confirm the status panel shows P2P.

Starlink uses DHCPv6 prefix delegation to assign your router a block of globally routable IPv6 addresses — typically a /56 prefix (256 possible sub-networks). The router then hands out individual /64 sub-prefixes to each interface on the local LAN. Every device on your network receives a real, publicly routable IPv6 address. There is no NAT layer between the device and the internet, so a direct path can be established the same way it would on a native IPv6 broadband link.

⚠️ Prefix changes after reboot
Starlink may assign a different prefix after a router reboot or dish power-cycle. If you share your IPv6 address with an operating partner for firewall allow-listing, re-check it after any power interruption. For OpenShack itself this is not a problem — the connection information is refreshed for every session — but static rules on the remote side may need updating.

If the Stable IPv6 Address commands above were already applied on the host PC, the address suffix remains constant even after a prefix change; only the first four groups of the address change.

VPN — Fallback and Site Access

A VPN can provide connectivity when normal automatic routing is restricted and neither port forwarding nor IPv6 is available. However, it comes with trade-offs that make it a fallback option rather than a first choice.

⚠️ VPN overhead and the "false P2P" problem
When OpenShack operates over a VPN, it detects the VPN virtual addresses as host candidates and — if it can reach the other machine through the tunnel — reports P2P in the status panel. But that P2P path runs inside a VPN tunnel. Depending on the VPN type, the tunnel itself may be relayed through a cloud server. The result: OpenShack shows P2P, but the actual packet path includes an extra relay hop plus VPN encryption overhead. A genuine direct P2P connection without a VPN is always faster when it can be achieved.

Option A — Dial-In Site VPN (Preferred)

A traditional dial-in VPN runs a server directly on the remote site's router or host PC (WireGuard, OpenVPN, or similar). The client connects to that server and is placed logically on the site's own LAN. There is no intermediate relay server — the encrypted tunnel goes from your client straight to the radio site. OpenShack then connects to the host's LAN address as if both machines were in the same room.

This is the preferred VPN approach because:

  • The only overhead is the VPN encryption — no cloud relay in the path.
  • You know the connection terminates at the site, not at a proxy server.
  • OpenShack's P2P report is accurate — traffic genuinely goes directly to the host machine.

Many modern home routers include a built-in WireGuard or OpenVPN server. Alternatively, run WireGuard directly on the host PC. This requires opening the VPN port on the site router — straightforward if you have already set up port forwarding as described above.

Option B — Mesh VPN (Last Resort)

Mesh VPN tools such as Tailscale and ZeroTier create a virtual network between two machines with minimal configuration. They are easy to set up but have two significant caveats for radio remote work:

  • Hidden relay: When a direct VPN tunnel cannot be established (e.g., both peers are behind very restrictive NATs), Tailscale uses its own DERP relay servers and ZeroTier uses its planet/moon servers. OpenShack still reports P2P — because it reached the peer via the VPN address — but the physical path passes through a cloud relay. You must check the Tailscale or ZeroTier admin panel separately to know whether the VPN tunnel itself is direct.
  • Encryption overhead: Even on a genuinely direct VPN tunnel, all traffic is wrapped in an additional encryption layer, adding CPU load and a small but measurable latency penalty compared to a raw direct connection.
Tool Notes
Tailscale Install on both PCs, sign in with the same account. Machines appear under 100.x.x.x addresses. Free tier supports up to 3 users / 100 devices. Check the admin panel for the Direct connection indicator to confirm no relay is in use.
ZeroTier Create a free network at my.zerotier.com, install on both PCs, join the same network ID. Machines get stable private IPs in the 10.x.x.x range. Check the peer list for the DIRECT path status indicator.

Use a mesh VPN only when port forwarding, IPv6, and a dial-in site VPN are all unavailable. It is a reliable fallback — the connection will work — but with the relay and overhead caveats described above.

Box-2-Box — Standalone CW and PTT

Box-2-Box is the standalone option for CW and PTT. Two OpenShack Boxes connect over TCP/IP — one at the operator's position, one at the radio — and relay CW keying and PTT without OpenShack in the keying path. Once configured, the boxes work on their own: no PC software needs to keep running for the CW to go through.

⚠️ Prefer USB serial when a Windows PC is available
Box-2-Box runs over the boxes' WiFi connection. WiFi is convenient, but it is not as predictable as a wired USB-serial connection. If you have a Windows PC on either side, the preferred method is to keep that box wired by USB and use CW Link instead. Use Box-2-Box when you specifically need a standalone link without a PC in the keying path.
ℹ️ CW and PTT only — audio and CAT are not included
Box-2-Box handles CW keying and PTT only. Audio and CAT are out of scope — you keep using whatever you already use for those (another remote app, a direct IP link, SmartLink, etc.). Box-2-Box is purpose-built for the keying path and nothing else.

What you need

  • Two OpenShack Boxes — one at the operator's position (client), one at the radio (host).
  • WiFi enabled on both boxes. Box-2-Box always uses the boxes' WiFi connection; USB serial is only used for configuration and remains the preferred path with CW Link when a PC is available.
  • A DTM Remote license on both sides. Box-2-Box and CW Link both require a DTM Remote license for each side. Direct connections are free of charge apart from those licenses. If you use the relay, an active Remote Host Connect (RHC) yearly subscription is required in addition to the DTM Remote licenses. You configure each box from OpenShack before deploying them standalone.
  • The host box must be reachable from the client. On a local network this is automatic. Over the internet, Direct mode needs port forwarding for TCP 7373 and UDP 7373 to the host box — see Internet Use below.

How it works

Box-2-Box direct mode — client box dials host box directly over TCP port 7373
Direct mode — client dials host directly (available now)
Box-2-Box relay mode — both boxes dial outward through a relay server (planned)
Relay mode — both boxes dial outward, no inbound port needed (planned)

The client box streams every keying and PTT change. Your paddle sidetone plays in the client box locally — zero network delay. The host box receives the stream and replays the same timing onto the rig's key jack and PTT input.

The boxes maintain a heartbeat. If the link drops, the host box immediately releases PTT and clears key output — the rig is never left transmitting after a disconnect.

Setting up Box-2-Box

Open File → Hardware Settings with your box connected and go to the BOX-2-BOX tab. Configure each box separately — host first, then client.

Host box (at the radio)

  1. Connect the host box to OpenShack via USB.
  2. Open Hardware Settings → BOX-2-BOX.
  3. Set Role to Host (listen).
  4. Enter a Secret — a passphrase you choose freely (e.g. my-pair-secret-2026). Both boxes must use the same secret. The secret is stored on the box and never sent over the network as plain text.
  5. Leave Jitter at Normal for most links. Use Robust if your connection is slow or variable.
  6. Leave Mode set to Direct. Relay is planned but not functional yet.
  7. Click APPLY, then switch the Enable Box-2-Box toggle on and click APPLY again.
  8. The status panel shows State: listening. The host box is ready and waiting.
ℹ️ WiFi config session is released automatically
When you enable the host role, OpenShack automatically switches to USB (if a COM port is available) so you can keep configuring the box. The host reserves its WiFi port for the remote client — you cannot configure over WiFi and have a peer connect at the same time.

Client box (at the operator)

  1. Connect the client box to OpenShack via USB.
  2. Open Hardware Settings → BOX-2-BOX.
  3. Set Role to Client (connect).
  4. Enter the Host address — the IP address or DDNS hostname of the host box. On a LAN, use the host box's local IP (e.g. 192.168.1.50).
  5. Leave Port at 7373 unless your port-forwarding rule uses a different external port.
  6. Enter the same Secret as the host box.
  7. Leave Mode set to Direct. Relay is planned but not functional yet.
  8. Click APPLY, then switch the Enable Box-2-Box toggle on and click APPLY again.
  9. Within a few seconds the client box plays a short C in sidetone — the connection is live and keying goes through.

Settings reference

For a labelled screenshot of all controls, see the BOX-2-BOX Tab reference in the Hardware section.

ControlDescription
Role Host (listen) — box sits at the radio, listens on TCP port 7373 for the client.
Client (connect) — box dials out to the host and streams keying.
Off — Box-2-Box disabled.
Host IP address or DNS hostname of the host box. Only relevant when Role is Client. On a LAN, use the host's local IP. Over the internet, use your DDNS name or static public IP.
Port TCP port on the host (default 7373). Change only if your port-forwarding rule maps a different external port to 7373 on the host box.
Secret Shared passphrase — must be identical on both boxes. Up to 64 characters. The value is stored in flash and never transmitted over the network. Click the eye icon to reveal.
Jitter Adaptive jitter buffer profile (set on the host box):
Optimistic — lowest added latency, for fast local links.
Normal — default; handles typical home broadband.
Robust — more margin for slow or lossy connections.
Min ms Minimum jitter buffer depth in milliseconds. Raise this if your monitored CW sounds choppy. When both boxes are connected, the larger Min ms value wins so either side can request extra safety margin.
UDP Recommended: leave enabled. UDP carries edge timing with lower delay and usually gives better CW performance. If you switch UDP off, the TCP fallback works but will probably need a higher Min ms setting.
Mode Direct — client dials the host directly. This is the functional mode today; use it on a LAN, VPN, or with port forwarding.
Relay — planned for CGNAT/no-port-forwarding sites, but not functional yet.
Enable Box-2-Box Master switch. When on, the setting is saved to flash and the connection starts automatically every time the box boots — no PC required.
APPLY Sends all current settings to the box and saves them to flash.
RESET Clears all Box-2-Box settings from the box (role, secret, target, enable) and returns it to defaults.
RESET STATS Clears the local Box-2-Box/TX diagnostic counters and, when a peer is connected, clears the other box's counters too. Available for enabled Client and Host roles; the status panel is refreshed afterwards.
REFRESH Re-reads the local Box-2-Box status and, when a peer is connected, asks the other box for its read-only status too. The peer output is appended under the local device output.
Status panel Live readout showing the local role, enabled state, connection state, connected peer, round-trip time, jitter buffer depth, UDP state/counters, and the box's WiFi IP. After REFRESH, a reachable peer is shown underneath with its own Box-2-Box status and statistics.

Using Box-2-Box over the internet

On a local network no extra configuration is needed. Over the internet, current Box-2-Box operation uses Direct mode:

  1. Direct mode: in your router, create port forwarding rules for TCP port 7373 and UDP port 7373 to the host box's local IP address. If your internet provider gives you a dynamic IP, use a DDNS hostname in the client box's Host field.
  2. Relay mode: planned for sites without inbound port forwarding, but not functional yet.
⚠️ CGNAT — port forwarding may not be available

Some internet providers (mobile broadband, some cable providers) put customers behind CGNAT (Carrier Grade NAT). With CGNAT, port forwarding in your router has no effect — inbound TCP connections cannot reach your box at all.

Relay mode is the planned solution for this case, but it is not functional yet. Until then, Direct mode needs a real inbound TCP+UDP path to the host box.

Listen to your own transmitted CW
It is strongly recommended to monitor your own signal with another receiver, for example a nearby receiver or WebSDR, and check the actual RF quality. If the CW sounds choppy or dots are missing, increase Min ms and test again.

Morse Announcements

Both boxes play short sidetone-only CW announcements to tell you what is happening. No RF is transmitted — the key output is not active during these. The host box is usually unattended, so its announcements play on its local sidetone output.

CWMeaning
B Box-2-Box is enabled and the stream has started (played on enable).
C A peer has connected and authenticated — keying is now live end-to-end.
<AR> Box-2-Box has stopped — the link dropped, you disabled it, or issued a disconnect.

Hardware escape hatches

Once deployed you can control Box-2-Box from the box buttons — no PC or USB cable needed. These are useful when both boxes are in the field or at a hotel.

ActionEffect
Hold Speed − + Button 4 together (while running) Toggles the Box-2-Box stream on or off immediately and saves the new state — the box remembers across reboots.
Hold Button 4 at power-on (brief hold) Skips Box-2-Box for this session only. The box comes up on standard WiFi/TCP so the web config tool can reach it. Saved settings are unchanged; Box-2-Box resumes on the next boot.
Hold Button 4 at power-on for 6 seconds or more Wipes all Box-2-Box settings from flash. The box plays R in sidetone to confirm. Use as a last resort to recover a misconfigured or inaccessible host box.

Speed − = leftmost top button (WPM−); Button 4 = rightmost top button (4th button). See Hardware — Top Buttons.

Limitations

  • CW and PTT only. Audio and CAT are not handled by Box-2-Box.
  • One-way keying. The client keys the host's radio. The host cannot key back through Box-2-Box in the current version.
  • Host listen port is fixed at 7373. Direct mode uses TCP 7373 and UDP 7373 on the host. You cannot change the port the host listens on — only the client's target port is adjustable.
  • Direct mode needs reachability. Relay mode for CGNAT/no-port-forwarding sites is planned but not functional yet.
  • Do not run a Winkey logger on the host box USB simultaneously. Two independent keying sources on the same rig can interfere with each other.