Releases: aethersdr/AetherSDR
Release list
AetherSDR v26.7.1 — 3D Stacked-Trace FFT Spectrum
🌄 Headline — 3D Stacked-Trace Spectrum
AetherSDR v26.7.1 brings a brand-new 3D stacked-trace FFT spectrum. A
Spectrum: 2D / 3D toggle turns the panadapter into a perspective
stacked-trace surface — a rolling history of FFT traces receding into the
distance — so you can see a band's activity build over time, not just the
live sweep. Ridge height is anchored to the measured noise floor with a
floor→peak colour gradient, single-frame impulse bursts are rejected, and a
3D Floor depth slider tunes how far below the floor to surface. The
waterfall, scales, and every overlay (spots, memories, markers, band plan) keep
rendering underneath, and the right-edge dBm scale carries into 3D as a
full-height linear axis. Cross-platform (macOS / Windows / Linux) with graceful
GPU→CPU fallback.
✨ Also new
- NVIDIA BNR — in-process AI noise removal, no container. The Maxine AFX
denoiser runs directly inside AetherSDR on your local NVIDIA RTX/GeForce GPU
(Linux + Windows), download-on-demand, no Docker. The old NIM/gRPC
microservice backend is gone. - 60 fps GPU panadapters. A per-pixel GPU FFT trace (no per-frame CPU vertex
bake) plus present coalescing lift the FFT ceiling from 30 → 60 fps at flat
CPU cost — the pan's render cost is now width- and fps-independent. - Mouse-over numeric readouts on the TX meters. Hover SWR / power / ALC /
mic-level / compression for an exact value badge (12 W,1.12 : 1,
-6.4 dBFS) instead of eyeballing the bar. - FlexLib-sourced model capabilities. Extended-DSP (NRS/RNN/NRF), diversity,
and slice/pan counts now come from the FlexLib platform table — fixing the
AU-510 and ML/CL "S"-variant radios where the extended filters never appeared. - Plus SWR manual sweep range, CW/CWX sidetone captured in recordings,
KiwiSDR protocol metadata, and a lower RX speaker latency default.
📥 Downloads
- Windows —
AetherSDR-*-setup.exe(installer) below. (Microsoft Store
submission uses the maintainer.msixupload.) - macOS —
AetherSDR-*.dmgbelow. - Linux —
AetherSDR-*.AppImagebelow. - Stream Deck —
com.aethersdr.radio.streamDeckPlugin(Elgato) /
streamcontroller-aethersdr.zip(Linux/OpenDeck).
Verify downloads per README → Verifying Downloads.
📋 Full changelog
29 commits since v26.6.5.
Added
- 3D stacked-trace spectrum panadapter — perspective FFT-history surface, floor-anchored ridges, 3D Floor depth. (#3899)
- dBm / noise-floor scale in 3D mode — full-height linear axis synced to the 3D Floor slider. (#3937)
- BNR — NVIDIA GPU AI noise removal, in-process, no container — Maxine AFX on a local NVIDIA GPU (Linux + Windows), with a one-time runtime download. (#3902)
- AFX download-on-demand — the ~2 GB GPU runtime is fetched on first use, sha-pinned; the shipped app carries none of it. (#3902)
- Mouse-over numeric readouts on the TX meters — SWR / power / ALC / mic-level / compression. (#3936)
- SWR sweep — optional manual range — confine a sweep to a sub-band; can only narrow, never widen past the band plan. (#3885)
- Local CW/CWX sidetone captured in Client-Side recordings — one continuous file across SSB↔CW; Client-Side recording is now the default. (#3895)
- KiwiSDR protocol metadata scaffolding — richer receiver metadata +
get kiwibridge snapshots (clean-room). (#3898) - Automation bridge —
get dsp,streams resync,selectRow/windowverbs, TX-guard fix, DSP-button a11y. (#3920)
Changed
- BNR's container/microservice (NIM, gRPC) backend removed — BNR is now purely the local in-process AFX denoiser; drops the grpc/protobuf build dep. (#3902)
- Faster panadapters — 60 fps ceiling + per-pixel GPU FFT trace, present coalescing, and a
get panstatsbridge verb. (#3958) - Model capabilities now sourced from FlexLib — fixes AU-510 / MLS-9601 / CLS-9301 extended-DSP, corrects FLEX-6500 and ML/CL diversity. (#3954, #2177)
- Cut RX speaker latency for USB and local audio — default cap 200 → 100 ms, explicit 50 ms Windows device buffer. (#3897)
- Display pane grouped into labeled sections with a dedicated background Off button. (#3935)
Fixed
- Windows multi-pan crash (QRhiWidget cleanup on all GPU platforms). (#3922)
- Profile Switcher swallowed the first Space PTT / CW key. (#3926)
- New Panadapter Cancel button overlapped the layout grid. (#3941)
- RC-28 auto-snap now sticks (wheel accumulator re-based to the snap). (#3940)
- KiwiSDR 3D trace / waterfall alignment during pan/zoom. (#3942)
- Cross-band net tune routed through the canonical tune policy. (#3921)
- DX spot tooltip blocked by the passband hit-test. (#3903)
- TCI TX resamples from the client-declared rate, not a hardcoded 48 kHz. (#3892)
- QsoRecorder playback stuck-mute on sink-open failure. (#3891)
- Auto-unkey momentary keyboard PTT/CW on focus loss / modifier-release. (#3890)
- Antenna Genius Port B visibility on manual-IP connections. (#3900)
- Windows manifest embedded via
target_sources. (#3947)
🙏 Contributors
Thank you to everyone who shipped v26.7.1 — features, fixes, on-air testing, and review:
- @jensenpat — Pat
- @ten9876 — Jeremy (KK7GWY)
- @rfoust — Robbie Foust
- @M7HNF-Ian — Ian (M7HNF)
- @wa2n-code — Wayne Roth (WA2N)
- @gauthig — Garrett
- @TnxQSO-Admin — TnxQSO
Development used Claude Code (Opus 4.8 / Sonnet 5 / Fable 5) alongside the @aethersdr-agent automation bot. New here? Open an issue or PR — the contribution guide is in CONTRIBUTING.md. 73!
Full Changelog: v26.6.5...v26.7.1
Stream Deck Plugins (stable)
Canonical, version-independent home for the AetherSDR Stream Deck integrations.
These plugins change rarely and are decoupled from app version tags, so they
live here at stable download URLs instead of being re-attached to every v*
release:
- Elgato Stream Deck —
com.aethersdr.radio.streamDeckPlugin - StreamController (Linux) —
streamcontroller-aethersdr.zip
Refreshed automatically by the Stream Deck Plugins workflow whenever
plugins/ changes on main.
AetherSDR v26.6.5
AetherSDR v26.6.5
Headlined by KiwiSDR receive sync (GCC-PHAT audio + visual alignment between the Flex and a public Kiwi), SmartMTR TX meters (SWR / forward-power / compression gauges for the VFO flag), a new PROF profile-switcher applet, and a large agent automation/test bridge expansion (radio connect/disconnect, display-stream leak detection, custom context-menu inspection, and a panadapter/waterfall control surface) — plus a broad wave of spectrum, VFO-flag, and KiwiSDR stability fixes. (50 commits since v26.6.4.)
New features
- KiwiSDR receive sync — a GCC-PHAT Auto-Assist that time-aligns the Flex and a public KiwiSDR receiver in both audio and the spectrum/waterfall, so a diversity pair stays phase-coherent. (#3872)
- SmartMTR TX meters — selectable SWR, forward-power, and compression gauges with analog ballistics for the VFO flag meter; VOX-keyed transmit now engages the meter and audio gate too. (#3776, #3862)
- PROF (Profile Switcher) applet — live Global / TX / Mic profile selection from a sidebar applet. (#3829)
- Resizable CW decode panel with an adjustable, persistent font size. (#3824)
- APRS message-services picker on the Recipient field. (#3828)
- RC-28 rotation-sensitivity divider with auto-snap to 1 kHz. (#3875)
- SWR sweep CSV export. (#3882)
- Master Volume Up/Down configurable keyboard shortcuts. (#3820)
- S-meter configuration moved to a right-click context menu, plus a needle pivot cover with a themed backlight glow (both tokenized for the theme subsystem). (#3859)
Agent automation / test bridge
A large expansion of the in-app, agent-drivable bridge (off in production; gated behind AETHER_AUTOMATION). See docs/automation-bridge.md.
- Radio connect/disconnect commands. (#3851)
- Radio-side display-stream inventory + leak detection (
streamsverb) — surfaces leaked/duplicate panadapter & waterfall streamsget panscan't show. (#3856) contextMenuverb to trigger/inspect custom right-click menus. (#3883)- Observability fields plus close/drag/showMenu/pan verbs, grab pan, and a token-anchored TX guard. (#3842)
- A Panadapter/Waterfall control surface — antennas, CWX, floors, pan management. (#3832)
- Bridge fidelity for slice TX, key/PTT, menu reachability, lineedit submit, resize, and multi-instance station identity. (#3819)
Changes
- WFM toggle relocated to the DAX pan menu so the frequency digits no longer clip. (#3853)
- KiwiSDR audio mutes during non-FDX transmit. (#3865)
- AetherDSP Settings now toggle from the DSP-tab ADSP button; the ADSP launcher also accents when a client NR module is active. (#3881, #3822)
- PTT (Hold) honors its reassigned key instead of a hardcoded Space. (#3884)
- GPU flag-sprite machinery excised — slice flags are now always live. (#3806)
Fixes & hardening
- Closing a panafall-created panadapter now frees its waterfall stream on the radio — the teardown sends the FlexLib-correct Panadapter.Close + Waterfall.Close pair. (#3843, #3855)
- KiwiSDR proxy redirect transport (proxy → proxy2). (#3850)
- Kiwi waterfall pan/zoom stalls — moved off the GUI thread. (#3825)
- Pan Lock stands down during a slice drag and recenters on release. (#3786)
- VFO flag-side pan following and diversity-pair flag placement. (#3866, #3880)
- Zoomed FFT spectrum rendering, plus a smoother FFT trace with a clamped display scale and an EMA reset on TX→RX so the floor doesn't linger. (#3836, #3847, #3831)
- DAX RX stream create/remove storm that dropped connection quality to red. (#3796)
- Keyboard/space PTT routed through the Quindar coordinator. (#3798)
- AetherControl window clamped to the screen height. (#3795)
- Panadapter split-pair shown for an externally-initiated split. (#3794)
- SpotHub clear buttons persist; counter-desync and console-clear fixes. (#3823)
- Floating window fill for width-capped applets. (#3827)
- Automation: widget click/toggle deferred out of the socket read callback (#3826); tightened mark→tail log correlation (#3793).
- CWX drift-test teardown heap-use-after-free. (#3799)
Performance
- VITA-49 RX buffer default raised to 4 MiB with an operator-adjustable slider — eliminates burst drops and auto-throttle fps caps. (#3811)
- Reuse GPU FFT-trace vertex scratch buffers + guard against a 1-bin spectrum. (#3782)
- Skip overlay re-bake on cursor-move when no readout is shown. (#3780)
Packaging / CI
- SHA-pinned actions drop version comments to stop Dependabot drift. (#3867)
- Dependabot:
actions/cache5.0.5→6.1.0 (#3864),actions/setup-python6.2.0→6.3.0 (#3863).
Contributors
Thanks to everyone whose work landed in v26.6.5 — maintainers and community contributors alike:
@jensenpat · @rfoust (Robbie Foust) · @ten9876 (Jeremy, KK7GWY) · @svabi79 (Jan Svabenik, HB9HSJ) · @dsocha (Dariusz Socha, SQ5X) · @wa2n-code (Wayne Roth, WA2N) · @dawkagaming (Dawid Kulas) · @M7HNF-Ian (Ian, M7HNF)
…with automated PR review/triage from @aethersdr-agent and dependency updates via @dependabot. Every contribution, headline feature or one-line fix, counts — thank you all.
Full changelog: v26.6.4...v26.6.5
Linux (AppImage), Windows (installer), and macOS (DMG) build artifacts are attached below as the platform CI jobs complete; signed checksums follow.
AFX BNR pack assets (2.1.0)
Supporting assets for AetherSDR's Local (AFX) BNR backend — not an app release.
The in-app downloader fetches these NVIDIA-provided bits and caches them; CUDA
libraries are pulled separately from NVIDIA's PyPI wheels. The pack bundles the
NVIDIA license texts (licenses/) and NOTICE.txt; the app shows a one-time
NVIDIA license acceptance the first time BNR is enabled. Licensed for use on
NVIDIA RTX / GeForce RTX GPUs on a single-user PC/workstation. See
docs/nvidia-bnr.md.
| Asset | GPU arch | sha256 |
|---|---|---|
afx-bits-2.1.0-linux-x86_64-sm_89.tar.zst |
sm_89 (Ada / RTX 40-series) | 0bfe85b0…395b67 |
Other GPU architectures (sm_75/80/86/90/120) will be added as further assets.
AetherSDR v26.6.4
AetherSDR v26.6.4
Headlined by a KiwiSDR public-receiver integration, a selectable SmartMTR meter view for the VFO flag, an in-app agent automation/test bridge for the GUI, GPU-composited slice flags with a multi-GPU render selector, a first accessibility pass for custom-painted widgets, and a large round of CAT/rigctld parity fixes. Governance moves to Constitution v2.0.0. (80 commits since v26.6.3.)
New features
- KiwiSDR public-receiver browser — an API-policy-aware directory browser to find and connect to public KiwiSDR receivers worldwide, independent of the FlexRadio path. Honest, policy-aware receiver picker with the public-directory Limits marker; diversity receive interlock with receive-only TX inhibit on Kiwi panadapters; source-attributed terminal denial messages (badp codes + MSG keys); clearer connection-failure messages; dedicated Support-menu logging categories. See
docs/kiwisdr-public-directory.md. (#3668, #3679, #3676, #3678, #3699, #3706, #3707, #3716, #3749, #3759) - SmartMTR selectable meter view for the VFO flag — an opt-in alternative to the S-meter (which stays pixel-identical when not selected). Analog d'Arsonval bar ballistics, sliding-window min/max "extremes" markers (1s/3s/5s), optional numeric value labels, and a TX mic-level meter. Renders correctly in the GPU flag-sprite path. (#3723, #3750, #3751, #3752, #3753, #3760, #3771)
- Agent automation / test bridge — an in-app, agent-drivable bridge for the GUI (
dumpTree/grab/invoke/get, slice/VFO verbs), with TX automation hardening (meter freshness, ATU, two-tone, safety rails), input validation, redaction of masked fields, and a log-observability suite. Off in production, gated behindAETHER_AUTOMATION. Seedocs/automation-bridge.md. (#3646, #3710, #3722, #3727, #3728, #3738, #3717, #3747) - GPU-composite slice flags instead of translucent raster siblings — removes the main-thread re-blend over the QRhi waterfall each frame, plus a multi-GPU render-GPU selector (Display menu) for multi-adapter systems and a flag re-raster pause when a flag isn't presented. (#3617, #3695, #3656, #3746, #3713)
- Accessibility —
QAccessibleInterfaceimplementations for custom-painted widgets (a Grouping summary for the VFO flag; the ESC level bar), backed by a new CI accessibility static-analysis check. Seedocs/a11y.md. (#3754, #3758) - Net Reminder Scheduler — recurring net reminders with one-click tuning. (#3684)
- PSK Reporter map gains band-condition shading, a lookback window, and a hover card, with cross-platform spot-delivery fixes. (#3635)
- FreeDV Reporter: 6m+ band coverage and multi-select. (#3591)
- Maidenhead grid-locator field in the APRS position row. (#3672)
- Memory editor: NUL sanitisation, field dropdowns, smoother editing. (#3657)
- Continuous edge auto-pan while dragging a slice. (#3581)
- Status-bar date follows the system locale. (#3690)
- Support bundles are deflate-compressed. (#3691)
- Waveform install over the Docker file-upload protocol. (#3585)
CAT / rigctld parity
- Resolve SmartSDR Flex/TS-2000 split-behavior gaps + block TS-2000 satellite-mode TX. (#3739)
- Resolve rigctld behavior gaps and fix on-demand split VFO. (#3724)
- Match missing Hamlib rigctld functionality — VFO mode, mode mapping, CTCSS/FM tones, levels & funcs. (#3619)
- Behaviour: VFO B is a dialect capability — disabled for rigctld, preserved across dialect switches and smaller-radio reconnects. (#3694/#3698)
- Don't cap running CAT ports by receiver count. (#3693/#3697)
- Fix (safety): a bare
ZZTX;is a read, not a key — no more uncommanded TX in the Flex dialect. (#3625/#3629) - Make the CAT per-port enable toggle visible. (#3618)
Fixes & hardening
- TCI DAX RX audio routed by a cached channel→TRX map, resilient to transient
dax=0; cache cleared on disconnect teardown. (#3669/#3759, #3766/#3767) - Crash: guard the slice DAX-recall single-shot against a dangling slice (use-after-free). (#3733)
- Live state (Principle II):
setDax,setCwSidetone,setSbMonitor, andsetAmCarrierLevelnow update their cached state optimistically. (#3737, #3736, #3734, #3712) - Reproject only the active waterfall stream while panning. (#3700/#3701)
- Draw the panadapter grid below the FFT trace in the GPU path. (#3606/#3713)
- Use the radio's auto-black level for an evenly-levelled waterfall floor. (#3586)
- Independently themable LIVE chip (red live / grey history). (#3761)
- Pace TX waterfall rows to
line_durationto match the RX scroll rate. (#3686) - Profile FFT settling on load. (#3604, #3573)
- Prune dead followers in
AudioOutputRouter. (#3660/#3661) - Capture TX audio in client-side QSO recordings. (#3556/#3632)
- Run the CWX local sidetone keyer on a
steady_clockworker thread. (#3644) - Stream Deck Tune Toggle parsed the wrong TCI status field. (#3647)
- Migrate hardcoded highlight/disabled-state colours to ThemeManager tokens (Principle IX); persist Theme Editor overrides under pre-seeded applet scopes. (#3645, #3688)
- Ulanzi dial on Linux: detect an inaccessible evdev device and offer a one-click udev grant. (#3677)
- RX BW indicator shows bandwidth, not the hi-cut. (#3659/#3696)
- Idle MOX button gets a distinct accent so it reads as the transmit button. (#3763)
- Fan-mode button label clarity; Fahrenheit toggle for amplifier temperature. (#3651, #3652)
Internal — audio sink factory (Phase 6, #3306)
- New
AudioOutputRouterregistry for output-following sinks; Pudu/QSO/CW and Quindar sinks finished onto the factory with format negotiated through it. (#3630, #3631, #3655) - Architecture note: WebSDR-sourced VFO/slice design. (#3621)
Governance
- Constitution v2.0.0 — trims the domain conventions (relocated to
AGENTS.md) and adds governance principles; net 14 principles. (#3602)
Packaging / CI
- Build and bundle qtkeychain for SmartLink credential persistence on the Linux AppImage (#3640) and Windows (#3634).
- Pin + verify SHA256 for all
third_partysetup-script downloads. (#3665/#3692) - AppStream metainfo for Linux + Flathub-submission polish; a simple manpage. (#3673, #3709, #3674)
- Dependabot:
actions/checkout6.0.3→7.0.0,microsoft-store-apppublisher1.1→1.3,action-gh-release3.0.0→3.0.1. (#3682, #3681, #3680)
Full changelog: v26.6.3...v26.6.4
Linux (AppImage), Windows (installer), and macOS (DMG) build artifacts are attached below as the platform CI jobs complete; signed checksums follow.
AetherSDR v26.6.3
AetherSDR v26.6.3 — 61 commits since v26.6.2. Headlined by satellite-data WFM, an APRS client and PSK Reporter map on a new reusable Qt mapping engine, a Direwolf-derived VHF packet demodulator, and a major internal decomposition of the MainWindow monolith.
Linux is the primary supported platform; macOS and Windows builds are provided as a courtesy. Build artifacts attach below as CI completes — see Downloads.
🛰️ Headline features
WFM software demodulator (satellite data)
A per-slice WFM toggle on FM modes: DAX IQ → phase-continuous NCO Doppler correction → exact 48 kHz resampling → flat atan2 discriminator → virtual audio cable for HS-SoundModem. Built for G3RUH 9600-baud satellite work. (#3407, #3522, #3562)
APRS client
The AetherModem AX.25 tab is now a lightweight APRS client — a live station table with wireframe symbol icons and weather decode, a timed GPS position beacon (grid-locator fallback), and two-way messaging with retries, auto-ack, and digipeat de-duplication. Everything rides the shared one-at-a-time TX keying queue, so APRS can't double-key against KISS, the mailbox, or the terminal. (#3530)
PSK Reporter reception map
View ▸ PSK Reporter shows who's hearing your callsign on an OpenStreetMap basemap — mode-coloured markers, great-circle paths, a live MQTT feed plus HTTP polling, and a persistent spot cache. Built on a new reusable Qt mapping engine (vendored QGeoView) that the APRS map will share. (#3565)
Direwolf-derived VHF AFSK demodulator
VHF 1200-baud AX.25 now decodes through a Direwolf-derived Profile A+ demodulator (9 amplitude slicers), replacing the old libmodem lane bank (HF 300-baud is unchanged). A 1,875-packet overnight live run out-copied both Dire Wolf and Graywolf. (#3527)
DAX-IQ, fully usable
End-to-end IQ sample delivery, a dBFS level meter, 24/48/96/192 kHz rate switching with persistence, and startup state restore. (#2529, #3521, #3522)
📻 Packet radio
- Pure-C++ HDLC framer (
HdlcCodec) replacing libmodem'sbitstream_state(#3475) - AX.25 shim isolated on a dedicated worker thread (#3473)
- MQTT: per-topic control, CW keyer, radio state, AX.25, and debug logging (#3460)
🎨 Display & UX
- SmartSDR-parity "Purple" waterfall colour scheme (#3583)
- Inactive-slice bandwidth stays visible via a neutral colour instead of near-invisible dimming (#3484 / #2389)
- Per-row waterfall-history frequency frames — no per-pan reproject (#3578)
- TMate2 enhanced display: TX bargraph, text overlays, encoder labels (#3542)
- RC-28 velocity-proportional tuning (#3467)
🔧 Fixes & hardening
- Behaviour change (CAT): in-span
rigctl/TCI retunes no longer recenter the pan (autopan=0); cross-band tunes still recenter, preserving the #536 behaviour. Helps satellite trackers issuing Doppler steps every few seconds. - Profile-load recovery hardening for Multi-Flex — defers profile-owned writes during global profile restore (#3563)
- DEXP controls now use the
companderprotocol keys SmartSDR actually accepts (were silently rejected) (#3568) - Multi-Flex ping-watchdog grace during a second client's join — no more false disconnects mid-join (#3570)
- TCI: dB on the wire for
VOLUME;ready;sent after the full settings dump (#3498, #3502) - ARRL US band-plan license-class accuracy (#3518)
- Narrow-passband filter-edge drag hit-testing (#3523)
- GPU spectrum builds without
Qt6GuiPrivate(Windows/macOS aqtinstall) (#3561)
🏗️ Internal
- MainWindow decomposition (#3351): the ~19,500-line monolith split into cohesive sibling translation units (~8,100 lines in the core) — pure code motion, mapped in
docs/architecture/mainwindow-decomposition.md. - New
RadioSessionaggregate ownsRadioModel+TciServer+CatPorts, making teardown order structural (fixes the #2385 crash-on-quit class). (#3544, #3545)
📦 Packaging
- Microsoft Store: a
v*release tag now auto-stages a draft submission via themsstoreCLI — dormant until Partner Center credentials are configured. (#3567)
⬇️ Downloads
Attached below as the build workflows finish:
- Linux —
AetherSDR-*.AppImage - macOS —
AetherSDR-*.dmg(universal) - Windows —
AetherSDR-*-setup.exe(installer) +AetherSDR-*.zip(portable)
Verify your download against the signed checksums — see docs/VERIFYING-RELEASES.md.
🙌 Thanks
To everyone who contributed this cycle — including @jensenpat, @rfoust, @Ozy311, @w5jwp, @svabi79, @ea5wa, @K5PTB, @mvanhorn, @nigelfenton — and a special welcome to first-time contributor @sblanchard (the Purple waterfall scheme). 73!
Full changelog: CHANGELOG.md · v26.6.2...v26.6.3
AetherSDR v26.6.2 — theming, HID controllers, packet radio & Windows Store
206 commits across 18 contributors since v26.5.3. This is a consolidated v26.6.2 that rolls up the 26.6.1 feature wave, the v26.6.1.1 hotfixes, and a large block of new work landed since — headlined by the runtime theming system, new HID controllers, and a full packet-radio suite. Full detail in CHANGELOG.md.
Theming foundation (early beta) 🎨
A runtime theming system, opt-in via Settings → Theme Editor; Default Dark remains the shipped default. Token names, the .aethertheme format, and the editor UX are expected to change before stabilising — file issues with the theme label if you try it.
ThemeManagerfoundation + 51-token design taxonomy, gradient + alpha support- Theme Editor dialog with live colour editing, gradient editor, font + sizing pickers
- New Default Light theme;
.aetherthemeimport/export with drag-and-drop - Embedded DSEG Modern 7- and 14-segment fonts (SIL OFL 1.1)
HID input devices 🎛️
Three new physical-device classes, all opt-in so the macOS Input Monitoring prompt never surfaces unless an operator enables one:
- Elgato StreamDeck+ — encoders, LCD buttons, touchscreen with live labels (#3236)
- Ulanzi Dial — cross-platform on Linux evdev, Windows, and macOS (#3238, #3239)
- Native Icom RC-28 encoder support (#3293, #3298)
Packet radio — KISS TNC, BBS terminal & mailbox 📻
AetherModem grows from a decoder into a complete packet station, all over its built-in 1200-baud VHF (Bell 202) AFSK modem — no external TNC hardware required:
- KISS-over-TCP TNC server (#3279) — turns AetherSDR into a software TNC for any host packet/APRS app (Xastir, YAAC, APRSdroid, UISS, Dire Wolf-style clients, terminal programs). Cross-platform
QTcpServerwith multiple simultaneous clients, resync-safe KISS framing (FEND/FESC), and proper lifecycle handling — TCP keepalive, slow-consumer write-backlog cap, and an idle sweep so dead clients are reaped, not leaked. Enable TNC, Start on Startup, and TCP port (default 8001) controls, all persisted. - Standalone packet terminal (#3381) — a built-in connected-mode AX.25 client in a new Terminal tab: call a 1200-baud VHF packet BBS, read and send messages, and disconnect, with reliable error correction (T1 retries) over the half-duplex link. ✅ Verified on the air against a live BBS (SJVBBS-1) — reads and sends, retries hold, no session drops.
- Personal Mailbox System (PMS) — the answering-side counterpart: your own connected-mode AX.25 mailbox other stations can connect to, sharing the same
Ax25Connectiondata-link state machine as the terminal. - Built on the AX.25 1200-baud VHF (Bell 202) RX + TX profiles from earlier in the cycle (#3253, #3256).
Windows Store — one-click install & automatic updates 🪟
AetherSDR is heading to the Microsoft Store as an MSIX package, so Windows operators get one-click installation and automatic background updates instead of chasing installers:
- MSIX packaging groundwork + Store app identity (#3178, #3225)
- Lean Store payload — DFNR neural-denoiser weights embedded for the Store build, with the model archive excluded from the MSIX package to keep it small (#3225, #3205)
- CI builds and attaches the MSIX /
.msixuploadto every release, with the Store-submission automation plan documented (#3281)
Other new work since v26.6.1
- Accessibility, Phase 2 (#3303) — accessible widget names, live screen-reader announcements, VFO tab navigation, and full keyboard navigation. First contribution from @w9fyi.
- Ulanzi Studio sibling plugin (#3227) —
ulanzi-aethersdralongside the in-app mapper. - Filter passband shading fix (#3294) — premultiplied-alpha double-multiply on the GPU path corrected.
Hotfixes folded in (originally v26.6.1.1)
- macOS DMG release build unblocked (#3349) — a removed background image plus a masked
|| truebroke create-dmg; Apple Silicon DMG now builds, signs, and notarizes cleanly. - Tuning-step toast no longer fires on radio syncs (#3337).
- Radio Setup tall tabs stay reachable (#3347) — tab pages wrapped in a scroll area.
Windows hardening
- PerMonitorV2 DPI awareness (#3208), discrete-GPU preference on hybrid laptops (#3299)
- Windows Snap restoration for the frameless title bar (#3069), WASAPI CW sidetone routing (#3241)
New protocol surfaces
- SmartCAT TCP server — TS-2000 + FlexCAT dialects (#3131)
- Unified RADE TX pipeline — EOO frame transmission + callsign encoding (#3221)
- SSDR-parity PWR/SWR metering on PGXL/TGXL amplifier applets (#3277)
- TCI
clicked_on_spotevent for Log4OM interoperability (#3145)
Reliability sweep
- Faster connect times — ~1.3 s cut off the connect handshake by skipping the peek when multiFLEX is on and pipelining the serial subscriptions (#3391)
- Steadier discovery — the re-bind loop now pauses while connected and fully quiesces on routed/WAN links, so reconnects stop fighting the discovery socket (#3420, #3422)
- 7-year-old NR2 Gamma crackling fix — SpectralNR Bessel function variants corrected (#3275)
- Multi-monitor main-window restore under Minimal Mode (#3174)
- Multi-pan TCI spot freeze — spot-marker rebuilds coalesced (#3310)
- FreeDV / Quindar interactions (#3317, #3320) + RADE filter passband alignment (#3301)
Build, CI, and packaging
check-windows+check-macosalways run on every PR (#3244)- Sanitizer step pinned to bash so
pipefailworks (#3155); SOURCE_DATE_EPOCH reproducible builds (#3165) - System-library opt-in flags + lowercase binary name + Linux 256×256 icon +
.desktopdescription (#3135, #3138, #3143, #3074 — @dawkagaming) - Debian multiarch tuple for Qt6GuiPrivate probe (#3159 — @K5PTB)
Contributors
Big thanks to @ten9876 (maintainer, 45 commits — theming system end-to-end, HID device backends, CI gating), @aethersdr-agent (the AetherClaude orchestrator, 39 commits — automated fixes across slices, controllers, and applet paths), @jensenpat (38 commits — the entire packet-radio suite: KISS TNC, BBS terminal, PMS mailbox, AX.25 1200-baud, plus UI and slice work), @M7HNF-Ian (15 commits — meters, WASAPI sidetone, spectrum tooltips, CI paths), @NF0T (13 commits — RADE TX pipeline, NR2 Gamma fix, Quindar interactions), @K5PTB (9 commits — SmartCAT server, MQTT publish topics, Debian multiarch), @nigelfenton (9 commits — TCI mic/AF handlers, theme namespaces, Ulanzi sibling plugin), @chibondking (6 commits — PWR/SWR metering, adaptive throttle), @rfoust (4 commits — panadapter context slice, waterfall rate), @mvanhorn (2 commits — theme migration tool cleanup), and @Ozy311 (2 commits — meters + slices). Dependabot contributed 2 dependency and security bumps.
We are excited to welcome our first-time contributors this cycle: @dawkagaming, @w5jwp, @motoham88, @w9fyi, @ea5wa, @svabi79, and @VU3ESV.
73, Pat KI6BCJ & Claude (AI dev partner)
Downloads
Linux AppImage (x86_64 / aarch64), macOS DMG (Apple Silicon + Intel, signed + notarized), Windows installer (setup.exe) + portable ZIP, and the Stream Deck plugin are attached below — built and signed by CI workflows on this tag.
Full diff: v26.5.3...v26.6.2
Verifying releases: see docs/VERIFYING-RELEASES.md. Signing key: docs/RELEASE-SIGNING-KEY.pub.asc.
v26.6.1.1
Hotfix release on top of v26.6.1 — resolves the macOS DMG release-build failure plus two GUI fixes. No other changes. Full detail in CHANGELOG.md.
Fixes
- macOS DMG release build unblocked (#3349) — the
create-dmgstep referenced a background image (docs/assets/logo-invert.png) that had been removed in an earlier cleanup, and a trailing|| truemasked the failure so DMG signing then failed on a disk image that was never produced. The Apple Silicon DMG now builds, signs, and notarizes cleanly. - Tuning-step toast no longer fires on radio syncs (#3337) — the "Step: …" toast only appears on deliberate user step changes, not on radio-driven status updates.
- Radio Setup tall tabs stay reachable (#3347) — tab pages are wrapped in a scroll area so controls on tall tabs are no longer clipped off-screen.
Downloads
- Linux —
x86_64/aarch64AppImage - macOS — Apple Silicon DMG (signed + notarized)
- Windows — installer (
setup.exe) + portable ZIP - Stream Deck — plugin + StreamController bundle
AetherSDR v26.6.1 — HID input devices + Windows hardening + new protocol surfaces
143 commits across 14 contributors since v26.5.3. Full detail in CHANGELOG.md.
Headlines
HID input devices — three new physical-device classes, all opt-in:
- Elgato StreamDeck+ — encoders, LCD buttons, touchscreen with live labels (#3236)
- Ulanzi Dial — cross-platform on Linux evdev, Windows, and macOS (#3238, #3239)
- Native Icom RC-28 encoder support (#3293)
- AetherPad RC-28 Arduino emulator recognised via VID/PID alias (#3171)
Windows hardening
- PerMonitorV2 DPI awareness (#3208)
- Discrete-GPU preference on hybrid laptops (#3299)
- Microsoft Store MSIX packaging groundwork + embedded DFNR weights (#3178, #3205, #3225)
- Windows Snap restoration for the frameless title bar (#3069)
- WASAPI CW sidetone routing for low-latency keying (#3193 → #3241)
New protocol surfaces
- SmartCAT TCP server — TS-2000 + FlexCAT dialects (#3131)
- Unified RADE TX pipeline — EOO frame transmission + callsign encoding (#3221)
- AX.25 1200-baud VHF Bell 202 receive + transmit (#3253, #3256)
- SSDR-parity PWR/SWR metering on PGXL/TGXL amplifier applets (#3277)
- TCI
clicked_on_spotevent for Log4OM interoperability (#3145)
Reliability sweep
- 7-year-old NR2 Gamma crackling fix — SpectralNR Bessel function variants corrected (#1507 → #3275)
- Multi-monitor main-window restore under Minimal Mode (#2483 → #3174)
- Multi-pan TCI spot freeze — spot-marker rebuilds coalesced (#2481 → #3310)
- FreeDV / Quindar interactions (#3317, #3320) + RADE filter passband alignment (#3301)
New applets and UI
- HLTH antenna health applet (#3153)
- Customizable button bar with favourites + push-down drawer (#3150)
- Reference target curve overlay on the Aetherial Parametric EQ (#3259)
- AetherControl double-click to latch / unlatch (#3103)
- ESC click-to-adjust polar display for phase and gain (#3134)
Adaptive throttle UX
- Toggle in the Connect panel for all modes (#3175)
- Visibility through status-bar heartbeat colour and Network Diagnostics graphs (#3203)
Theming foundation (early beta)
A runtime theming system lands as early beta, opt-in via Settings → Theme Editor. Default Dark remains the shipped default. Token names, the .aethertheme file format, and the editor UX are expected to change before stabilising — please file issues with the theme label if you try it.
ThemeManagerfoundation + 51-token design taxonomy- Theme Editor dialog with live colour editing, gradient editor, font + sizing pickers
- New Default Light theme alongside Default Dark
.aetherthemeimport/export with drag-and-drop- Embedded DSEG Modern 7- and 14-segment fonts (SIL OFL 1.1)
See the Theming section in CHANGELOG.md for phase-by-phase detail.
Build, CI, and packaging
check-windows+check-macosalways run on every PR (#3244) — retires the path-filter allow-list that was leaking platform-only regressions- Sanitizer step pinned to bash so
pipefailworks (#3155) - SOURCE_DATE_EPOCH for reproducible builds (#3165)
- System-library opt-in flags for distro packagers (#3135 — @dawkagaming):
USE_SYSTEM_ZLIB,USE_SYSTEM_MSPACK,USE_SYSTEM_LIBMOSQUITTO,USE_SYSTEM_RTMIDI - Lowercase binary name option (#3138 — @dawkagaming), Linux 256×256 icon (#3143 — @dawkagaming), improved
.desktopdescription (#3074 — @dawkagaming) - Debian multiarch tuple for Qt6GuiPrivate probe (#3159 — @K5PTB)
Contributors
Big thanks to @jensenpat (22 commits — TCI/CAT, multi-monitor restore, network diagnostics), @aethersdr-agent (the AetherClaude orchestrator, 28 commits), @NF0T (10 commits — Windows packaging, RADE TX pipeline), @nigelfenton (8 commits — TCI fixes), @M7HNF-Ian (7 commits — XVTR, slice spawning, NR2 Gamma fix), @chibondking (6 commits — bandplan corrections, panadapter context slice spawning), @K5PTB (5 commits — MQTT publish topics, CMake Debian multiarch fix), @dawkagaming (4 community PRs — distro packaging quality-of-life), @rfoust (4 commits), and first-time contributors @w5jwp (Icom RC-28 encoder support), @motoham88 (StreamDeck+ support), @mvanhorn (theme migration tool cleanup), and @VU3ESV (macOS phys_footprint memory reporting).
73, Jeremy KK7GWY & Claude (AI dev partner)
Downloads
Linux AppImage, macOS universal DMG, Windows installer and portable ZIP are attached below — built and signed by CI workflows on this tag.
Verifying releases: see docs/VERIFYING-RELEASES.md. Signing key: docs/RELEASE-SIGNING-KEY.pub.asc.
AetherSDR v26.5.3 — Aetherial Audio TX completion + security hardening + 100-commit reliability sweep
AetherSDR v26.5.3 — Aetherial Audio TX completion + security hardening + 100-commit reliability sweep
139 commits across 14 contributors in this cycle. The headline is the TX path of the Aetherial Audio Channel Strip reaching feature-complete with the new PAPR processor and split-band de-esser, two published security advisories landing their enforcement phases (SmartLink TLS cert pinning + CAT PTY symlink hardening), the MQTT configuration moving into a dedicated Settings dialog, and a substantial reliability sweep across audio (WASAPI / CoreAudio / macOS mic), spectrum (TX waterfall scroll rate, panadapter dBm prime), and CAT (rigctld, TCI, MIDI). Native Hamlib NET rigctl ships as a first-class CAT path alongside TCI.
Security advisories landed
GHSA-wfx7-w6p8-4jr2 — SmartLink TLS cert pin enforcement Phase 2 (#3026)
Phase 1 (warn-only) shipped in v26.5.2; Phase 2 promotes a cert-fingerprint mismatch to a hard handshake pause. On mismatch the client emits a modal dialog (Accept new cert / Reject and disconnect) before sending wan validate — a MITM attacker never sees an authenticated session. New SmartLink tab in Radio Setup lists pinned certs with per-row Forget. Pin cache schema migrates Phase 1 string entries to Phase 2 {fp, pinnedAt} objects on first save.
GHSA-qxhr-cwrc-pvrm — CAT PTY symlink hardening (#3027)
rigctld's slice PTY symlinks moved from /tmp/ to per-user runtime dirs ($XDG_RUNTIME_DIR on Linux, ~/Library/Application Support/... on macOS) so a local attacker can no longer race-create the symlink targets. Windows unaffected.
Headline content
Aetherial Audio Channel Strip TX path completion (#3024)
- PAPR processor — new all-pass biquad cascade (4 stages at 300/700/1500/2500 Hz) for peak-to-average-power-ratio reduction. Drive (0–18 dB) + Phase knobs in the channel strip; auto-makeup gain linked to Drive so RMS lifts alongside peaks instead of disappearing into the compressor's gain reduction.
- Split-band de-esser — replaces the old broadband-attenuation pattern (
l *= gainLin; r *= gainLin;) withoutput = full + bandpass × (gain − 1). Fixes the broadband-attenuation bug that was costing operators ~30W of forward power on voice content. User-selectable cascade stages (12/24/36/48 dB/oct). - Peak-hold toggle on all meters; CRST + RMS + THRESH styling unified via the canonical
MeterSmoother(30 ms attack / 180 ms release at 120 Hz). - 10 Hz throttle on text readouts; live audio response at 125 Hz — meters track the audio without spamming the GUI thread.
Native Hamlib NET rigctl (#2975)
Full 149-test rigctld implementation for WSJT-X / JTDX / fldigi / Winlink VARA / N1MM+ / DXLog interoperability without a standalone rigctld bridge. Slices A–H each expose a TTY (per-user runtime path on Linux + macOS, see #3027) and a TCP port (4532–4539).
MQTT settings dialog refactor (#3051 — @s53zo)
Substantial community PR that moves MQTT configuration out of the live applet into a dedicated Settings → MQTT… dialog. The applet stays as the live surface (connect/disconnect, status, message log, publish buttons); the dialog owns broker credentials, TLS/CA config, subscription rows, display-on-panadapter flags, and publish button definitions. Persists On/Off state as MqttEnabled for auto-reconnect on startup. Also self-found and fixed a subscription-state bug where removed topics could survive across reconnects. Maintainer follow-ups consolidate the 8 MQTT flat AppSettings keys into a single nested MqttSettings JSON block per Principle V, with one-shot transparent migration from legacy keys.
TX waterfall scroll rate matches RX (#3031)
After #3019 stabilised TX waterfall rendering across slices, the FFT-derived row path scrolled at line_duration cadence (~10 rows/sec) while RX native tiles arrived at the FFT rate (~30 rows/sec) — TX appeared 3× slower than RX. Diagnosed via inline probe; corrected by dropping the FFT row throttle and emitting one row per FFT frame.
Panadapter dBm range prime on reconnect (#3034 — @chibondking)
Secondary panadapters (Slices B–H) could go completely flat on reconnect with the dBm scale stuck at the default [-50, +50] while the radio's saved range was different. Cause traced end-to-end: noise-floor auto-adjust animated from the wrong baseline, fired dbmRangeChangeRequested with bogus values, and the pendingDbm guard locked them in. Fix: prime the spectrum widget with the pan's current dBm range immediately on wire. Solid community contribution.
FlexControl wheel tuning overhaul (#3029 — @rfoust)
Two-axis QoL improvement to the virtual FlexControl wheel: new Mouse Sensitivity slider, de-jitter clamping at 15°, lazy re-anchoring across centre-zone crossings, coast / pointer-clock separation, and UI polish.
WASAPI mono-only USB PnP mic silent-open recovery (#2929)
Some USB PnP mics report mono-only capture natively; Qt accepts an unsupported stereo open and returns a non-null QIODevice that delivers zero bytes. Three-layer fix: pre-emptive channel-count clamp, fallback-ladder skip of only the failed (rate, ch) combo, and a 1.5 s silent-open watchdog that retries as mono.
ATU pre-tune Auto-mode safety nets (#3050)
Four-layer guardrail bundle for the unattended ATU sweep — license-class filter (data-driven from the active bandplan), max-points soft cap with TX-duration warning, high-power warning above 20 W, and audible cue on per-point timeout + 3-fail bypass abort. Paired with #3063 for per-band early exit (3 consecutive failures on a band skip past that band instead of aborting the whole sweep).
Windows hybrid-GPU support (#1921)
NvOptimusEnablement = 1 and AmdPowerXpressRequestHighPerformance = 1 exports so the Windows binary launches on the discrete GPU on hybrid laptops. Sidesteps the Intel iGPU D3D11 driver bug that crashed AetherSDR during QRhiWidget reparenting.
TCI server enhancements (#2841, #2950, #3065)
Panadapter FFT row forwarding to subscribed TCI clients, new tx_gain command + ALC reading via tx_sensors, and a TX overflow-mode picker — right-click the TCI TX slider to choose Clip (saturating ±1.0, default), NaNGuard (bit-exact passthrough; only zero NaN/Inf), or Measure (true bypass — count overshoots for telemetry, never mutate samples). WSJT-X / FT8 operators chasing bit-exact tone fidelity can now drop the float-domain limiter entirely.
Also new this cycle
Features: AetherControl virtual FlexControl (#2888), adaptive frame-rate throttle + graceful reconnect (#2829), mute-all-slices + reconnect mute fix (#2833), spectrum Ctrl+wheel cursor-anchored zoom (#2869), multiFLEX per-client disconnect (#2981), loop antenna A/B controls (#2863), MQTT antenna display names (#2881), cycle-TX-slice shortcut (#2836), drag value popups on sliders (#2944), audio device hotplug prompt suppression (#2926), FlexControl WheelAgcT mode (#2907), status-bar slice-locked toast (#2984).
Notable fixes: TCI use-after-free in queued lambdas (#2814), RigctlProtocol use-after-free (#2995), set_split_vfo TX slice ping-pong (#2931), rigctld cwx routing through CwxModel (#2909), MIDI VFO encoder direction + step size (#2993), MIDI tx.mox uses isTransmitting (#2859), HID IcomRC28Parser byte offsets (7-year-old bug, #1896), slice-state cached + replayed for profile recall (#2917), off-screen slice indicator click reveal (#2941).
Refactor & internals: AppSettings nested-JSON consolidation (MQTT block; Principle V), MeterSmoother canonicalisation, revealOffscreen ternary collapse, post-#3019 spectrum FFT accumulator removal, off-screen click comfort margin, panadapter dBm prime path rewrite, and an Ae...