Full-featured Windows application for the ham operator who wants the lowest-latency LAN path to the shack. Main window unified with the server’s layout (frequency display, VFO A/B, mode picker, 12 memory presets, 5 meters), all eight digital decoders, full transmit support including image TX (SSTV + WEFAX), SDR panadapter, Lab Measurements RF workstation, dual audio streams, and 24 server-synced memories — all in a single .NET app.
For controlling rigs from outside your home LAN, use the web client or the mobile app — both ride a single auth-gated port over the internet. The desktop client is the home-shack option, intentionally LAN-resident for lowest latency.
💡 Key Features
Dual Audio Streams
Low-latency 12 kHz PCM (~200 ms) for tuning + digital-mode work, plus 192 kbps stereo MP3 HiFi (~1 s) for casual SSB listening. Mutually exclusive; auto-switches to 12 kHz on TX so you hear your own keying without delay.
Frequency Control
9-digit display with mouse-wheel and arrow-key tuning, VFO A/B, Split, RIT, XIT — all bidirectional with the radio.
Virtual Tuning Knob
Drag-rotate VFO knob with variable step sizes for fine and coarse tuning.
24 Server-Synced Memories
Click to recall, long-press to save. Memories live on the server — the desktop, web, mobile, and HA clients all see the same slots and labels in real time.
Eight Digital Decoders
CW (40+ WPM with WPM scope), RTTY (auto-detect baud + shift, two demod algorithms), PSK31 (9 BPSK/QPSK variants with AFC and FEC), FT8/FT4 (relayed from WSJT-X with SNR color-coding), SSTV (19 modes, image + waterfall side-by-side, draggable splitter, popout window, save image, slant/shift correction sliders), WEFAX (weather-fax decoder with phasing-lock detector, IOC 576/288 at 60/120 LPM), NAVTEX (SITOR-B FEC, 100 baud, 170 Hz shift), and APRS (AX.25 1200 baud Bell 202 AFSK packet radio).
Full Transmit Support
CW, RTTY, PSK31, voice, and image modes (SSTV all 18 sub-modes + WEFAX) all driven through the server’s TxEngine. Single-owner lock prevents collisions; chat-style timeline shows incoming RX decodes alongside outgoing TX text. TX:CONFIG protocol broadcasts every TX setting so the client mirrors the server in real time. Test-no-RF mode for offline rehearsal.
SDR Panadapter
Embedded scope + waterfall on the SDR tab, with a popout window. Supports multi-SDR — when the server has multiple devices active, a slot selector and Audio button appear to choose which device to view and listen to. Click-to-tune, drag-pan, RF or IF mode (transverter / IF tap). Per-client server-side zoom with navigator overview and rig frequency marker. DX spot and broadcast station markers on the waterfall. Peak markers with configurable style/color/labels. Reverse waterfall, 7 color themes, phosphor persistence.
Lab Measurements
Professional RF measurement workstation. 8 simultaneous traces with ClearWrite / MaxHold / MinHold / Average / RMS modes, 8 markers with peak search and N-dB bandwidth, DPX persistence display, spectrogram waterfall, automated measurements (channel power, OBW, ACPR, SNR, harmonics, THD, IMD/IP3), two-SDR transfer function (S21) with limit masks, CSV and Touchstone export, and C# scripting. Tune From Spectrum lets you click a trace to listen on that SDR and click-to-tune the demod listen point without moving the trace, with peak markers and VFO/passband overlays; Band Browse slides across the band by grab-drag or arrow keys. Wheel-zoom at the cursor with zoom history and a Zoom slider; stitch mode splices disjoint SDR bands into one gap-free axis, with a per-trace segment lane editor to keep just the slice of each band you care about. An Instruments menu adds a modulation analyzer, phase noise, and noise figure, plus a view-only mask-trigger event console. Full popout support.
Audio Visualization & Recording
Live waterfall / spectrum / oscilloscope / spectrum-LED display with 6 themes, peak-hold, gain / contrast / range sliders. MP3 recording with frequency / mode / timestamp filenames.
Multi-Rig Support
Switch between up to 4 OmniRig rigs. Each maintains independent state; rig-sync rules on the server fire automatically as you move between them.
Band Plan Table
Amateur band allocations with auto-highlight when you tune into a segment. Click any row to QSY instantly.
Custom Colors
Colors button on the Tools tab opens a full color customization dialog. Personalize frequency display, meters, backgrounds, and accents. Saved between sessions.
User Photo
Operator photo displayed alongside the callsign label for station identification.
Tooltips System
Toggle Show Tooltips on the Tools tab for context-sensitive help on every control. Dark-themed custom draw on separate dialogs.
Tools Tab Popouts
Propagation dashboard (live solar data), greyline map (day/night terminator), logbook (ADIF viewer), broadcast guide (searchable EiBi/HFCC/FM/AM/NOAA station database with click-to-tune) — all as detachable popout windows from the Tools tab.
S-Meter & Detachable Meters
S-meter width cap for consistent layout. The meter group (S-meter, SWR, ALC, RF Power, Audio Level) is detachable as a standalone window.
Main window (server-aligned layout): 9-digit frequency display, VFO A/B, 12 memory presets, and the 5-meter rack, with the SDR panadapter tab open below on the 2D waterfall. The solar-indices / HF–VHF band-conditions panel is docked top-right.
The same window with the SDR waterfall toggled to the 3D perspective terrain, and the greyline day/night map docked top-right.
📋 System Requirements
💻 Software
- ✓ Windows 7/8/10/11 (64-bit recommended)
- ✓ .NET Framework 4.7.2 or later
- ✓ Sound card with speakers/headphones
🌐 Network
- ✓ TCP port 8080 (radio control)
- ✓ TCP port 8081 (12 kHz PCM audio)
- ✓ TCP port 8082 (voice TX uplink)
- ✓ TCP port 8084 (HiFi MP3 stream)
- ✓ TCP port 8085 (SDR spectrum)
- ✓ UDP port 8081 (auto-detection)
- ✓ WebSocket mode — single port 8084 with HMAC-SHA-256 auth for internet access
- ✓ LAN (TCP, zero-config) or Internet (WebSocket, authenticated) — user-selectable
🛠 Installation
Download the Client
Download ShackLinkClient.exe from the releases page at ditdots.com
Place in Desired Location
Copy the executable to a folder of your choice. No installation required – it’s portable.
Run the Application
Double-click ShackLinkClient.exe. Windows may ask to allow network access – click Allow.
Configure Server Connection
LAN: The server dropdown automatically discovers all ShackLink servers on the LAN and lists them as HOSTNAME (IP). Pick your server from the dropdown and click Connect. Servers that stop broadcasting disappear after 12 seconds. If auto-detection doesn’t work (firewall blocking UDP), use “Force IP” mode to enter the address manually.
Internet: Click the gear icon, check Use WebSocket, enter the Auth secret from the server’s Tools > Security panel, enter the server’s public IP or hostname, and click Connect. This multiplexes everything over a single authenticated connection on port 8084 — the same transport used by the web and mobile clients. See Remote Access Recipes for setup guides (port-forward, Cloudflare Tunnel, Tailscale Funnel, nginx).
Enable Auto Connect to reconnect automatically after disconnections.
🎮 User Interface
Main Window Layout (server-aligned, 2026-05)
The main window is laid out to mirror the server’s main window pixel-for-pixel where the controls have a 1:1 analog. Clicking around the desktop client and the server feels identical — same frequency display, same memory grid, same VFO A/B box, same Split / RIT / XIT row, same callsign label, same 5-meter rack on the right.
- Left region —
grpRadioControl: 9-digit frequency display, VFO A/B picker, band picker, mode picker, memory page navigation, 12 memory presets in a 4×3 grid (160×75 each). - Below left —
grpSplitRitXit: Split / RIT / XIT toggles, VFO-B display, RIT offset. - Center top — status labels, Connect button, Auto Connect, rig selector.
- Center mid (client-only) — Server IP, Port, Config gear (the band the server uses for its audio device list).
- Center mid — volume meter + slider.
- Center lower — Audio button, HiFi button (with status label), Record button, recording duration, recording path + Browse.
- Right region — the callsign strip (
CallsignClockDisplay, shared with the server) showing the operator callsign plus an NTP-synced UTC clock with configurable layout / font / colors, andgrpMeterswith all 5 RadioMeter controls: S-meter, SWR, ALC, RF Power, Audio Level. Server already broadcasts SWR / ALC / RFPOWER inRIG:n:SMETER:...;SWR:...;ALC:...;RFPOWER:...;AUDIOLEVEL:....
Tabs
The work area below the unified control surface has these tabs (in order): Audio, Decoder, TX, Band Plan, SDR, Lab, Log, Tools. The Tools tab provides Colors, Tooltips toggle, and popout buttons for Propagation, Greyline Map, Logbook, Lab, and Broadcast Guide. The active tab is persisted between sessions by name (resilient to re-orders in future builds).
Title Bar
The window title bar carries two extras shared with the server:
- NTP UTC clock — the same NTP-synced UTC time shown on the callsign strip also appears in the window title.
- Theme submenu — the title-bar (window) system menu has a Theme submenu for picking a color theme straight from the window’s system menu, in addition to the full Colors dialog on the Tools tab.
Connection Area
| Control | Description |
|---|---|
| Server | Dropdown listing all discovered ShackLink servers as HOSTNAME (IP). Servers are discovered via UDP broadcast on port 8081; entries disappear 12 seconds after the server stops broadcasting. Select a server to auto-fill the IP and port. |
| Port | Control port (default: 8080). Audio (8081), voice TX (8082), HiFi (8084), and SDR (8085) are derived automatically. |
| Config (gear icon) | Opens settings dialog for advanced options |
| Connect | Connect/disconnect from server. Shows current connection status. |
| Audio | Start/stop the low-latency 12 kHz PCM stream (~200 ms). Use this for tuning, CW/RTTY/PSK decoding, and hearing your own TX in real time. State is remembered between sessions. |
| HiFi | Start/stop the 192 kbps stereo MP3 stream (~1 s latency). Use this for broadcast-quality listening / SSB voice QSOs. Mutually exclusive with Audio — starting one stops the other. State is remembered between sessions. Auto-switches to 12 kHz on TX because the MP3 buffer is too long for hearing your own keying; stays on 12 kHz until you click HiFi again. |
| Auto Connect | Automatically connect when application starts |
| Audio Auto-Start | Whichever audio path (Audio / HiFi) was active last session auto-starts when you reconnect |
Frequency Display
The frequency display shows the current frequency in a 9-digit LCD-style format:
- MHz digits (1-3) – Megahertz portion (e.g., 014 for 14 MHz)
- KHz digits (4-6) – Kilohertz portion (e.g., 070 for 70 KHz)
- Hz digits (7-9) – Hertz portion (e.g., 000 for 0 Hz)
Tuning Methods:
- Mouse wheel on digit – Hover over any digit and scroll to adjust
- Click to select – Click a digit to lock selection for knob tuning
- Selected digit – Shown with dark blue background
Virtual Tuning Knob
Tuning uses the shared Freq-Knob library — a SkiaSharp rotary-knob renderer (one engine, 16 styles) also used on the server. The FrequencyKnob is an endless VFO dial with per-digit step sizes and flywheel momentum:
- Click and drag – Rotate the knob to change frequency; a quick flick spins the flywheel and coasts to a stop
- Clockwise increases frequency, counter-clockwise decreases it
- Step size – Determined by the selected digit in the frequency display (per-digit stepping)
- Resizeable frequency popup – The pop-up frequency window is resizeable and hosts the rotary knob for large-dial tuning
- Photo-panel “Knob” mode – The operator photo panel has a third right-click mode that turns it into a live tuning knob (shared with the server’s photo panel;
PhotoShowKnob/PhotoKnobState)
Tools Tab & Themes
The Tools tab collects detachable popout launchers — Propagation, Greyline Map, Logbook, Broadcast Guide, Band Activity, Spectrum Snapshots, Lab, and the Decoder / TX / Visualization / SDR Waterfall / Band Plan / Log windows — plus the Colors dialog and the Show Tooltips toggle. A color theme can be applied from here or from the window’s system menu; it retints the entire UI (frequency display, meters, panels, and controls) and persists between sessions.
The Tools tab popout grid, shown with the Classic Green theme applied across the whole client.
💾 Memory & Modes
Memory Buttons
24 programmable memory slots synced with the server in real-time:
- Quick click – Recall saved frequency and mode
- Long press (1 second) – Save current frequency and mode to that slot
- Right-click – Clear a programmed slot
- Labels – Custom labels can be assigned via the “All Memory Slots” dialog
- Active memory – Highlighted when current frequency and mode match
- All Memory Slots – Click the “All Memories” button for a scrollable grid with inline label editing
Memory contents are stored on the server and synchronized with all connected clients. Changes from any client (desktop, web, mobile, or HA) appear on all others instantly.
Audio Tab — Visualization & Recording
The Audio tab renders the received audio as a live waterfall / spectrum / oscilloscope / spectrum-LED display with six themes, peak-hold, and gain / contrast / range sliders. When the stream is stereo (HiFi MP3 or WFM), the display splits into dual L/R channels.
Dual-channel (stereo) spectrum and 2D waterfall of the received audio, with mode / theme pickers and gain, contrast, and range sliders.
The same visualization toggled to the 3D perspective terrain waterfall (both stereo channels).
SDR Panadapter
The SDR tab connects to the server’s spectrum stream for real-time waterfall and spectrum display:
- Multi-SDR slot selector – When the server has multiple SDR devices active (up to 8), a Slot dropdown and Audio button appear. Select a slot to view its spectrum; press Audio to switch the listening source. Hidden when only one device is active.
- Slot kinds – Some slots are not frequency-agile the way a normal SDR is: a native Icom CI-V scope slot and an IQ-file playback slot (a looped recording) have a fixed LO, so drag-to-pan — and, for Icom, the FFT-size and Zoom-FFT controls — are disabled, and click-to-tune moves the demodulator listen point instead of re-centering the capture. (IQ-file slots keep the FFT size adjustable.)
- Embedded display – Scope + waterfall on the SDR tab
- Popout window – Separate resizable window via “Popout Spectrum” button
- Click-to-tune – Click on the waterfall to change the rig frequency (routed to the selected slot)
- Memory markers – Optional frequency markers from stored memories
- DX spot markers – Live DX cluster spots drawn on the waterfall with callsign labels
- Broadcast station markers – Known broadcast station frequencies overlaid with station name labels
- Navigator overview – Miniature full-band view showing the current zoom window position with rig frequency line
- Peak markers – Configurable markers on the strongest spectrum peaks (count, color, size, style, frequency labels)
- Reverse waterfall – Flipped layout with upward scrolling (waterfall on top, scope on bottom)
- Palette – 8 waterfall color palettes, unified with the Lab tab: Classic (blue), Classic (green), CoolWarm, Viridis, Plasma, Inferno, Grayscale, Neon (cyan)
- 3D waterfall (terrain view) – Toggle the waterfall pane between the flat 2D view and a rotatable 3D perspective terrain (right-click → “3D Waterfall”, or the corner 3D/2D button). Drag to orbit the camera (pitch/yaw), right-drag to pan vertically, with “Reset 3D View” and an optional “Fit Height to Pane”. GPU-accelerated (SkiaSharp / OpenGL) with a silent CPU fallback; colors and heights match the 2D waterfall exactly
- Waterfall Ref (max-level) slider – Sets the top of the waterfall color scale (dBFS) so strong signals reach the top (“red”) of the palette instead of being clipped below full scale
- Phosphor histogram mode – An optional, experimental GQRX-style histogram / density spectrum color mode alongside the existing amplitude-hue, density-palette, and Gaussian-spread phosphor modes
- Auto-discovery – SDR stream port discovered via UDP broadcast
The phosphor / persistence spectrum: signal density is color-mapped instead of a single trace line, over the 2D waterfall. Station and DX-spot markers label activity across the band.
The panadapter waterfall toggled to the 3D perspective terrain view, with the greyline map docked top-right.
Lab Measurements (RF Workstation)
The Lab tab provides a professional-grade RF measurement workstation, identical to the server’s Lab tab. All code is shared — the client receives SDR spectrum data from the server via the existing SDL1 binary stream and feeds it into the same multi-trace analysis engine.
Traces (up to 8)
Each trace binds to an SDR slot and applies independent processing:
- Trace modes — ClearWrite (live), MaxHold (peak envelope), MinHold (noise floor), Average (configurable N), RMS
- Per-trace controls — visibility, color, peak-hold color, label, source slot, gain offset (−60 to +60 dB), noise floor (−160 to −20 dB)
- Math traces — A+B and A−B operations between any two traces for comparison and delta measurements
- Source routing — each trace can be bound to a different SDR slot, enabling multi-device overlay comparisons
- No-data legend status — a checked trace whose SDR source isn’t delivering data still appears in the legend, its name dimmed with a short status word (“Not started”, “No data”, or “Unavailable”) in place of a frequency range, so you can see it’s selected but waiting on its device
Markers (up to 8)
- Normal — frequency and amplitude readout at the marker position
- Delta — frequency and amplitude difference between two markers
- Band Power — integrated power within a specified bandwidth around the marker
- Noise — noise density (dBFS/Hz) at the marker position
- Peak search — jump to the highest peak, navigate to next peak left/right, or find the minimum
- N-dB bandwidth — find the −3 dB (or configurable N) bandwidth around a peak. Dropdown selects 3/6/10/20/40/60 dB
- Click-to-place — click on the spectrum display to place the next marker at that frequency
- Clear All Markers — the spectrum right-click menu (next to “Place Marker Here”) removes every placed marker and clears the marker grid in one step
Tune From Spectrum & Band Browse
By default the Lab is a passive overlay, but enabling Tune From Spectrum (spectrum right-click menu) lets the Lab drive listening and tuning — it still never alters the SDR capture pipeline or FFT:
- Select a trace — click a trace to highlight it and switch audio-follow to that SDR slot (you now hear that device)
- Tune the listen point — click again within the selected trace’s band to tune that slot’s demodulator to the clicked frequency. This moves the listen point only — it does not re-center the SDR LO, so the trace stays put
- Overlays — the selected trace can show a VFO frequency readout (“Show Frequency”) and a passband box (“Show Passband”)
- Peak markers — mark the top-N peaks on the selected trace; the “Peak Markers” submenu configures count (3–10), color, size (2–8 px), style (filled circle / outline / square / diamond), and optional frequency labels
- Band Browse — grab a trace line and drag horizontally, or click the plot then press Left/Right arrow keys, to shift that slot’s LO across the band (Shift = ×10 coarse, Ctrl = fine step). For the audio-active slot the absolute listen frequency is held by compensating the demod offset; audio mutes when that frequency leaves the captured span and resumes when a later shift brings it back. Refused for rig-tracking slots and IF-panadapter mode (a brief on-display “Locked” notice)
- Shift Station to Edge — from the spectrum right-click menu, park the selected trace’s tuned signal at the left or right edge of its span (the server computes the LO from the listen frequency and demod mode). Pair a “Right” on a lower trace with a “Left” on a higher one for a side-by-side stitched view of two signals
Automated Measurements
An eight-row Measurements grid (a label tab beside Markers) computes a measurement per trace every sweep, with blank-for-auto parameters and live Result/Detail columns; a quick readout also appears in the toolbar:
- Channel power — total power within a defined channel bandwidth
- Occupied bandwidth (OBW) — bandwidth containing 99% of signal power
- ACPR — adjacent channel power ratio
- SNR — signal-to-noise ratio
- Harmonics / THD — harmonic distortion analysis
- IMD / IP3 — intermodulation distortion and third-order intercept point
- CFO — carrier frequency offset vs a reference, in Hz and ppm
- Occupancy — percent of a band above the noise floor, averaged over a time window
- Duty cycle — percent of time a channel is keyed over a window
- Envelope — peak / current / floor at a frequency, held across sweeps
- ImageRej — I/Q image rejection: a signal versus its mirror across the receiver’s DC, in dBc
- NoiseRise — close-in noise floor near a strong carrier versus the far floor (reciprocal-mixing proxy)
- SpurMask — spurs as dBc below the carrier against a simplified ITU-R SM.329 mask, with a PASS/FAIL count
- Flatness — spectral flatness (Wiener entropy) over a band, with passband ripple
A Log to CSV toggle appends every enabled measurement row to %LocalAppData%\ShackLink\Lab\measurements.csv (about once per second) for trend plotting. Readings are relative (dB/dBFS/dBc/%/Hz) unless you supply a per-slot calibration (see below), in which case the absolute power readouts can show approximate dBm*.
Amplitude calibration (approximate dBm)
Consumer SDRs have no traceable power calibration, so the Lab is relative (dBFS) by default. You can assert an approximate absolute reference per SDR slot: switch the amplitude unit to dBm, then either type a per-slot offset directly or, with a marker on a known signal, type its level in the Cal drop-down and click Set from marker (offset = known dBm − marker dBFS). Absolute readouts (channel power, noise floor, envelope, marker amplitude, cursor) then show dBm* — the * marks it as user-asserted and not traceable. Relative metrics (SNR, ACPR, image rejection, flatness, …) are unaffected. The calibration is tied to the slot’s gain: any gain change (MGC / LNA / AGC, and conservatively IF gain) marks it stale and the slot reverts to dBFS until you re-set it — so a stale offset can never silently lie. Calibration applies on both the server and the (remote) desktop client; the server broadcasts a per-slot gain-change pulse so the client invalidates too.
Display Modes
- DPX persistence — temporal density display showing signal persistence over time. 8 color palettes (unified with the SDR tab): Classic (blue), Classic (green), CoolWarm, Viridis, Plasma, Inferno, Grayscale, Neon (cyan)
- Spectrogram waterfall — time-frequency display with gain, contrast, floor, and speed controls. Synced frequency axis with the main spectrum display
- 3D waterfall (terrain view) — the spectrogram waterfall can toggle into a rotatable 3D perspective terrain using the same shared renderer as the SDR tab: orbit-drag the camera, “Reset 3D View”, optional “Fit Height to Pane”, GPU-accelerated with a CPU fallback
- Spectral CCDF — complementary cumulative distribution of spectrum-bin amplitude relative to the mean (a frequency-domain distribution and spectral peak-to-mean ratio, not time-domain PAPR / crest factor — that would need raw I/Q the Lab never receives)
- PSK constellation + EVM/MER — live I/Q scatter of recovered PSK31 symbols (2 points BPSK-31, 4 QPSK-31) with persistence, ideal-point overlay, and a genuine modulation-quality readout (Error Vector Magnitude %, Modulation Error Ratio dB). The server computes the metric and streams the symbol cloud, so the remote client sees the same scope. PSK31-only; shows “—” (never a fake 0 %) when no PSK31 signal is locked. A VSA summary adds peak EVM, a magnitude/phase-error split, residual carrier frequency error (after AFC), and I/Q offset, with a 60-second EVM trend
- Audio SINAD — true signal-to-noise-and-distortion ratio of a steady tone (CW/SSB beat-note, AM/FM tone, or test tone) in the demodulated audio of the SDR slot you are hearing. Measured from the real demod audio rather than the spectrum, computed on the server and broadcast to the client; a ratio, so no calibration needed; shows “—” honestly when no tone is present
- Navigator bar — optional Trace or Waterfall-history overview showing the zoom position within the full span
Instruments (Dedicated Measurement Windows)
The Instruments toolbar dropdown opens focused, single-purpose measurement windows that run alongside the analyzer — the same suite as the server’s Lab:
- Modulation Analyzer — an analog modulation meter for the slot you are hearing: AM depth, FM deviation (peak / RMS), carrier offset, and modulation rate on a needle face. Measured on the server from the demodulated audio and broadcast to the client; AM/FM only; honest “—” with no carrier
- Phase Noise — carrier-tracked SSB phase noise L(f) dBc/Hz vs log offset, with a decade table (10 Hz–1 MHz), integrated jitter, spur exclusion, window-skirt masking, and reference save/compare. Pure trace math, computed locally (the server broadcasts which FFT window is in use so the dBc/Hz is correct)
- Noise Figure — a guided Y-factor noise-figure wizard with a calibrated noise head: system NF (Mode A) or DUT NF + gain via Friis (Mode B), NF(f)/gain(f) curves, ENR head profiles, and gain-change voiding. Pure trace math, runs locally
- Mask Trigger — a view-only event console for the server’s frequency-mask trigger: armed masks, the event list, and the slot timeline. Arming and the black-box I/Q capture happen on the server
The Zero-Span Scope and the video record button are server-only and not shown on the client (both need the server’s raw sample stream or its native capture component). Everything else in the Instruments menu works over the network.
Advanced Features
- Transfer function (S21) — two-SDR stimulus/response measurement with limit mask overlays for compliance testing
- Limit masks — regulatory and user-defined spectral masks (spurious emission, harmonic suppression, bandpass)
- C# scripting — Roslyn-based scripting engine with full MeasurementApi for automating measurements, sweeps, and data collection
- Export — CSV (all traces), Touchstone S1P/S2P, PNG screenshot, and measurement log
- Cable loss compensation — predefined cable types (RG-58, RG-174, etc.) and custom entry for length-based loss correction
Toolbar Controls
The Lab toolbar provides: Popout button, Reset Zoom, Start/End frequency entry with Auto-Range toggle, peak/min search and navigation, reference level and display range, N-dB bandwidth selector, DPX toggle, waterfall toggle with palette selector, transfer function dialog, limit masks, script editor, CSV export, screenshot, a live measurement result readout, an amplitude unit selector (dBFS / dBm), and a Cal drop-down for per-slot approximate-dBm calibration, and an Instruments dropdown that opens the dedicated measurement windows (Modulation Analyzer, Phase Noise, Noise Figure, and the Mask Trigger event console). Waterfall gain/contrast/floor sliders appear when the spectrogram is visible.
Popout Window
The Popout button opens a separate resizable Lab window with its own independent MultiTraceDisplay, SpectrogramDisplay, and CcdfDisplay instances. Both the tab and the popout share the same TraceEngine and MarkerEngine — trace data and marker updates flow to both simultaneously. A Link toggle controls the relationship: when linked (the default) the popout mirrors the tab and display settings (zoom, ref level, palette, 3D camera, panes) sync bidirectionally; when unlinked the popout becomes fully independent with its own zoom, scale, palette, 3D camera, and pane layout, persisted separately. The popout window position and size are saved between sessions via PopoutSettings.
Persistence
The entire Lab session state is saved to %LocalAppData%\ShackLink\lab_session.cfg and restored on startup: all 8 trace configurations (source, mode, colors, gain, floor), all 8 marker states, display settings (frequency range, reference level, display range, DPX enabled, palette), spectrogram settings (gain, contrast, floor, speed), splitter positions, waterfall/CCDF trace indices, the amplitude unit, and per-slot calibration offsets (valid ones only — a gain-staled offset is dropped).
Five traces from different SDR slots (HackRF, SDRplay, RTL-SDR, and two synth sources) overlaid on a single stitched, gap-free axis spanning 7, 14, and 104 MHz, with markers and the trace / marker grids below.
The same multi-trace session with the spectrogram toggled to the 3D perspective terrain waterfall.
Connect / Disconnect
The Connect button stays enabled after connecting and changes to “Disconnect”, allowing manual disconnection from the server. Server IP and port fields lock while connected.
Mode Selection
The mode dropdown allows selecting the operating mode:
- USB – Upper Sideband
- LSB – Lower Sideband
- CW – Continuous Wave (Morse)
- FM – Frequency Modulation
- AM – Amplitude Modulation
- RTTY – Radio Teletype
- DIG – Digital modes
Digital Decoder Panel
- Decoder Mode – Select CW (Morse), RTTY, PSK31, FT8, SSTV, WEFAX, NAVTEX, or APRS from the buttons. The choice is broadcast to every connected client — switching mode here switches the server tab and every other client too.
- Enable/Disable – Toggle decoding subscription
- Decoded text – Shows characters as they are decoded (CW / RTTY / PSK31 / FT8)
- Image + waterfall – SSTV / WEFAX panels show the decoded image on the left and a live waterfall of the audio band on the right with a draggable splitter. Slant / shift sliders correct alignment drift.
- Signal scope – Visual display of audio signal (CW mode)
- Clear button – Clear the decoded text display
- Save button – Save decoded text to a file (image modes save the image)
Decoder tab in Morse (CW) mode: the signal-info readout (tone frequency and WPM), the dit / dah element strip, and the live decoded text below.
TX Tab — CW, Voice & Digital
The TX tab hosts the QSO chat panel for the text and voice modes. Everything is driven through the server’s TxEngine under a single-owner lock; a Test (no RF) switch lets you rehearse offline.
CW: the chat timeline interleaves outgoing TX and incoming RX with timestamps, plus CQ / QSL / 73 / Log quick-send macros.
Voice: hold-to-talk PTT, a microphone device picker, and the Test (no RF) rehearsal switch, over a live audio waterfall.
TX Tab — Image Modes (SSTV / WEFAX)
When the TX-mode picker selects SSTV or WEFAX, the chat panel swaps in an ImageTxPanel:
- Pick mode (SSTV: 18 sub-modes; WEFAX: IOC + LPM)
- Choose Image — the panel resamples and shows a preview
- Click Send — image is uploaded to the server (chunked, SHA-256 verified, 5 MB cap), encoder runs, PTT keys via OmniRig, live build-up shows in the preview as the encoder transmits
- Test (no RF) mode (chat panel header): encoder runs but PTT stays low — for offline rehearsal. A WAV is saved next to the source image.
- Other connected clients see
TX:STATUSandTX:PROGRESSso they can follow the line counter
Transmitting a test pattern in Martin M1: the image preview fills in line-by-line as the encoder runs (line 98 / 256), with brightness / contrast controls. The right pane shows the outgoing signal on both the SDR spectrum and the audio waterfall.
FT8 Color Coding
FT8 messages are color-coded by signal strength (SNR) for easy identification:
| SNR Range | Color | Signal Quality |
|---|---|---|
| 0 dB and above | Bright Green | Strong signal |
| -10 to -1 dB | White | Moderate signal |
| -15 to -11 dB | Orange | Weak signal |
| Below -15 dB | Red | Very weak signal |
💡 Tip
Server-side decoding is more accurate than client-side because it processes the original audio without network jitter. CW works reliably at speeds up to 40 WPM, RTTY auto-detects baud rate and shift, PSK31 includes AFC and squelch, and FT8 integrates with WSJT-X.
📡 FT8/FT4 requires WSJT-X on the server
FT8 decoding is performed by a separate WSJT-X instance running on the server machine. The server listens on UDP port 2237 for WSJT-X’s decode reports and forwards them to this client. Enable WSJT-X’s UDP Server in File → Settings → Reporting.
Band Plan Table
Access the amateur radio band plan with frequency allocations:
- Open – Click the Band Plan button to open the frequency table
- Click to tune – Click any entry to tune the radio to that frequency
- Auto-highlight – The table automatically highlights the matching entry when the radio frequency changes
- Session persistence – Window position and open state are remembered between sessions
The band plan includes calling frequencies, band edges, and mode allocations for all amateur bands.
Band Plan tab: a searchable, mode-filterable allocation table (click a row to QSY, or pop it out to its own window). Top-right, the photo panel is switched to knob mode — the endless VFO tuning dial flanked by the System and App volume knobs (the shared Freq-Knob rotary controls).
🔧 Configuration
Settings Dialog
Click the gear icon next to the Server IP to access settings:
| Setting | Description |
|---|---|
| Server IP | IP address of the ShackLink Server |
| Force IP | Disable UDP auto-detection and always use specified IP |
| Callsign | Your amateur radio callsign (displayed in the application) |
Auto-Detection (Multi-Server Discovery)
By default, the client listens for UDP broadcasts from the server for automatic discovery:
- Server broadcasts its presence on port 8081 with a
name=<hostname>field so the client can display each server by name - The server dropdown populates with all discovered servers as HOSTNAME (IP)
- When multiple servers are running on the LAN, all appear in the dropdown simultaneously
- Servers that stop broadcasting are removed from the dropdown after 12 seconds
- Client automatically detects and connects when Auto Connect is enabled
- Use “Force IP” option if auto-detection doesn’t work (firewall blocking UDP)
⚠ Firewall Configuration
Ensure your firewall allows outbound connections on TCP ports 8080, 8081, 8082, 8084, and 8085 (control, audio, voice TX, HiFi MP3, SDR spectrum respectively). For auto-detection, also allow inbound UDP on port 8081, or use “Force IP” mode. The desktop client is LAN-only by design — for remote access from outside your home network, use the web client (http://server:8084) which carries everything over a single auth-gated WebSocket.
🔧 Troubleshooting
Cannot Connect to Server
- Verify the server is running and accessible
- Check the IP address and port are correct
- Ensure no firewall is blocking the connection
- Try pinging the server IP from command prompt
- If using auto-detection, try enabling “Force IP” mode
No Audio
- Ensure the Audio button shows a green checkmark (indicating streaming is active)
- Check system volume and ensure speakers are not muted
- Verify the volume slider in the client is not at zero
- Check that audio streaming is enabled on the server
- Note: Audio state is saved between sessions – if you had audio enabled last time, it will auto-start on connect
Radio Shows Offline
- Verify OmniRig is running and connected to your radio
- Check the radio is powered on and communication cable is connected
- Restart OmniRig and reconnect from the server
Application Won’t Start
- Ensure .NET Framework 4.7.2 or later is installed
- Try running as Administrator
- Check Windows Event Viewer for error details