Skip to content

AetherSDR v26.10.2 — A unified title bar, a user guide at docs.aethersdr.com and remote operation over CGNAT

Latest

Choose a tag to compare

@ten9876 ten9876 released this 11 Oct 22:32
· 11 commits to main since this release
v26.10.2
f753dbf

106 merged changes from 15 human contributors, AetherClaude and no dependency updates within that total. The operator-facing half gives the main window one 52 px title bar with radio tabs on all three platforms, and starts moving the app onto the AetherSDR style guide: About, AetherRX, AetherTX, AetherModem, AetherMap, AetherGPS, Connect to Radio, AGC-T Calibration and the panadapter now wear the canon. The user guide moves out of the GitHub wiki to docs.aethersdr.com, with a signed PDF manual and a browser-side Log Analyzer, and the app links to it. A Tailscale node inside a FLEX-8000 or Aurora radio carries remote AetherSDR over CGNAT. The Digital Voice Keyer imports any WAV, the panadapter gains FFT Smooth and FFT De-comb, TCI announces tune edges and receivers, and Copy Assist can transcribe before noise reduction. RTL-SDR gains WFM stereo, live PPM, and per-receiver squelch, meters and audio exports, and every official package now carries it. The Hermes-Lite 2 and ANAN-G2 remember their settings across a restart, the HL2's receive audio drops 12 dB to unity, and four IC-7300MK2 control defects are fixed and certified. Underneath, both weekly sanitizer lanes achieved their first clean runs this cycle, but ctr2_hid_thread_port_test remains failing under TSan (#6350). Windows builds are Authenticode-signed, and every release keeps its debug symbols.

