A web-based GUI for creating, importing, editing, and exporting OpenWebRX settings.json files.
Styled after the Pi-hole admin dashboard. Runs as a local Flask web server on Linux or Raspberry Pi.
Installation Β· Features Β· Screenshots Β· Configuration Β· Usage Β· Contributing
OpenWebRX stores all SDR hardware and band profile configuration in a single settings.json file.
Editing it by hand β especially when managing dozens of profiles across multiple devices β is tedious
and error-prone.
OpenWebRX Settings Editor gives you a clean web interface to manage that file without touching JSON directly:
- Add and configure SDR devices (RTL-SDR, HackRF, AirSpy, SDRplay, PlutoSDR, and more)
- Build band profiles with all supported fields (frequency, sample rate, modulation, gain, squelch, tuning step, direct sampling, and more)
- Set global receiver properties (name, GPS location, waterfall levels, FFT size)
- Validate your settings before deploying
- Export a ready-to-use
settings.jsonwith one click
| Feature | Details |
|---|---|
| π Dashboard | Live stat cards β device count, profile count, file size, schema version |
| π‘ SDR Device Manager | Add / edit / delete devices with all device-level fields |
| π» Profile Manager | Full profile editor with search and per-device filter |
| βοΈ Global Settings | Receiver name, GPS, waterfall range, FFT size, max clients, audio compression |
| β Validation | Server-side check with error and warning breakdown before export |
| π Raw JSON Editor | View, edit, and apply raw JSON directly with copy-to-clipboard |
| π₯ Import | Upload any existing settings.json to continue editing |
| π€ Export | Download a valid settings.json ready to drop into OpenWebRX |
| β¨οΈ Keyboard Shortcuts | Ctrl+S export Β· Ctrl+O import Β· Esc close modal |
| π Dark Theme | Pi-hole AdminLTE-inspired dark UI β easy on the eyes at 2 AM |
πΈ Screenshots coming soon β drop your PNGs into
docs/screenshots/and they will appear here automatically.
| Requirement | Version |
|---|---|
| Python | 3.8 or newer |
| pip | any recent version |
| OS | Debian Β· Ubuntu Β· Raspberry Pi OS Β· Fedora Β· RHEL / CentOS |
| Browser | Any modern browser (Chrome, Firefox, Safari, Edge) |
The installer handles all Python dependencies automatically.
No Node.js, no npm, no external services required.
Clone the repository and run the installer as root. The script will:
- Install Python 3, pip, and venv via your system package manager
- Copy the app to
/opt/owrx-editor/ - Create a Python virtual environment and install Flask
- Generate a random
SECRET_KEYand write/opt/owrx-editor/.env - Create and enable a systemd service (
owrx-editor) that starts automatically on boot - Open port
5000in UFW or firewalld if either is active
git clone https://github.com/jermsmit/OpenWebRX_Settings_Editor.git
cd OpenWebRX_Settings_Editor
sudo bash install.shOnce complete, open your browser to:
http://<your-device-ip>:5000
Raspberry Pi tip: find your IP with
hostname -I
git clone https://github.com/jermsmit/OpenWebRX_Settings_Editor.git
cd OpenWebRX_Settings_Editor
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.pyThen open http://localhost:5000.
cd OpenWebRX_Settings_Editor
git pull
sudo bash install.sh
sudo systemctl restart owrx-editorThe installer creates /opt/owrx-editor/.env. Edit it to change any defaults:
OWRX_HOST=0.0.0.0 # bind address (0.0.0.0 = all interfaces)
OWRX_PORT=5000 # port the web UI listens on β change if 5000 conflicts
OWRX_DEBUG=false # set true only during development
SECRET_KEY=<generated> # auto-generated at install β do not share or commitAfter editing, restart the service:
sudo systemctl restart owrx-editor
β οΈ Security notice: This app has no built-in authentication. It is designed for local / LAN use only. Do not expose port 5000 to the public internet. If remote access is needed, place a reverse proxy with authentication in front of it (e.g. nginx + HTTP basic auth, or Authelia).
The installer registers a systemd service. Use standard systemctl commands:
# Check status
sudo systemctl status owrx-editor
# Start / stop / restart
sudo systemctl start owrx-editor
sudo systemctl stop owrx-editor
sudo systemctl restart owrx-editor
# Enable / disable auto-start on boot
sudo systemctl enable owrx-editor
sudo systemctl disable owrx-editor
# View live logs
sudo journalctl -u owrx-editor -f- Click New Settings in the sidebar (or from Dashboard quick actions)
- Open Global Settings to set your receiver name, location, and top-level options
- Open SDR Devices β Add Device and fill in your hardware details
- Open Profiles β Add Profile, select your device, and configure the band
- Repeat step 4 for each frequency band or profile you need
- Click Validate to check for errors or warnings
- Click Export JSON (or press
Ctrl+S) to download yoursettings.json
- Click Import JSON in the sidebar (or press
Ctrl+O) - Select your existing
settings.json - All devices and profiles load into the editor
- Make your changes, validate, and export
Copy the exported settings.json to your OpenWebRX installation:
# Adjust path to match your OpenWebRX setup
sudo cp settings.json /etc/openwebrx/settings.json
sudo systemctl restart openwebrx| Field | Type | Notes |
|---|---|---|
name |
string | Display name shown in OpenWebRX |
type |
string | rtl_sdr, hackrf, airspy, sdrplay, etc. |
device_index |
integer | 0-based index when using multiple devices |
rf_gain |
number | "auto" |
dB gain value or "auto" |
ppm |
integer | Frequency correction in parts per million |
device |
string | Serial number or device string (optional) |
driver |
string | SoapySDR driver name (SoapySDR types only) |
| Field | Type | Notes |
|---|---|---|
name |
string | Profile display name |
center_freq |
integer | Center frequency in Hz |
start_freq |
integer | Initial tuned frequency in Hz |
samp_rate |
integer | Sample rate in Hz (max stable: 2,400,000) |
start_mod |
string | Initial demodulation mode |
rf_gain |
number | "auto" |
Per-profile gain override (inherits from device if blank) |
tuning_step |
integer | Frequency step size in Hz |
initial_squelch_level |
integer | Squelch threshold in dB |
direct_sampling |
integer | 0 off Β· 1 I-branch Β· 2 Q-branch |
offset_tuning |
boolean | Enable offset tuning |
RTL-SDR V4 note: Do not set
direct_samplingon the V4. The built-in upconverter handles all HF reception (500 kHz β 28.8 MHz) natively. Settingdirect_samplingon a V4 bypasses the upconverter and degrades HF performance.RTL-SDR V3 and older: Use
direct_sampling: 2(Q-branch) for all profiles below 28.8 MHz.
nfm Β· wfm Β· am Β· lsb Β· usb Β· cw Β· dmr Β· dstar Β· ysf Β· nxdn Β· m17 Β·
wspr Β· js8 Β· packet Β· adsb Β· ism Β· page Β· pocsag Β· drm
OpenWebRX_Settings_Editor/
βββ app.py β Flask application and API routes
βββ requirements.txt β Python dependencies (flask, werkzeug)
βββ install.sh β Bash installer for Linux / Raspberry Pi
βββ LICENSE β MIT License
βββ CHANGELOG.md β Version history
βββ CONTRIBUTING.md β Contribution guidelines
βββ .gitignore β Excludes venv/, .env, __pycache__, etc.
βββ templates/
β βββ index.html β Single-page web UI (Jinja2 template)
βββ static/
β βββ css/
β β βββ style.css β Pi-hole dark theme stylesheet
β βββ js/
β βββ app.js β Frontend application logic (vanilla JS)
βββ docs/
βββ screenshots/ β UI screenshots for this README
The Flask backend exposes a small REST API consumed by the frontend:
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/default |
Returns a blank default settings structure |
POST |
/api/import |
Accepts a settings.json upload, returns parsed JSON |
POST |
/api/validate |
Validates a settings object, returns errors and warnings |
POST |
/api/export |
Returns a formatted settings.json as a file download |
GET |
/api/modulations |
Returns the list of supported modulation modes |
GET |
/api/sdr_types |
Returns the list of supported SDR device types |
- OpenWebRX β the SDR web receiver this tool configures
- RTL-SDR Blog β hardware guides and software for RTL-SDR
- openWebRX_Settings β example
settings.jsonfiles by the same author
Contributions are welcome! See CONTRIBUTING.md for full guidelines.
- π Report a bug
- π‘ Request a feature
- π Submit a pull request
See CHANGELOG.md for version history.
MIT License β Copyright Β© 2025 jermsmit





