OpenWebRX on Linux — Complete SDR Setup, Configuration and Remote Access Guide
OpenWebRX is a browser-based SDR receiver for Linux that streams your RTL-SDR, HackRF, or other SDR hardware to any web browser on your network or the internet. This complete guide covers installation on Ubuntu, Debian, and Raspberry Pi, configuring RTL-SDR and other hardware, setting up remote access, built-in digital mode decoders including FT8, APRS, and ADS-B, and troubleshooting the most common problems.
- What is OpenWebRX and what can it do
- Supported SDR hardware
- Installation on Ubuntu, Debian and Raspberry Pi
- RTL-SDR setup and configuration
- Other SDR hardware — HackRF, SDRplay, Airspy
- Configuring receiver profiles
- Built-in digital decoders — FT8, APRS, ADS-B
- Using the OpenWebRX web interface
- Remote access and nginx proxy setup
- Running as a systemd service
- Security — user authentication and access control
- Adding your receiver to sdr.hu
- Troubleshooting common problems
- Frequently asked questions
Live interface
OpenWebRX is running on this server connected to an SDR receiver. Open the live interface in your browser to tune across the HF bands, listen to amateur radio activity, and watch the real-time waterfall — no installation required.
OpenWebRX — Live SDR Receiver
Browser-based SDR — tune HF, VHF and UHF from anywhere in the world
What is OpenWebRX and what can it do
OpenWebRX is a web-based SDR (Software Defined Radio) front-end that connects your SDR hardware to a browser interface accessible from anywhere on your network or the internet. Instead of sitting at the computer with the SDR dongle plugged in, you open a web browser on any device — phone, tablet, laptop — and hear what the radio is receiving in real time.
The application streams live audio and a waterfall display from the SDR hardware to connected browsers using WebSockets. The latency is typically 1–3 seconds — good enough for monitoring but not for transmit/receive timing. Multiple users can connect simultaneously and hear the same received audio, though typically only one user at a time controls the tuning.
What OpenWebRX can do
- Browser-based SDR — tune from any device without installing software
- Multiple simultaneous users — share your SDR with other operators
- Wide frequency coverage — depends on hardware, RTL-SDR covers ~500 kHz to 1.7 GHz
- Real-time waterfall — see the entire passband spectrum at once
- Built-in digital decoders — FT8, FT4, WSPR, APRS, ADS-B, POCSAG, JS8, and more
- Audio streaming — listen to AM, FM, SSB, CW in the browser
- Remote operation — access your SDR from anywhere via the internet
- Multiple profiles — configure different bands and hardware presets
Supported SDR hardware
| Hardware | Frequency range | Cost | Notes |
|---|---|---|---|
| RTL-SDR v3 | 500 kHz – 1.75 GHz | ~$30 | Most popular — best starting point. Direct sampling for HF. |
| RTL-SDR Blog v4 | 500 kHz – 1.75 GHz | ~$40 | Improved HF performance over v3 |
| Airspy Mini | 24 MHz – 1.8 GHz | ~$99 | Better dynamic range than RTL-SDR, no HF without upconverter |
| Airspy HF+ | 9 kHz – 31 MHz / 60–260 MHz | ~$199 | Excellent HF performance |
| SDRplay RSP1A | 1 kHz – 2 GHz | ~$109 | Good all-round performance including HF |
| SDRplay RSPdx | 1 kHz – 2 GHz | ~$199 | Best SDRplay for HF — three antenna ports |
| HackRF One | 1 MHz – 6 GHz | ~$299 | Very wide coverage, half-duplex transmit capable |
| LimeSDR Mini | 10 MHz – 3.5 GHz | ~$199 | Full duplex, transmit capable |
| PlutoSDR | 325 MHz – 3.8 GHz | ~$149 | Full duplex, popular for satellite work |
Installation on Ubuntu, Debian and Raspberry Pi
Method 1 — Docker (recommended, easiest)
Docker is the easiest way to run OpenWebRX — no dependency management, automatic updates, and it isolates OpenWebRX from the rest of your system:
sudo apt update
sudo apt install docker.io docker-compose
sudo usermod -a -G docker
# Log out and back in for group change to take effect
# For RTL-SDR hardware
docker run --name openwebrx -d \
--device /dev/bus/usb \
-p 8073:8073 \
--restart always \
jketterl/openwebrx:stable
OpenWebRX starts on port 8073. Open http://localhost:8073 in your browser to access it.
Method 2 — Package install on Debian/Ubuntu
# Add the OpenWebRX package repository
sudo bash -c 'echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/debian/ bookworm main" > /etc/apt/sources.list.d/openwebrx.list'
wget -O - https://repo.openwebrx.de/debian/key.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
sudo apt update
sudo apt install openwebrx
Raspberry Pi OS
# Use the Raspberry Pi OS package repository
sudo bash -c 'echo "deb [signed-by=/usr/share/keyrings/openwebrx.gpg] https://repo.openwebrx.de/raspbian/ bookworm main" > /etc/apt/sources.list.d/openwebrx.list'
wget -O - https://repo.openwebrx.de/raspbian/key.gpg | \
sudo gpg --dearmor -o /usr/share/keyrings/openwebrx.gpg
sudo apt update
sudo apt install openwebrx
OpenWebRX runs well on Raspberry Pi 3B+ and 4. The Pi 4 handles multiple decoders and several simultaneous users comfortably. The Pi 3B+ is adequate for basic reception and one or two decoders.
Create admin account
sudo openwebrx admin adduser admin
Set a strong password when prompted. This admin account accesses the OpenWebRX admin panel at http://localhost:8073/settings.
Verify the installation
sudo systemctl status openwebrx
OpenWebRX should show as active and running. Open http://localhost:8073 in a browser to confirm the web interface loads.
RTL-SDR setup and configuration
RTL-SDR dongles are the most common SDR hardware used with OpenWebRX. Linux includes built-in drivers for RTL-SDR devices — plug in the dongle and it is immediately available.
Install RTL-SDR libraries
sudo apt install rtl-sdr librtlsdr-dev
Blacklist the default DVB-T driver
Linux loads a DVB-T television driver for RTL-SDR hardware by default, which prevents SDR software from accessing it. Blacklist this driver:
# Blacklist DVB-T driver
echo "blacklist dvb_usb_rtl28xxu" | \
sudo tee /etc/modprobe.d/blacklist-rtl.conf
# Unload the driver if currently loaded
sudo modprobe -r dvb_usb_rtl28xxu
# Verify the dongle is accessible
rtl_test -t
Test the RTL-SDR dongle
# Run a quick test — should show device info and noise floor
rtl_test -t
# Example output:
# Found 1 device(s):
# 0: Realtek, RTL2838UHIDIR, SN: 00000001
Adding RTL-SDR in OpenWebRX admin panel
- Open
http://localhost:8073/settingsand log in with your admin account - Go to SDR Devices and Profiles
- Click Add new device
- Select RTL-SDR as the device type
- Set the device index to 0 for the first dongle
- Set the sample rate — 2.4 Msps is a good default for most uses
- Set gain — start with Auto and adjust manually if needed
- Save and verify the device appears in the main interface
RTL-SDR for HF — direct sampling mode
RTL-SDR dongles can receive HF (below 30 MHz) using direct sampling mode, which bypasses the tuner and feeds the signal directly to the ADC. Enable it in the OpenWebRX device settings:
# In the admin panel device settings, add:
# Direct Sampling: Q branch (for most HF antennas)
# This enables HF reception on standard RTL-SDR dongles
PPM correction for frequency accuracy
Most cheap RTL-SDR dongles have a slight crystal frequency error measured in PPM (parts per million). Calibrate it for accurate frequency readout:
# Requires a known frequency source (e.g. GSM tower, broadcast FM)
# Use kalibrate-rtl if available:
sudo apt install kalibrate-rtl
kal -s GSM850
Enter the measured PPM value in the OpenWebRX device settings under PPM correction. Typical values range from -50 to +50 PPM for cheap dongles. RTL-SDR Blog v3/v4 are usually within 1–2 PPM.
Other SDR hardware — HackRF, SDRplay, Airspy
SDRplay RSP1A and RSPdx
# Download the SDRplay API installer from sdrplay.com
# The installer script installs the required drivers
chmod +x SDRplay_RSP_API-Linux-3.x.x.run
sudo ./SDRplay_RSP_API-Linux-3.x.x.run
After installing the SDRplay API, restart OpenWebRX and add a new SDRplay device in the admin panel. Select the correct RSP model and configure gain settings for your antenna and bands.
Airspy Mini and HF+
sudo apt install airspy libairspy-dev
Airspy devices appear automatically in OpenWebRX after the libraries are installed. Add them via the admin panel selecting Airspy as the device type.
HackRF One
sudo apt install hackrf libhackrf-dev
Test the HackRF connection: hackrf_info should return device information. Add the HackRF in OpenWebRX admin panel selecting HackRF as the device type. Set sample rate to 8 Msps or 16 Msps for best performance.
Multiple SDR devices simultaneously
OpenWebRX supports multiple SDR devices attached to the same machine simultaneously. Add each device separately in the admin panel and create profiles for each one. Users can switch between them from the web interface. A common setup is one RTL-SDR for VHF/UHF monitoring and one Airspy HF+ for HF coverage.
Configuring receiver profiles
Profiles define frequency, bandwidth, mode, and gain presets that users can switch between from the web interface. Create profiles for your most-used frequencies and modes.
Creating a profile
- In the admin panel go to SDR Devices and Profiles
- Click your device and then Add profile
- Set the profile name — e.g. "20m FT8", "2m APRS", "ADS-B 1090 MHz"
- Set the center frequency for this profile
- Set the sample rate and RF gain
- Optionally enable specific decoders for this profile
- Save — the profile appears in the web interface dropdown
Recommended profiles for HF monitoring
| Profile name | Center frequency | Sample rate | Notes |
|---|---|---|---|
| 40m FT8 | 7.074 MHz | 2.4 Msps | Enable FT8 decoder |
| 20m FT8 | 14.074 MHz | 2.4 Msps | Most active FT8 frequency |
| 20m SSB | 14.200 MHz | 2.4 Msps | Good for monitoring SSB activity |
| 20m WSPR | 14.0956 MHz | 2.4 Msps | Enable WSPR decoder |
| 2m APRS | 144.390 MHz | 2.4 Msps | Enable APRS decoder (NA) |
| AIS shipping | 162.025 MHz | 2.4 Msps | Enable AIS decoder |
| ADS-B | 1090 MHz | 2.4 Msps | Enable ADS-B decoder |
Built-in digital decoders — FT8, APRS, ADS-B
OpenWebRX includes built-in decoders for many digital modes. Decoded data appears in a panel below the waterfall in the web interface and can also be forwarded to external applications.
Available decoders
| Decoder | Mode | Frequency example | Output |
|---|---|---|---|
| FT8 | Digital weak signal | 14.074 MHz | Callsigns, grid squares, signal reports |
| FT4 | Digital weak signal | 14.080 MHz | Callsigns, grid squares |
| WSPR | Propagation beacon | 14.0956 MHz | Callsigns, grid, power, SNR |
| JS8Call | Digital keyboard | 14.078 MHz | Messages and callsigns |
| APRS | Packet radio | 144.390 MHz | Station positions, messages |
| ADS-B | Aviation transponder | 1090 MHz | Aircraft positions and callsigns |
| AIS | Marine transponder | 162.025 MHz | Ship positions and identifiers |
| POCSAG | Pager protocol | Various | Pager messages |
| SELCAL/DSC | Maritime digital | Various HF | Coast guard and vessel calls |
| EWS/SAME | Emergency alerts | 162.400 MHz | Weather and emergency alerts |
| SSTV | Slow scan TV | 14.230 MHz | Images |
| FreeDV | Digital voice | Various HF | Decoded voice audio |
Enabling decoders
Enable decoders per profile in the admin panel. Go to your profile settings and enable the decoders appropriate for that frequency range. Only enable decoders relevant to the band — enabling FT8 decoding on a VHF profile wastes CPU cycles.
FT8 decoder setup
- Create a 20m FT8 profile centered on 14.074 MHz
- In the profile settings enable the FT8 decoder
- The decoder requires your system clock to be accurate — install chrony:
sudo apt install chrony - Open the web interface, select the 20m FT8 profile, and watch decoded callsigns appear in the panel below the waterfall
APRS decoder and map
The APRS decoder shows decoded packets in a table and optionally on a map. Enable it on a 144.390 MHz (North America) or 144.800 MHz (Europe) profile. The APRS data can also be forwarded to an external APRS-IS server using OpenWebRX's UDP output.
ADS-B aircraft tracking
With a 1090 MHz capable SDR (RTL-SDR works well at this frequency) the ADS-B decoder shows aircraft positions in real time. The data can be forwarded to FlightAware or FlightRadar24 feeder software running alongside OpenWebRX.
Using the OpenWebRX web interface
The OpenWebRX web interface works in any modern browser — Chrome, Firefox, Safari, and Edge are all supported. No plugins or extensions required.
Main interface elements
- Waterfall display — the main spectrum display showing received signals over time. Frequency is on the horizontal axis, time moves downward, signal strength shown as color
- Bandwidth selector — click and drag on the waterfall to select which signals to demodulate
- Mode selector — choose AM, FM, USB, LSB, CW, or digital modes
- Audio controls — volume, squelch, and mute for the demodulated audio
- Profile selector — switch between configured receiver profiles
- Decoder panel — shows decoded digital mode data below the waterfall
- Frequency display — shows the current center frequency and selected signal frequency
Tuning and listening
- Select a profile from the dropdown — the waterfall loads for that frequency range
- Click anywhere on the waterfall to tune to that signal
- Select the appropriate mode (USB for SSB, AM for broadcast, etc.)
- Audio plays in your browser — use your browser's volume control or the on-screen control
- Drag the bandwidth selector handles to adjust the filter width
Keyboard shortcuts in the browser
| Key | Action |
|---|---|
| Arrow keys | Fine-tune frequency by small steps |
| +/- | Increase/decrease waterfall zoom |
| U | Switch to USB mode |
| L | Switch to LSB mode |
| A | Switch to AM mode |
| F | Switch to FM mode |
| C | Switch to CW mode |
Remote access and nginx proxy setup
OpenWebRX runs on port 8073 by default. To access it remotely over the internet, either port-forward 8073 on your router or proxy it via nginx with a proper domain name and SSL certificate.
Simple port forwarding
Forward port 8073 on your router to the machine running OpenWebRX. Access it via your public IP address: http://YOUR-IP:8073. This is the simplest approach but exposes port 8073 directly — make sure you have set up user authentication in OpenWebRX first.
nginx reverse proxy with SSL (recommended)
server {
listen 80;
server_name sdr.yourdomain.com;
return 301 https://;
}
server {
listen 443 ssl;
server_name sdr.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/sdr.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/sdr.yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8073;
proxy_set_header Host ;
proxy_set_header X-Real-IP ;
proxy_http_version 1.1;
proxy_set_header Upgrade ;
proxy_set_header Connection "upgrade";
# Required for WebSocket audio streaming
proxy_read_timeout 86400;
}
}
sudo ln -s /etc/nginx/sites-available/openwebrx \
/etc/nginx/sites-enabled/
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d sdr.yourdomain.com
sudo nginx -t && sudo systemctl reload nginx
WebSocket requirement
OpenWebRX uses WebSockets for the live audio and waterfall streaming. The proxy_set_header Upgrade and Connection "upgrade" lines in the nginx config are essential — without them the audio stream will not work through the proxy.
Running as a systemd service
If you installed OpenWebRX from the package repository it already runs as a systemd service. If you installed via Docker use Docker's restart policy instead.
Package install — service management
# Check status
sudo systemctl status openwebrx
# Start the service
sudo systemctl start openwebrx
# Enable auto-start on boot
sudo systemctl enable openwebrx
# View logs
sudo journalctl -u openwebrx -f
Docker install — container management
# Check container status
docker ps
# View logs
docker logs openwebrx -f
# Restart the container
docker restart openwebrx
# Update to latest version
docker pull jketterl/openwebrx:stable
docker stop openwebrx && docker rm openwebrx
# Then re-run the original docker run command
Security — user authentication and access control
OpenWebRX has a built-in user authentication system. Enable it before exposing the receiver to the internet.
Creating user accounts
# Add an admin user
sudo openwebrx admin adduser admin
# Add a regular listener user
sudo openwebrx admin adduser listener
# List all users
sudo openwebrx admin listusers
# Change a password
sudo openwebrx admin changepw username
Requiring login for access
In the admin panel under Settings → General set Receiver access to require authentication. Users must log in before they can tune or listen. Admin access always requires authentication regardless of this setting.
Public vs private receivers
- Public — anyone can tune and listen without logging in. Good for sharing with the amateur radio community
- Require login — only registered users can access. Good for a private receiver or club-only access
- Admin only — no public access, only admin can use it. Good for a private monitoring station
Adding your receiver to sdr.hu
sdr.hu is a directory of publicly accessible OpenWebRX receivers worldwide. Adding your receiver lets amateur radio operators and SWLs around the world use it for listening and propagation checking.
Requirements for listing
- Your receiver must be publicly accessible via the internet
- It must be running 24/7 or at least most of the time
- The receiver must cover at least some amateur radio bands
- You must be a licensed amateur radio operator or SWL
Registration process
- In the OpenWebRX admin panel go to Settings → sdr.hu
- Enable the sdr.hu listing
- Enter your receiver's public URL
- Enter a description of your location and hardware
- OpenWebRX sends a registration request to sdr.hu automatically
- Your receiver appears on the sdr.hu map within a few hours
Troubleshooting common problems
No SDR device found — device not appearing in admin panel
- Check that the DVB-T driver is blacklisted:
cat /etc/modprobe.d/blacklist-rtl.conf - Unplug and replug the SDR dongle
- Test with rtl_test:
rtl_test -t— if this fails the driver issue is not resolved - Check USB permissions:
ls -la /dev/bus/usb/ - Add your user to the plugdev group:
sudo usermod -a -G plugdev - Try a different USB port — USB 3.0 ports occasionally cause issues with RTL-SDR
Waterfall loads but no audio
- Check your browser's audio permissions — some browsers block audio autoplay
- Click anywhere in the waterfall to start audio — this may be required to satisfy browser autoplay policies
- Check that the bandwidth selector (the highlighted region on the waterfall) is over a signal
- Verify the mode is correct — SSB signals require USB or LSB mode, not AM or FM
- Check the browser console for WebSocket errors — if the WebSocket connection failed audio cannot stream
- Verify nginx WebSocket headers if proxied — missing Upgrade headers break audio streaming
Waterfall is completely blank or very dark
- Check the gain setting — too low and signals are buried in noise below the display threshold
- Try setting gain to a fixed value (e.g. 40 dB) instead of Auto
- Adjust the waterfall gain and level sliders — the display may need to be calibrated for your noise floor
- Check the SDR device is actually receiving — test it with
rtl_sdr -f 100000000 -s 2400000 - | head -c 1000 | od -t x1 | head— you should see non-zero data
FT8 decoder showing no decodes
- Check system clock accuracy:
chronyc tracking— FT8 requires accurate UTC time - Force clock sync:
sudo chronyc makestep - Verify you are on the correct frequency — 14.074 MHz center for 20m FT8
- Check that the FT8 decoder is enabled in the profile settings
- Give it a few 15-second cycles — decodes may take a moment to appear
Remote access not working — can't connect from outside network
- Verify port forwarding on your router — port 8073 should forward to the OpenWebRX machine
- Check the firewall:
sudo ufw allow 8073/tcpif using ufw - Test locally first:
curl http://localhost:8073should return HTML - For nginx proxy: verify nginx is running and the config is correct:
sudo nginx -t - Check WebSocket proxy headers — missing Upgrade headers break the audio stream
OpenWebRX service keeps crashing
- Check the journal:
sudo journalctl -u openwebrx -n 50 - Check available disk space:
df -h - Check available RAM — OpenWebRX with multiple decoders can use 500 MB or more
- Try disabling some decoders — each active decoder consumes CPU and memory
- On Raspberry Pi check CPU temperature:
vcgencmd measure_temp— throttling causes instability
Frequently asked questions
What SDR hardware do I need for OpenWebRX?
The RTL-SDR Blog v3 ($30) is the most popular and best-value starting point. It covers 500 kHz to 1.75 GHz and with direct sampling mode enabled it also covers HF frequencies below 30 MHz. For dedicated HF coverage the Airspy HF+ Discovery (~$199) has much better performance. For general coverage from VLF to UHF the SDRplay RSP1A (~$109) is excellent. All of these work well with OpenWebRX on Linux.
Can OpenWebRX run on a Raspberry Pi?
Yes — OpenWebRX runs well on Raspberry Pi 3B+ and 4. The Pi 4 handles multiple decoders and several simultaneous users without problems. The Pi 3B+ works for basic reception with one or two decoders but may struggle with CPU-intensive decoders like FT8 alongside other services. Install from the OpenWebRX Raspberry Pi OS repository or use Docker.
Can multiple users connect to OpenWebRX at the same time?
Yes — multiple users can connect and listen simultaneously. All connected users hear the same frequency and mode. Typically one user at a time controls the tuning — OpenWebRX uses a first-come locking system for tuning control. The number of simultaneous users is limited by the server's CPU and bandwidth — a Raspberry Pi 4 can typically handle 10–20 simultaneous listeners on a typical home internet connection.
Does OpenWebRX support transmitting?
No — OpenWebRX is receive-only. It streams the received audio and spectrum from SDR hardware to a browser but cannot key a transmitter or control a radio's transmit path. For remote transmitting you need a separate application alongside OpenWebRX, or a full remote station solution like RemoteHams, Hamlib network control, or a dedicated remote station package.
How do I get OpenWebRX to decode FT8?
Create a receiver profile centered on 14.074 MHz with a sample rate of at least 2.4 Msps, then enable the FT8 decoder in that profile's settings. Make sure your system clock is accurate — install chrony with sudo apt install chrony. FT8 decoding requires accurate UTC timing, just like WSJT-X. Decoded callsigns and signal reports appear in the panel below the waterfall.
Is OpenWebRX free?
Yes — OpenWebRX is free and open-source software released under the GNU AGPL license. It is developed by Jakob Ketterl DD5JFK and a community of contributors. The software is free to use, modify, and distribute. The only cost is your SDR hardware and the server it runs on.
What is the difference between OpenWebRX and WebSDR?
Both are browser-based SDR applications but with different origins and approaches. WebSDR is older, widely used, and has the largest public network at websdr.org — but it is closed-source and requires a license from the developer for public operation. OpenWebRX is fully open-source, supports more modern SDR hardware, has built-in digital decoders, and is easier to self-host. For a private receiver or a new public receiver, OpenWebRX is generally the better choice today.