OpenWebRX+ Plugins is a community-driven collection of plugins that extend OpenWebRX+ with new features, UI enhancements, and integrations for SDR receivers.
This repository provides a set of plugins for OpenWebRX+, allowing users to customize and enhance their SDR experience. Plugins are grouped into:
init.js.Each plugin provided by this repository is documented in its own folder.
Find your htdocs folder and set a helper variable:
export OWRX_FOLDER=$(dirname "$(find / -name openwebrx.js 2>/dev/null | head -n1)")
Create the folders and download the init.js sample file:
mkdir -p "$OWRX_FOLDER/plugins/receiver"
cd "$OWRX_FOLDER/plugins/receiver"
wget https://0xaf.github.io/openwebrxplus-plugins/receiver/init.js.sample -O init.js
Edit the init.js file and load the desired plugins:
${EDITOR-nano} init.js
Keep the utils and notify Plugins.load lines and the on_ready wait between them. utils and notify are shared dependencies, and the wait makes the rest load after the receiver page is fully initialized. Add or remove names in PluginsToLoad to pick which plugins you want.
Uncomment the built-in plugins (MapPlugin.init();, …) you want, and optionally the plugin_loader block at the end to let users enable plugins themselves.
Refresh the OpenWebRX+ page to see the changes. If nothing changes, restart varnish/nginx as noted below.
OpenWebRX+ includes optional built-in plugins that are already part of the receiver. Enable them by calling their initialization command once from your receiver init.js. Do not load them with Plugins.load(). Call them after the receiver page is initialized (Plugins.utils.on_ready()) and before loading other plugins, so deprecated plugins like minimap reuse them instead of starting them again.
| Name | Description | Available since | init.js command |
|---|---|---|---|
MapPlugin |
Open the native map in a floating window | OpenWebRX+ 1.2.124 | MapPlugin.init(); |
SunPlugin |
Display Solar Weather from HamQSL and refresh it every 15 minutes | OpenWebRX+ 1.2.125 | SunPlugin.init(); |
KeyPlugin |
Add a Magic Key input to the receiver Settings section | OpenWebRX+ 1.2.125 | KeyPlugin.init(); |
RigPlugin |
Add a TRANSMIT (PTT) button for a RigControl-connected transceiver; hold Backspace to transmit. Requires both RigControl options (transceiver control and PTT) enabled in Settings → Reporting | OpenWebRX+ 1.2.125 | RigPlugin.init(); |
The sample init.js includes commented-out lines for all built-in plugins. To let users enable built-in and repository plugins themselves, use plugin_loader.
| Name | Description |
|---|---|
| accessible_bookmark_search | Replaces the built-in bookmark search dialog with a native dropdown and improves keyboard navigation (René Jaun) |
| antenna_switcher | Antenna switching for Raspberry Pi devices; uses a receiver section when available (LZ2DMV) |
| colorful_spectrum | Colorize the spectrum analyzer |
| compact_analog_modes | Compact the receiver analog modes section (fustinoni-net) |
| connect_notify | Send/receive notifications on user connect/disconnect |
| doppler | Track Doppler shift/effect of satellites in a native plugin window when available |
| freq_scanner | Adds a frequency scanner; uses a receiver section and setup windows when available (Joerg) |
| frequency_far_jump | Jump to a frequency outside the current profile (LZ2DMV) |
| listeners | Show active listeners, profiles, frequencies and modes through Supabase Realtime Presence |
| plugin_loader | Let users enable admin-approved plugins from a native plugin window |
| screenshot | Take screenshot of the waterfall |
| screen_reader | Provide spoken notifications for accessibility |
| search_bookmarks | Search all OWRX bookmarks and click to tune (Yannis) |
| smeter | Show S-Meter (needs calibration!); settings use a plugin window when available (Joerg) |
| sort_profiles | Sort profiles by name |
| thumbtune | Minimalistic floating control panel optimized for one-finger mobile tuning (UB1AON) |
| toggle_scannable | Toggle the scannable state of bookmarks with right mouse button |
| tune_checkbox | Enable mouse-scroll to zoom by default (LZ2DMV) |
| tune_precise | Add buttons for precise frequency tuning in a receiver section when available (LZ2DMV) |
| Name | Description |
|---|---|
| example | Example plugin for developers |
| example_theme | Example theme plugin for developers |
| notify | Notification utility plugin |
| utils | Utility plugin, required by many plugins |
| Name | Description |
|---|---|
| This is the old version of the plugin, working on OWRX+ before v1.2.118 (Yannis) | |
Use the built-in MapPlugin on newer OpenWebRX+; the plugin remains for older versions (13MAD86) |
|
Use the built-in KeyPlugin on newer OpenWebRX+ versions; the plugin remains for older versions |
|
| Built into newer OpenWebRX+ versions as Settings → Show pointer frequency; plugin remains for older versions | |
| Show the band plan ribbon by default (fustinoni-net) | |
| Add keyboard shortcuts | |
| Set the default waterfall theme (fustinoni-net) |
| Name | Description |
|---|---|
| (deprecated) Add Maidenhead (QTH) grid to the map | |
| reduce_map_legend_sections | Allow the reduction of the map legend sections (fustinoni-net) |
| Name | Description |
|---|---|
| owrxantswitcher | Switch antenna ports using a WebAPI on the server. |
| owrx_devices_status | Extend the status panel by displaying the profile name each receiver is currently tuned to. |
| OWRX_Antenna_manager | A foundation for developing an antenna manager for OpenWebRX+. |
| audio_filter | Client-side audio filters: noise blanker, spectral noise reduction, AGC/compressor, auto notch and 3-band EQ with a visualizer (Joerg) |
| dxcluster | Show DX Cluster spots on the waterfall; click a spot to tune (Joerg) |
| mode_selector | Replace the analog mode buttons with one compact mode selector (Joerg) |
| rig_skin | Rig-style theme for the receiver panel: VFO dial, segmented S-meter, band scope, propagation, satellite and DX cluster windows |
| spider | DX cluster spots (telnet or MQTT) on the waterfall; a companion service keeps one cluster connection on the server and has its own configuration page |
Find your OpenWebRX+ htdocs folder
Use the following command to locate it:
find / -name openwebrx.js
htdocs:
/opt/openwebrx/htdocs/usr/lib/python3/dist-packages/htdocsCreate the plugins folders if they don’t exist
mkdir -p /path/to/htdocs/plugins/{receiver,map}
init.js file inside the corresponding plugin type folder (receiver or map)Add plugin loading lines to your init.js file if you’re not using the provided init.js - see Beginner Quickstart
Use the async pattern so dependencies load first, and load the other plugins after the receiver page is initialized:
(async () => {
await Plugins.load('https://0xaf.github.io/openwebrxplus-plugins/receiver/utils/utils.js');
await new Promise(resolve => Plugins.utils.on_ready(resolve));
await Plugins.load('https://0xaf.github.io/openwebrxplus-plugins/receiver/notify/notify.js');
await Plugins.load('https://0xaf.github.io/openwebrxplus-plugins/receiver/tune_precise/tune_precise.js');
})();
Raspberry Pi:
If using Raspberry Pi images, a caching service (varnish) may prevent plugins from loading immediately after editing init.js.
Restart services to clear cache:
sudo systemctl restart varnish nginx
Docker:
For Docker images (openwebrxplus), bind-mount the plugins folder and follow the above instructions. See Docker image documentation for details.
See the Development Guide for the plugin structure, the OpenWebRX+ plugin API, the utils helpers, plugin options, and how to add a plugin to this repository.
Contributions are welcome!
receiver/plugins.json - see Adding a New Plugin to This Repository.Use these plugins at your own risk. No warranty is provided.
For support, contact LZ2SLL or join the OWRX+ Telegram Chat.
Q: My plugin changes are not visible after editing init.js.
A: If using Raspberry Pi images, restart varnish and nginx as described above.
Q: Where do I put my local plugins?
A: In the htdocs/plugins/receiver or htdocs/plugins/map folder of your OpenWebRX+ installation.
Q: How do I load a plugin from a URL?
A: Use Plugins.load('https://.../plugin_name/plugin_name.js'); in your init.js.
Q: A plugin does not load. How do I find out why?
A: Add Plugins._enable_debug = true; at the top of init.js, reload the page and check the browser console (F12). Errors from the plugins are shown there too.
Q: The plugin_loader window shows no plugins.
A: The loader could not read plugins.json. Check the browser console. When the plugins are hosted on your own server, plugins.json must be in the receiver folder next to the plugin folders, and a server other than OpenWebRX+ must send the Access-Control-Allow-Origin header. See plugin_loader.
Q: The section of a plugin in the receiver panel is empty.
A: Receiver sections need a current OpenWebRX+ version. Update OpenWebRX+.
This project is licensed under the MIT License.