DIT DOTS KO6ETZ HAM RADIO • ELECTRONICS • SOFTWARE 14.074 MHz TX PWR RX

ShackLink Web Client

Web Client – ShackLink

Full radio control from any web browser, anywhere. Tune your rig, transmit CW / RTTY / PSK31 / voice, send SSTV / WEFAX images, decode all eight digital modes, watch the SDR panadapter, and listen in HiFi — all from a single browser tab. Tabbed work area (Decoder / Image TX / Visualization / SDR) keeps the radio control card always visible while you switch contexts. Serve it locally on your LAN, or expose port 8084 through a Cloudflare Tunnel and your shack travels with you.

💡 Key Features

🌐

Control From Anywhere

Single-port (8084) WebSocket carries everything — works through Cloudflare Tunnel, Tailscale Funnel, nginx, or a port-forward. Optional HMAC auth.

📻

Frequency & Mode Control

Click / scroll / arrow-key tune any digit; full mode selection (USB, LSB, CW, AM, FM, DIG, RTTY)

🔌

Multi-Rig Support

Switch between up to 4 OmniRig rigs with custom names. VFO A/B, Split, RIT, XIT all bidirectional.

🎧

Dual Audio Paths

12 kHz PCM low-latency for live tuning + 192 kbps stereo HiFi MP3 for broadcast-quality listening — toggle per session.

🔢

Eight Digital Decoders

CW, RTTY (auto-detect baud/shift), PSK31 (9 BPSK/QPSK variants with AFC and FEC), FT8/FT4 via WSJT-X, SSTV (19 modes across Robot/Martin/Scottie/PD/Wraase/Pasokon), WEFAX (weather facsimile with phasing-lock detector), NAVTEX (SITOR-B maritime safety), and APRS (AX.25 packet radio). Mode switch broadcasts to all clients.

🔊

Transmit Support

Server-driven TX in CW, RTTY, PSK31, voice (16-bit PCM uplink on the WS binary channel), and image modes (SSTV + WEFAX, on a dedicated tab). Single-owner lock prevents collisions; chat-style timeline shows incoming + outgoing. TX:CONFIG protocol keeps every TX setting in sync across all clients.

📈

SDR Panadapter

Live scope + scrolling waterfall from the server’s SDR. Multi-SDR slot selector when multiple devices are active. Click-to-tune, drag-pan, RF or IF (transverter) mode, FFT size 4K–32K. DX spot and broadcast station markers overlaid on the waterfall. Navigator overview with rig frequency marker shows zoom position in the full band.

🎥

Audio Recording & Visualization

Record to WAV / MP3; live spectrum + waterfall display with adjustable gain

💾

24 Memory Channels

Server-synced slots with labels — all clients see the same memories instantly. Right-click to save, click to recall.

🎬

Tabbed Work Area

Five-tab work area below the always-visible radio control card: Decoder, Image TX, Visualization, SDR, and Map. The active tab is persisted to localStorage so reload restores it.

📱

Touch & Mobile-Ready

Same UI works on phone, tablet, or desktop browser. No separate mobile build required.

🔒

HMAC-SHA-256 Auth

Optional challenge-response handshake gates the WebSocket. Wrong-secret clients are dropped before any state or audio is sent.

🔄

Auto-Reconnect

Resumes streaming and decoder subscriptions automatically when the network blips

Web client SDR panadapter and waterfall

The SDR panadapter — live scope and scrolling waterfall with click-to-tune, DX / broadcast-station markers, and a navigator overview, right in the browser

🚀 Accessing the Web Client

Built-in Server (Recommended)

The server includes a built-in unified HTTP + WebSocket server on port 8084. Simply open your browser to:

http://[SERVER_IP]:8084

Example: http://192.168.1.100:8084

The same port serves the web client (/), the HiFi MP3 stream (/hifi.mp3), and the WebSocket endpoint (/ws) used for control, audio, voice TX, and SDR. One port is all you need to expose.

🌐 Remote Access