The title bar and the visual canon

  • One 52 px title bar on every platform (#6198). RFC #4764. The bar holds the application menu, the brand mark, one tab per known radio, the audio cluster, the applet dock/float controls and the window controls. On Windows and Linux the menus live behind a ☰ button at the left, with every shortcut and Alt+letter mnemonic still working; macOS keeps its system menu bar and native traffic lights. Each radio tab names the radio and states its connection in words. The standalone heartbeat lamp is gone: the tab's dot pulses per heartbeat, and on an unexpected loss it turns red and the tab reads link lost until a deliberate disconnect or new session clears it. The + popover searches discovered radios and offers Disconnect, Rename, Radio setup, Remove from or Add to tabs, Connect manually and Rescan. Windows draws its own caption buttons on Qt 6.12's expanded client area; Linux is frameless with a 6 px resize band. View → Frameless Window remains the escape hatch everywhere. Radio-tab state labels read in sentence case (#6281).
  • On Windows with Frameless Window on, menus no longer flash open and closed and double-click to tune works again (#6328), Windows 10 no longer paints a light strip along the frame edges and Windows 11's border follows the theme (#6269), and the main window keeps its size and position across Frameless toggles, Minimal Mode and restarts instead of drifting a few pixels each time (#6310).
  • The AetherSDR style guide is the visual canon (#6227, #6240). RFC #6226. docs/style/aethersdr-style-guide.md records the canon's colors, building blocks and migration order, and a color.canon.* token group joins both bundled themes. The About window is its first surface: no title bar, rounded corners, the canon ground, the logo in a spark ring, build details in a selectable card, and a Contributor Logbook ↗ button in place of the contributor list and Community Credits. Animations hold still when the OS asks for reduced motion.
  • Tool windows move to the canon (#6334, #6339, #6340, #6341, #6364, #6372, #6345). AetherRX, AetherTX, AetherModem, the PSK Reporter map (now AetherMap, Tools → AetherMap…), the GPS window (now AetherGPS, Tools → AetherGPS…), Connect to Radio, AGC-T Calibration and the AetherRX/AetherTX Settings dialogs become canon windows: no title bar, a corner close button, drag anywhere empty to move, resize from any edge, Esc or Ctrl+W to close. The workspace windows keep their own taskbar entries and no longer follow View → Frameless Window; saved positions carry over. Check boxes and radio buttons in every canon window draw clear checked and selected states. Closing AetherMap by any path, Esc included, now stops its clients and cancels an armed WSPR beacon, and closing AGC-T Calibration during an Auto Sweep restores the AGC-T the sweep started from.
  • The panadapter is the first canon surface in the main window (#6386). A transparent 22 px header with the grip, the slice title and round pop-out, maximize and close buttons lies over the spectrum, which now runs to the top of the pan. The empty middle of the header belongs to the spectrum, so clicking, dragging and the wheel there behave as anywhere else on it. The overlay menu, dBm arrows and marker labels move below the header; slice flags ride over it.
  • The DVK panel follows the canon (#6251). A title-bar-style header with a status line, slot rows as cards, key-cap F-keys, and controls enabled only when they can act. On-air uses the MOX colors and refusals say "failed".
  • Lists, tree views and menus that rely on the app stylesheet draw a selected item in the palette highlight rather than dark text on the accent, which was unreadable on a dark custom accent; the Theme Editor's token list is readable under a light OS palette (#6312, #6322).
  • A popped-out panadapter's window title is plain text and follows slice changes, and a pan with no slice is headed Pan <id> both docked and floating (#6302, #6323).
  • Status-bar indicators work from the keyboard (#6267). The ten click-handled indicators (band stack, +PAN, TNF, CWX, ASR, DVK, FDX, TUN, AMP and TX) take Tab focus, run on Return or Enter, and read as buttons with their on/off state to screen readers. Space stays PTT.

Documentation and support

  • docs.aethersdr.com (#6286, #6298). The user guide moves from the GitHub wiki into the repo as a Docusaurus site with Stable (this release) and Next (main) versions, offline search, a Pandoc/Typst PDF manual attached to each release with a detached signature, generated reference pages checked against the source, and a Log Analyzer that reads a log or support bundle in the browser — nothing is uploaded — and links each finding to its fix. 119 screenshots from a live FLEX-8600 and the demo illustrate 63 pages, with IPs, MACs, serials and locations redacted.
  • The app links to the docs (#6294). The Help menu gains AetherSDR Documentation, Printable Manual (PDF) and Log Analyzer; each bundled help page links its docs page; Help → Support & Diagnostics gains Troubleshooting Guide and Log Analyzer buttons; and help-window links take a readable color in the dark theme. In-app help, README, CONTRIBUTING and several UI strings were brought in line with current behavior (#6250).
  • Failures the Log Analyzer could not see are logged (#6308, #6293). VITA-49 sequence errors per stream (rate-limited), BNR pack install and transfer failures, the Qt platform plugin in use and any fallback, and Hermes-Lite 2 discovery bind failures, unsendable probes and silent sweeps. A -platform argument now counts as the operator's choice in AetherSDR's own Wayland and GPU logic.
  • Every release keeps its debug symbols (#6220). Linux, macOS and Windows builds attach a -symbols.tar.xz archive per platform, verified against what ships, and docs/debugging-crashes.md tells operators what to send after a crash. Help → File an Issue and the bug template link it.

Remote operation and networking

  • Remote AetherSDR over CGNAT through the radio itself (#6273, #6318, #6325). RFC #6271. flex-tailnet-shim is a Tailscale node that runs inside a FLEX-8000 or Aurora radio as a Docker waveform container and relays the SmartSDR control connection and VITA-49 to tailnet clients, closing the radio connection the moment a client goes away. Waveforms → Install… → Remote Access (Tailscale) downloads the pinned, SHA-256-checked image, and Configure… opens the Remote Access window: status, tailnet address, auth key, machine name, an allowlist of who may connect, and 4O3A station devices shared as subnet routes. Network Diagnostics gains a Remote Link view with the tunnel path, radio-side RTT, throughput and where packet loss happens. Version 0.4.1 checks station-device flows against the allowlist, relays only the radio's own datagrams, ends connections a saved access list refuses on a definite refusal only, and never leaves Remote Access waiting on a stuck boot.
  • Network MTU is capped at 1200 over Tailscale (#6319). When the radio or this computer's end of the connection has a tailnet address, AetherSDR caps network_mtu at 1200 so VITA-49 fits the tunnel; SmartLink is excluded and the saved value is never rewritten. An out-of-range or damaged saved MTU is sent as the 1450 default instead of 0. On upgrading: a higher Network MTU set by hand is lowered over Tailscale, with no opt-out.
  • Windows firewall rules ship with the app (#6289). The installer removes AetherSDR's stale inbound rules, including a dismissed prompt's block rule, and adds inbound allows: UDP on every profile, TCP on domain and private networks only. The Store package declares the same rules. A new Network Diagnostics → Windows Firewall page reports the verdict per network profile, the rules behind it and any third-party firewall, with Fix… and Check again. On every platform, a failed external request (update check, QRZ, maps, radar, propagation) is logged with its service, host, error and TLS details on a new aether.network category.

Panadapter and waterfall

  • FFT Smooth and FFT De-comb (#6371). Two sliders under Display → PANADAPTER, both off by default, shape only the spectrum trace; the waterfall, noise-floor readout, FFT Floor Auto and Auto SQL keep the raw bins. FFT Smooth (0–16 px) averages neighboring points in linear power. FFT De-comb (0–600 Hz) replaces a voice's harmonic comb with its cepstral envelope, keeping the signal's outline and peak level and leaving the noise floor as drawn. Both run in the client, so every radio family behaves the same.
  • Flex FFT range (#6241, #6242). Headroom recovery expands only the clipped end of the range, within FlexLib's −180/+20 dBm endpoints, and rewrites the radio's range only while FFT Floor Auto is on and the pan is this session's. Range replies converge the pan model. Releasing the right dBm scale no longer makes the noise floor pop: frames already in flight are reprojected onto the new scale (worst rendered departure 1.53 dB over 20 releases, from about 27 dB). The clipping reports in #6238 stay open; complete band/Go To/preamp trace-bounce removal is not claimed.
  • On the Hermes-Lite 2, FFT FPS and the dBm range survive a restart, stored per pan in the radio's display document; the ANAN-G2 keeps its dBm range the same way (#6140, #6129).

Digital Voice Keyer, CW, spots and speech-to-text

  • DVK Import WAV works (#6247, #6262, #6264). Import follows the SmartSDR API's two-step upload and converts any PCM or float WAV (1–8 channels, 8–384 kHz) to the radio's 24 kHz mono, so clips no longer play at half speed; clips over 10 s are refused. Slot names keep their spaces and their equals signs, a radio refusal shows a readable message, and a SmartSDR+ refusal disables DVK until a later licensed status re-enables it without a reconnect. One operation runs at a time from the moment it is sent, Import re-checks that when it starts, and STOP and Escape reach a start still awaiting its reply. The slot menu's Delete item, which hid a slot until the radio restarted, is removed. Screen readers hear one announcement per change.
  • Copy Assist can transcribe before noise reduction (#6216). RFC #4861. Transcribe from unprocessed audio (off by default) feeds the recognizer the receive audio before client NR and RX effects while you keep hearing the processed audio. On an off-air 40 m SSB recording, word error rate fell from 35.2% after NNR to 22.7% unprocessed.
  • GoCluster spots parse cleanly (#6311). The fixed GoCluster tail (path, grid, confidence tag, time) is split from the comment once the banner names a GoCluster node; padded comments collapse on every server; a leading <mode> <n> dB fills the spot's SNR; and a Hide Unverified toggle on SpotHub's Cluster and RBN tabs drops calls GoCluster tags ?. SpotHub's Clear no longer leaves NUL bytes in the log.
  • Live CW contacts are opt-in (#6268). The QRZ contact card no longer appears inside the CW decoder. View → Show live CW contacts (off by default) opens contacts in a separate window with a full-width close button, and closing it turns the feature off until you turn it back on.
  • DeepFist, on builds with ENABLE_DEEPFIST_EXPERIMENT, gates far less weak off-air CW (activity threshold 3) and colors each letter by the model's confidence in the decoder's four bands (#5953, #6103).

Transmit, TCI and controllers

  • TCI announces tune edges (#6200, #6206). Every TUNE start and stop, from the TX applet, a TCI client or the radio, is broadcast as tune:<trx>,true|false; after the carrier's trx: edge, so tuner and antenna-switch controllers such as HB9DUT's ICOM AH-4 interface follow it. A tune: SET always gets an answer, a TCI-started tune stops when its client disconnects, and the init burst carries the tune state. A TUNE stopped from outside the applet no longer leaves every later TUNE refused.
  • TCI sends rx_enable when a receiver opens and, after a 500 ms settle that ignores band-change recreates, when it closes (#6365).
  • MIDI and keyboard Mode Up / Down step only through the modes the radio reports and gain FDVU and FDVL (#6038). A RADE Modem MIDI and Ulanzi Dial target toggles RADE on the active slice (#6031).
  • On Windows, Ulanzi Dial detection scans only the dial's VID/PID, ending RC-28 tuning lag of up to 5 s while it scanned every HID device (#6256).
  • CTR2 USB link extensions and the AetherKnob (#6338). RFC #6332. A device on the CTR2 Proxy's USB relay can negotiate per-device extensions; a stock CTR2 stays on plain link v0, unchanged. The first two send a 32-bar spectrum of the audio being heard and the relay's UDP port, which fixed meters that never moved through the relay on a FLEX-8600. Both were verified with an AetherKnob on a FLEX-8600.
  • Elecraft KPA1500 applet (#5905). A direct-TCP amplifier panel under Setup → Peripherals: forward and reflected power, SWR, PA temperature, band and faults, operate/standby on the amplifier's readback, the internal ATU and antenna select. It does not key the amplifier, and it has not yet been run against a physical KPA1500.
  • The PGXL panel's key reads MEffA, as the rail button does (#5984). The ALC bars on the Phone and CW applets fill from the left to their value's tick (#6236).
  • Over the automation bridge, the VOX button can be switched off with TX permission granted (#6375).

Audio and system

  • Streaming survives a minimized or covered window (#6195). RFC #6192. The audio, DAX, TCI, radio I/O, RADE and DSP-build threads run at Qt 6.12's high quality-of-service, macOS App Nap and Windows power throttling are turned off for the process, and idle system sleep is blocked while a radio is connected. On upgrading: Prevent system sleep while connected is now on by default on every OS (a profile that turned it off stays off); it never stops the display blanking or the screen locking, and on Linux it no longer inhibits the screen locker.
  • A missing audio device no longer erases your choice (#6378). When a saved input or output device is absent, AetherSDR falls back to the system default for the session without rewriting the saved device, and returns to it when it reappears.
  • The title-bar speaker mutes a radio's line out only where the radio has one, and refuses aloud where there is neither line out nor PC Audio; Radio Setup's Line Out and Headphone rows are dimmed with their reason on radios without them (#6260, #6353).
  • Output volume follows the path you hear (#6129). With PC Audio off, the master slider, volume hotkeys, FlexControl, MIDI and TCI volume all drive the radio's line-out level and no longer rewrite the PC level. On a Flex the step_up/step_down shortcuts set the slice step as the STEP buttons do.
  • The NNR filter takes the FFTW planner lock, ending a crash when NNR was rebuilt during NR2 wisdom generation, and quitting during a long wisdom plan waits it out instead of aborting (#6306).

Hermes-Lite 2

  • The HL2 remembers where you left it (#6259). TUNE power per band, FFT AVG, receivers B–D, each receiver's NB/NB2, APF, squelch, RIT/XIT, audio gain and pan and pan center, manual notches, and the automatic RF gain law and floor are restored on connect. Receivers come back through the normal add path, so the current span's receiver ceiling still decides how many reopen.
  • Receive audio leaves WDSP at unity (#6254). On upgrading: HL2 receive audio is 12.04 dB quieter at every AF slider position, on the speaker, the HL2's codec, TCI and the decoders; a steady tone previously left the chain about 10 dB above full scale. If you pulled the AF slider down to about 25 to stop strong stations distorting, put it back up.
  • CW is sent at the TUNE carrier level (#5975). On upgrading: at a fixed RF Power setting, host CW is 6.02 dB stronger than before, matching TUNE; the drive register remains the power control.
  • The TX ALC ramps inside each block (#6245). While reducing, the ALC gain follows a smooth path to its new value instead of a 21.3 ms staircase, cutting energy away from the audio from −36.7 to −57.8 dBc at 21.4 dB of reduction without letting a sample exceed the target. The level, target and release are unchanged.
  • Discovery and manual-IP connection probe every active local IPv4 interface, so an HL2 on a second Ethernet adapter of a multi-homed host is found (#6009).
  • The forward-power peak hold skips the non-measurement words the radio sends for about 2 ms after the T/R switch-over (#6230). A band-stack recall into DIGU or DIGL keeps AGC off (#6150).
  • Radio Setup's six TX timing fields are dimmed with their reason on a radio that cannot take them (#6166).
  • Tests pin the TXA transmit passband and key-up onset (#6347) and take the ADC-pairing age gate off the wall clock (#6164).

ANAN-G2

  • The G2 remembers where you left it (#6129). Frequency and mode (14.175 MHz USB on a first connect), tuning step, the radio's own output level (including 0) and the dBm range are restored per radio. The HL2 and legacy RTL now also remember the tuning step.
  • AGC-T covers −20 to 120 dB and drives the AGC-off gain (#6282). The range matches deskHPSDR and Thetis, the knob shows what the DSP is running, it starts at 79.4 dB, and a reconnect keeps the operator's value. On upgrading: a saved AGC-T value now maps to a different gain, so weak signals that needed AGC-T near the top no longer do. The AGC-T calibrator's AGC-off sweep now climbs from 0 on every radio.
  • The status bar's Network: field shows the G2's link (bytes, DDC packets and loss), and the PA temperature row, which nothing can feed on this radio, is withdrawn (#6137). The supply voltage is shown in the status bar and Meter applet, read from the input that carries it (13.68 V against a 13.65 V meter) (#6211).
  • A second noise blanker (#5966). On the ANAN and Hermes-Lite 2, the NB button cycles Off → NB → NB2, where NB2 is WDSP's interpolating impulse blanker, with a fill selector while it runs. Flex and Icom keep the radio's own blanker.

Icom

  • On the IC-7300MK2 and IC-705, COMP is the radio's 0–10 and a setting no longer snaps back to DX+ on its own confirmation read; a numeric readout also appears on the IC-9700's 0–100 (#6174). The IC-705 is assumed to match the MK2 and still needs a live check.
  • Squelch set on at threshold 0 reads back as on, so it can no longer stick off (#6175). After a preamp or ATT write the other stage is read back at once, so the radio's interlock shows immediately instead of at the next 3 s poll (#6183).
  • The IC-7300MK2's SQL line is drawn where the radio gates (#6184). A measured scale, −194.8 + 1.49 × level dBm, replaces Flex's, within 0.9 dB RMS with the preamp on. On upgrading: Auto SQL is not offered on the MK2, so a slice in Auto drops to Manual. The IC-705 and IC-9700 keep the Flex scale until measured.
  • radiocert meters gains control-domain, front-end-interlock and squelch-scale stages that catch these four classes of defect on any radio that publishes the controls, and a new RX-only persist runner checks them across a restart (#6205).

RTL-SDR

  • Multi-receiver delivery and RTL in every official package (#6083). RFC #5468. Each receiver has its own manual or Auto squelch, a relative receive meter, APRS on the selected receiver, stable TCI receiver mapping and native receive DAX feeds on Linux and macOS. The normal launch still opens one receiver; two, four or eight are an explicit evaluation, not a production claim. The official AppImage, macOS DMG and Windows packages now require and bundle the RTL backend with a pinned libusb.
  • WFM stereo (#5973). A broadcast-FM recipe decodes stereo at 192 kHz with switchable 75/50 µs deemphasis and a pilot indicator, behind a native WFM applet, with settings kept per device.
  • Live PPM adjustment (#6082). PPM edits apply after a 200 ms debounce or on Apply, with hardware readback kept separate from the requested value.
  • The RTL tests follow the qualified-WFM gate and build without the RTL backend (#6263).

DSP and stability

  • WDSP patch 16 takes the DSP lock when the TX bandpass changes, so a TX filter change while transmitting with COMP on can no longer run blocks with the post-compressor bandpass bypassed; patch 17 closes three races in the panadapter analyzer, including a torn spectrum frame (#6173).
  • Tearing down a TX channel waits for WDSP's PureSignal correction thread instead of freeing memory it may still use (WDSP patch 22) (#6261).

Project and packaging

  • Windows releases are Authenticode-signed (#6307). The setup exe, its uninstaller and every exe and DLL in the setup, portable ZIP and MSIX carry a timestamped Azure Artifact Signing signature, so security suites can build reputation for one publisher instead of flagging each update. Signing runs in a job of its own, with OIDC credentials limited to release tags.
  • Installed Linux source builds keep the pinned Qt's runtime path (#6194). qtkeychain's libsecret check looks for the backend itself, fixing Ubuntu builds (#6275).
  • Sanitizers: both weekly lanes ran green for the first time, with zero reports — every ASan, UBSan and TSan finding on the full tree was fixed (#6173), a leak now fails its test (#6176), timeouts scale under instrumentation (#6208), long suites run as focused cases (#6196), and tests reach WDSP only through WdspChannel, enforced by Static checks (#6309).
  • CI and build: shared test sources compile once and RelWithDebInfo defaults to -g1 (#6217); CodeQL builds the production targets with a coverage check (#6182); a manual Docs run on main deploys the site (#6291); the CTR2 proxy test no longer races the kernel for a port (#6296); and the title-bar test skips Alt+F where Qt has no mnemonics (#6359).
  • Warnings: Q_OS_MAC becomes Q_OS_MACOS (#6355), GCC 14 deprecation and nodiscard warnings are cleared (#6366, #6369), and setup-script outputs are ignored by git (#6361, #6363).
  • AGENTS.md carries the user-docs workflow (#6304), and /pr-review and /pr-land build only the targets a review runs (#6215).

Contributors

Thanks to @ten9876 (44 commits — maintainer; the canon windows, style guide and panadapter header, docs.aethersdr.com and its in-app links, the in-radio tailnet shim and Tailscale MTU cap, Windows firewall rules and Authenticode signing, DVK import, FFT Smooth and De-comb, GoCluster spots, the CTR2 link extensions, keyboard status indicators, the NNR crash fix and the sanitizer lanes), @on8st (13 commits — HL2 unity receive audio, the in-block ALC ramp, forward-power and discovery logging, FFT FPS and dBm persistence, bookmark AGC, dimmed TX timing and headphone rows, the ALC bar, the saved audio device and the VOX bridge fix), @jensenpat (10 commits — the unified title bar, stream-thread QoS and sleep control, the IC-7300MK2 COMP, squelch, interlock and SQL-line fixes and their radiocert stages, Flex FFT range repairs and opt-in CW contacts), @w5jwp (6 commits — Qt 6.12 and GCC 14 warning cleanup, setup-script ignores and the title-bar test on macOS), @chibondking (5 commits — Windows frameless menus, frame edge and geometry, pan window titles and readable tree views), @jcmerg (5 commits — TCI tune broadcasts, the tune latch, HL2 state memory, line-out gating and the PureSignal teardown), @tropo1234 (5 commits — ANAN-G2 memory, AGC-T range, link telemetry, supply voltage and NB2), @skerker (4 commits — DeepFist gating and confidence colors, MIDI FDVU/FDVL and the RADE toggle), @Ozy311 (3 commits — RTL-SDR WFM stereo, live PPM and multi-receiver delivery with RTL packaging), @rfoust (3 commits — Linux install RPATH, narrowed CodeQL builds and sanitizer test bounds), @dacacioa (2 commits — HL2 CW carrier level and multi-interface discovery), @G6PWY-Chris (1 commit — the PGXL MEffA key), @K5PTB (1 commit — Copy Assist before noise reduction), @nigelfenton (1 commit — the Ulanzi Dial VID/PID scan on Windows), @nreed97 (1 commit — TCI rx_enable), @aethersdr-agent (2 commits — AetherClaude orchestrator; the KPA1500 applet and radio-tab sentence case). Counts cover primary commit authors; co-author credit remains in the commit history.

Welcome to first-time contributor @dacacioa!

Downloads

Tag-triggered CI publishes Linux AppImages (x86-64 and aarch64), macOS DMGs (Apple Silicon and Intel), and Windows installers and portable ZIPs as jobs finish. Assets may still be building when this release first appears. macOS signing and notarization, and release checksum and signature generation, run in their respective workflows.

Full diff: v26.10.1...v26.10.2. See verification instructions.

73, Jeremy KK7GWY & Claude (AI dev partner)