-
Notifications
You must be signed in to change notification settings - Fork 61
StreamDeck
AetherSDR gives you one-touch control of your FlexRadio from an Elgato Stream Deck. Change bands, switch modes, toggle DSP, key the transmitter — all from dedicated hardware buttons without touching your mouse.
- An Elgato Stream Deck — any model works (see Which Model? below)
- AetherSDR v0.8.6 or later — download here
- A Stream Deck app — either the official Elgato app (macOS/Windows) or StreamController (Linux)
AetherSDR provides plugins for both apps, so you're covered on every platform.
If you're buying a Stream Deck specifically for ham radio, here's what to consider:
| Model | Keys | Best For | Price Range |
|---|---|---|---|
| Stream Deck MK2 | 15 (5x3) | Most operators — enough keys for bands, modes, and TX controls | ~$150 |
| Stream Deck XL | 32 (8x4) | Full layout — bands, modes, DSP, TX, and slice controls all visible at once | ~$250 |
| Stream Deck + | 8 keys + 4 dials | Contesters — physical dials for VFO tuning, volume, RF power | ~$200 |
| Stream Deck Mini | 6 (3x2) | Budget option — PTT, band up/down, and a few essential toggles | ~$80 |
| Stream Deck Pedal | 3 foot switches | Hands-free PTT — press with your foot while operating SSB or adjusting controls | ~$90 |
Our recommendation: The Stream Deck MK2 (15 keys) is the sweet spot for most operators. If you want everything on screen at once without pages, go for the XL.
The Stream Deck plugin talks to AetherSDR through its built-in TCI server. You need to turn this on once:
- Open AetherSDR
- Go to Settings menu
- Check Autostart TCI with AetherSDR
That's it — TCI starts automatically every time you launch AetherSDR from now on.
Choose the guide for your operating system:
If you haven't already, download and install the Elgato Stream Deck app for your platform. Plug in your Stream Deck and make sure the app detects it.
- Go to the AetherSDR releases page
- Download
com.aethersdr.radio.streamDeckPlugin - Double-click the downloaded file — the Elgato app installs it automatically
- The "AetherSDR" category now appears in the Elgato app's action list
That's it — no command line, no build tools, just download and double-click.
- Open the Elgato Stream Deck app
- In the right sidebar, find the AetherSDR category
- Drag actions onto your Stream Deck buttons:
- Drag "Band 20m" onto a key to create a one-touch 20m button
- Drag "PTT" onto a key for push-to-talk
- Drag "MOX Toggle" for a transmit toggle
- The buttons work immediately — no restart needed
StreamController is a free, open-source Stream Deck app for Linux.
Flatpak (recommended):
flatpak install com.core447.StreamControllerOr follow the full installation guide.
Linux needs a udev rule so your user can access the Stream Deck without root:
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess"' | \
sudo tee /etc/udev/rules.d/70-streamdeck.rules
sudo udevadm control --reload-rules && sudo udevadm triggerUnplug and replug your Stream Deck after running this.
- Go to the AetherSDR releases page
- Download
streamcontroller-aethersdr.zip - Extract and copy to StreamController's plugin directory:
unzip streamcontroller-aethersdr.zip
cp -r streamcontroller-aethersdr \
~/.var/app/com.core447.StreamController/data/plugins/com_aethersdr_radioRestart StreamController. The "AetherSDR" plugin should appear in the plugin list.
- Open StreamController
- Click a button on the virtual Stream Deck display
- Select an AetherSDR action from the list (e.g. "Band 20m", "PTT", "MOX Toggle")
- The button is now live
Every action works on all platforms and all Stream Deck models.
| Action | What It Does |
|---|---|
| PTT | Hold to transmit, release to return to receive. Just like a mic button. |
| MOX Toggle | Press to start transmitting, press again to stop. Stays on until you press it again. |
| TUNE Toggle | Sends a tune carrier for antenna tuning. Press to start, press to stop. |
| RF Power | Cycles through power levels: 5W → 10W → 25W → 50W → 75W → 100W. |
| Tune Power | Cycles through tune power levels: 5W → 10W → 15W → 25W → 50W. |
| Action | What It Does |
|---|---|
| Band 160m through Band 6m | Instantly jumps to that band's calling frequency. One press = one band change. |
| Band Up | Steps to the next higher band (e.g. 40m → 30m → 20m). |
| Band Down | Steps to the next lower band (e.g. 20m → 30m → 40m). |
| Tune Up | Nudges the frequency up by one step (default 100 Hz). |
| Tune Down | Nudges the frequency down by one step. |
| Action | What It Does |
|---|---|
| Mode USB | Switch to Upper Sideband |
| Mode LSB | Switch to Lower Sideband |
| Mode CW | Switch to CW (Morse code) |
| Mode AM | Switch to AM |
| Mode FM | Switch to FM |
| Mode DIGU | Switch to Digital Upper (FT8, WSPR, JS8Call, etc.) |
| Mode DIGL | Switch to Digital Lower |
| Mode FT8 | Switch to FT8 mode |
| Action | What It Does |
|---|---|
| Mute Toggle | Mute/unmute the radio audio. |
| Volume Up | Increase audio volume by 5%. |
| Volume Down | Decrease audio volume by 5%. |
These toggle the radio's built-in signal processing on and off:
| Action | What It Does |
|---|---|
| NB Toggle | Noise Blanker — reduces impulse noise (power line interference, ignition noise) |
| NR Toggle | Noise Reduction — reduces background noise on voice signals |
| ANF Toggle | Auto Notch Filter — removes steady-tone interference (carriers, tuning signals) |
| APF Toggle | Audio Peak Filter — narrows the audio passband for CW reception |
| SQL Toggle | Squelch — silences the audio when no signal is present (useful on FM) |
| Action | What It Does |
|---|---|
| Split Toggle | Enables split operation (transmit on a different frequency than receive) |
| Lock Toggle | Locks the VFO so you can't accidentally change frequency |
| RIT Toggle | Receiver Incremental Tuning — offset the receive frequency without moving TX |
| XIT Toggle | Transmitter Incremental Tuning — offset the transmit frequency without moving RX |
| Action | What It Does |
|---|---|
| Play | Play a pre-recorded voice message (for CQ calls in contests) |
| Record | Start/stop recording a voice message |
Row 1: [160m] [80m] [60m] [40m] [30m] [20m] [17m] [15m]
Row 2: [12m] [10m] [6m] [USB] [LSB] [CW] [AM] [FT8]
Row 3: [PTT] [MOX] [TUNE][MUTE][NB] [NR] [ANF] [SQL]
Row 4: [SPLIT][LOCK][RIT] [XIT] [PLAY][REC] [PWR] [VOL+]
Row 1: [40m] [20m] [15m] [10m] [BandUp]
Row 2: [USB] [LSB] [CW] [FT8] [BandDn]
Row 3: [PTT] [MOX] [TUNE] [NR] [MUTE]
Row 1: [BandUp] [PTT] [MOX]
Row 2: [BandDn] [TUNE] [MUTE]
[Band Down] [PTT] [Band Up]
Use the center pedal for PTT — press with your foot to transmit while your hands stay on the keyboard or tuning knob.
Your Stream Deck
│ USB
▼
Stream Deck App (Elgato or StreamController)
│ Plugin API
▼
AetherSDR Plugin
│ WebSocket (port 40001)
▼
AetherSDR TCI Server
│ TCP (port 4992)
▼
Your FlexRadio
The Stream Deck app handles the USB communication with your hardware. The AetherSDR plugin translates button presses into TCI commands sent over a WebSocket connection to AetherSDR, which forwards them to your radio. Radio state changes flow back the same path to update button labels.
-
Is AetherSDR running and connected to your radio? The plugin can't control the radio if AetherSDR isn't connected.
-
Is TCI enabled? Go to AetherSDR → Settings → check Autostart TCI with AetherSDR. Restart AetherSDR after enabling it.
-
Is the Stream Deck app running? The Elgato app (or StreamController on Linux) must be running for the buttons to work.
Make sure you installed the udev rule:
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="0fd9", TAG+="uaccess"' | \
sudo tee /etc/udev/rules.d/70-streamdeck.rules
sudo udevadm control --reload-rules && sudo udevadm triggerThen unplug and replug the Stream Deck.
- Make sure you ran
npm run packageand double-clicked the.streamDeckPluginfile - Check that Node.js 20+ is installed:
node --version - Try restarting the Elgato Stream Deck app
- Verify the plugin directory name is exactly
com_aethersdr_radio - Check that it's in the correct path:
~/.var/app/com.core447.StreamController/data/plugins/ - Restart StreamController
The plugin is loaded but can't connect to AetherSDR's TCI server. Check:
- AetherSDR is running
- TCI autostart is enabled (Settings menu)
- No firewall is blocking port 40001
The old built-in Stream Deck support was removed in v0.8.6. You now need to:
- Install the Elgato app or StreamController (if you haven't already)
- Install the AetherSDR plugin as described above
- The old Settings → StreamDeck... menu item no longer exists
The new plugin approach is more flexible — you can customize which actions go on which buttons, use multi-page layouts, and mix AetherSDR controls with other plugins.
Both plugins are open source in the AetherSDR repository:
-
Elgato plugin:
plugins/elgato-aethersdr/(TypeScript/Node.js) -
StreamController plugin:
plugins/streamcontroller-aethersdr/(Python)
To add a new action, create a new action class that sends the appropriate TCI command. Pull requests welcome!
- Panadapter Controls
- VFO Widget
- RX Controls
- TX Controls
- Aetherial Audio
- Multi-Slice Operation
- Diversity and ESC
- TNF (Tracking Notch Filters)
- Memory Channels
- Profile Management
- Slice Colors
- XVTR (Transverters)
- CWX Panel
- CW Decoder
- DVK Panel
- RTTY Operation
- RADE Digital Voice
- DAX Virtual Audio
- DAX IQ Streaming
- WSJT-X Integration
- CAT Control
- TCI Server