The single-port architecture means port 8084 can be exposed via Cloudflare Tunnel, Tailscale Funnel, nginx + Let’s Encrypt, or a plain port-forward, and the entire client — including audio — works through the tunnel. The public URL becomes https://yourname.example.com (no port number) when terminated at TLS. Setup recipes ship with the server in docs/remote_access_recipes.md.

🔒 Authentication

For internet-facing deployments, enable Tools → Security on the server and paste the shared secret into the connect form’s Auth secret field (next to Server IP / Port). The browser handles the HMAC-SHA-256 challenge-response handshake automatically using crypto.subtle; the secret is stored in the browser’s localStorage for convenience between sessions.

🎮 Frequency Tuning

Mouse/Desktop

  • Click any digit to select it (highlighted)
  • Scroll mouse wheel over any digit to change it
  • Arrow Up/Down keys change the selected digit
  • Arrow Left/Right keys move selection between digits

Touch/Mobile

  • Tap any digit to select it
  • Tap arrows to increase/decrease selected digit
  • Long-press arrow buttons for continuous tuning

🎧 Audio Streaming

Starting Audio

  1. Click the Start Audio button
  2. Browser may prompt for audio permission – click Allow
  3. Audio begins streaming from the server

⚠ Browser Autoplay Policy

Browsers require user interaction before playing audio. Click something on the page first.

🌈 Spectrum & Waterfall Display

The web client includes a real-time spectrum analyzer and waterfall display for visualizing audio:

Web client audio spectrum and waterfall

The Visualization tab — real-time spectrum curve over a scrolling waterfall of the decoded audio

Display Components

  • Spectrum Analyzer – Real-time frequency curve at top showing current signal levels
  • Waterfall – Scrolling spectrogram below showing signal history over time

Controls

  • Show/Hide – Toggle button to show or hide the display
  • Gain slider – Adjust brightness/sensitivity (0.5x to 5x)

Usage

  1. Start audio streaming first
  2. Click Show in the Waterfall section
  3. Adjust gain slider for optimal visibility

🎨 Ham Radio Color Scheme

The waterfall uses a traditional ham radio color palette: black (noise floor) through blue, cyan, green, yellow, red, to white (strongest signals). The spectrum analyzer uses a matching cyan color for the frequency curve.

🔢 Digital Decoders

Decode Modes (Decoder tab)

The web client supports eight decode modes, switchable via the row of mode buttons. The selection is broadcast to every connected client.

  • CW (Morse) – Real-time CW decoding up to 40 WPM
  • RTTY – Baudot decoding with auto-detect for baud rate and shift
  • PSK31 – Phase Shift Keying decoding; 9 modes (BPSK-31/63/125 and QPSK-L/U-31/63/125 with FEC), AFC, center frequency 200–3000 Hz, and squelch
  • FT8 – FT8/FT4 decodes from an external WSJT-X instance (UDP port 2237 on the server)
  • SSTV – Slow Scan TV image reception with progressive rendering
  • WEFAX – Weather facsimile decoder with phasing-lock detector, IOC 576/288 at 60/120 LPM. Same progressive image rendering and progress bar as SSTV.
  • NAVTEX – Maritime safety message decoder (SITOR-B FEC, 100 baud, 170 Hz shift). Decoded characters stream to the text display.
  • APRS – AX.25 1200 baud Bell 202 AFSK packet radio. Decoded packets display source callsign, position, and beacon text.
Web client digital decoder

The Decoder tab — eight-mode selector with live decoded text

FT8 Color Coding

FT8 messages are color-coded by signal-to-noise ratio (SNR):

SNR RangeColorSignal Quality
0 dB and aboveBright GreenStrong signal
-10 to -1 dBWhiteModerate signal
-15 to -11 dBOrangeWeak signal
Below -15 dBRedVery weak signal

💡 Server-Side Decoding

All decoding is performed on the server for maximum accuracy. The server processes the original audio without network-induced jitter or timing artifacts.

SSTV Image Decoder

The SSTV decoder displays images as they are received:

  • Select SSTV from the decode mode buttons
  • Images render progressively line by line
  • Mode name and progress percentage are displayed
  • Auto-detects mode from VIS code or use forced mode

