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:
Each plugin 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 top two Plugins.load lines (utils, notify). They are shared dependencies. Add or remove names in PluginsToLoad to pick which plugins you want.
Refresh the OpenWebRX+ page to see the changes. If nothing changes, restart varnish/nginx as noted below.
| Name | Description |
|---|---|
| antenna_switcher | Antenna switching for Raspberry Pi devices (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 |
| freq_scanner | Adds a frequency scanner (Joerg) |
| frequency_far_jump | Jump to a frequency outside the current profile (LZ2DMV) |
| magic_key | Set MagicKey without typing it in the browser’s address bar |
| minimap | Adds a minimap to receiver page (13MAD86) |
| mouse_freq | Show frequency under cursor on the waterfall |
| screenshot | Take screenshot of the waterfall |
| screen_reader | Provide spoken notifications for accessibility |
| search_bookmarks | Search all OWRX bookmarks and click to tune (Yannis) |
| show_band_plan | Show the band plan ribbon by default (fustinoni-net) |
| smeter | Show S-Meter (needs calibration!) (Joerg) |
| sort_profiles | Sort profiles by name |
| 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 (LZ2DMV) |
| Name | Description |
|---|---|
| example | Example plugin for developers |
| example_theme | Example theme plugin for developers |
| example_uikit | Demo plugin showcasing all UIKit features |
| notify | Notification utility plugin (delegates to uikit.toast() when available) |
| uikit | UI toolkit: dockable panel, modals, toasts, buttons, loading overlays |
| utils | Utility plugin, required by many plugins |
| Name | Description |
|---|---|
| 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+. |
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 doesn’t exist
mkdir -p /path/to/htdocs/plugins/{receiver,map}
init.js file inside the coresponding 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:
(async () => {
await Plugins.load('https://0xaf.github.io/openwebrxplus-plugins/receiver/utils/utils.js');
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.
The example plugin README has a step-by-step quickstart, a minimal plugin skeleton, a table of available events, and annotated patterns for the most common tasks (event listening, function wrapping, DOM access). Start there.
Short summary:
$OWRX_FOLDER/plugins/receiver/my_plugin/my_plugin.js.await Plugins.load('my_plugin');Plugins.my_plugin.init() — return true on success, false on a failed dependency check.plugins/{receiver|map}/plugin_name/ with a matching plugin_name.js entry file.Plugins.<name>._version so other plugins can check for it with Plugins.isLoaded('name', version).Plugins.<name>.no_css = true if there is no sibling CSS file; otherwise the loader fetches plugin_name.css automatically.await Plugins.load('dep') before loading plugins that need them.Plugins.utils.wrap_func() to intercept existing OWRX+ functions and Plugins.utils.on_ready() to defer work until the page is fully initialised.To host plugins on GitHub, use GitHub Pages for correct JS Content-Type.
Contributions are welcome!
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.
This project is licensed under the MIT License.