Supported SSTV modes: Robot 36/72, Martin M1/M2, Scottie S1/S2/DX, PD90/120/160/180/240/290, Wraase SC2, Pasokon P3/P5/P7

Web client SSTV image decoder

SSTV / WEFAX image reception — the picture renders progressively, line by line, with a mode + progress readout

🎥 Audio Recording

Record the audio stream to WAV or MP3 files:

Recording Controls

  • Format selector – Choose WAV or MP3 format
  • Record button – Start/stop recording
  • Duration display – Shows elapsed recording time

How to Record

  1. Start audio streaming first
  2. Select desired format (WAV or MP3)
  3. Click Record to begin
  4. Click Stop to end and download

💾 File Naming

Files are automatically named with frequency, mode, and timestamp: recording_14.074MHz_USB_2026-01-15T12-30-00.mp3

Format Comparison

FormatFile SizeQualityCompatibility
WAVLarge (~1.4 MB/min)LosslessUniversal
MP3Small (~120 KB/min at 128kbps)Good (128kbps)Universal

🎤 Image TX (SSTV + WEFAX)

Switch to the Image TX tab to send images directly from the browser. The radio control card stays visible above the tab content so you can keep an eye on frequency and TX state while you work with the image picker.

  1. Pick SSTV or WEFAX in the mode selector
  2. For SSTV: pick a sub-mode (Martin M1, Robot 36, Scottie S1, …). For WEFAX: pick IOC (576 / 288) and LPM (60 / 120).
  3. Choose Image — the picker stages it locally and the resampled preview appears. Local pick is also synced to the server’s staging store so a different client could Send immediately without re-uploading.
  4. Click Send — the image is uploaded over the WebSocket as binary frames tagged 0x04 (chunked, SHA-256 verified, 5 MB cap). The server stages it (per-client cap of 4, 10-min idle GC), then keys the encoder with TX:KEY:SSTV:<imageId>:<mode> or TX:KEY:WEFAX:<imageId>:<ioc>:<lpm>.
  5. Watch the live progress bar; Abort at any time
  6. Other connected clients see TX:STATUS and TX:PROGRESS so a bystander can watch the line counter advance

🔒 Single-owner TX lock

The server enforces a single TX owner across every transport. If another client (server / desktop / web / HA / mobile) is keyed when you click Send, the request is refused with TX:LOCKED:<owner> and your local UI greys out the button until the lock releases.

Web client image TX

The Image TX tab — stage a picture, pick SSTV / WEFAX, and watch the live send-progress bar

🗺️ Propagation Greyline Map

The Map tab shows a live greyline propagation map — a world map with the day/night terminator drawn across it. The greyline (the band of twilight sweeping the globe) is where long-haul HF propagation is often at its best, so it’s a quick visual cue for when and where the bands are likely to open. Like every other tab, the radio control card stays pinned above it.

Web client propagation greyline map

The Map tab — greyline propagation map with the day/night terminator across the world

🌐 Browser Compatibility

BrowserVersionStatus
Chrome66+✓ Full support
Firefox76+✓ Full support
Safari14.1+✓ Full support
Edge79+✓ Full support
Chrome Android66+✓ Full support
Safari iOS14.5+✓ Full support

🔧 Troubleshooting

Cannot Connect

  • Verify server IP address and port (8084)
  • Ensure ShackLink Server is running (HTTP status indicator should be green)
  • Check firewall allows port 8084 — Tools → Configure Firewall on the server creates the rules automatically
  • If you get a brief “Connected” then immediate “Disconnected”: the server has authentication enabled and your secret is missing or wrong. Open Tools → Security on the server, copy the secret, and paste it into the Auth secret field on the connect form.

No Audio

  • Click somewhere on the page first (browser autoplay policy)
  • Check browser allows audio for this site
  • Ensure audio streaming is enabled on the server

Audio Glitches

  • Use wired network instead of WiFi
  • Close other browser tabs using audio
  • Serve over HTTPS for AudioWorklet support