BrowSDR: A Blazing Fast Browser-Based SDR Receiver for HackRF, RTL-SDR, Airspy and LimeSDR

TL;DR: Quick Summary

BrowSDR by jLynx is a free and open source (AGPL-3.0) software defined radio receiver that runs entirely in a WebUSB-capable browser. Plug a HackRF, HackRF Pro, RTL-SDR, Airspy or LimeSDR directly into Chrome or Edge and receive FM, AM, SSB, CW plus decoded data such as ADS-B aircraft positions, AIS ship tracks, ACARS airline messages, POCSAG pager traffic, rtl_433 weather sensors, RS41 radiosonde balloons and BLE advertisements, with no drivers, installers or native applications. Its Rust and WebAssembly DSP core delivers an unlimited multi-VFO workspace, a GPU-accelerated WebGL waterfall and spectrum display, and one-click remote sharing over WebRTC. Try it live at browsdr.jlynx.net, then run your own copy from the GitHub source.


What Is BrowSDR?

BrowSDR is a free open source browser-based software defined radio receiver that connects to HackRF, RTL-SDR, Airspy and LimeSDR hardware directly through WebUSB and performs all signal processing locally in the page with a Rust and WebAssembly DSP engine.

For decades, using a software defined radio meant installing a chain of native software: vendor drivers, Zadig shims, SDR# or GQRX or SDRangel, plus plugin packs for each decoder. Field operation on a borrowed laptop meant repeating the whole ritual before a single signal could be heard. BrowSDR removes that chain. The application is a static web page deployed on Cloudflare Workers. The DSP is compiled Rust running in Web Workers. The radio talks straight to the browser tab over WebUSB. Open the URL over HTTPS, click Connect Device, pick the dongle, set a center frequency and press Play. That’s the entire installation procedure, and it works the same on a Linux shack PC, a Windows laptop and a Chromebook.

BrowSDR browser interface monitoring VHF airband ACARS on a LimeSDR-USB with nine VFOs and decoded aircraft messages
BrowSDR decoding live VHF ACARS airline traffic on a LimeSDR-USB at 61.44 MSPS, with nine simultaneous VFOs parked across the 129 to 131 MHz airband and decoded A320 position reports streaming in the lower panel.

A Short History: How Browser SDR Became Possible

Browser-based SDR didn’t start with BrowSDR. The idea is almost twenty years old, but until recently the browser was always a thin client with the real radio work happening on a server.

1. WebSDR and the server-side era

Pieter-Tjerk de Boer PA3FWM launched WebSDR around 2008, with the famous University of Twente receiver letting thousands of listeners share a handful of wideband front ends. All DSP ran on the server. The browser only received compressed audio and waterfall tiles. The model proved demand but every new band or mode required server upgrades.

2. KiwiSDR and the embedded appliance era

The KiwiSDR (2016) packed a BeagleBone Green plus a custom FPGA cape into a 30 MHz wide HF appliance with GPS-synchronized time-difference-of-arrival direction finding. Superb for HF, but fixed bandwidth, fixed hardware, and a four-user sharing limit per board.

3. OpenWebRX and the Raspberry Pi shack server era

Jakob Ketterl DD5JFK and the OpenWebRX+ community turned the Raspberry Pi into a personal multiband server with a deep digital mode decoder library. Flexible and hugely popular, but still a client-server split: the Pi does the DSP, the browser displays results, and remote operation means port forwarding and codec licenses.

4. BrowSDR and the browser-native era

BrowSDR flips the split. WebUSB (standardized in Chrome in 2017) gives the page raw USB bulk transfers to the SDR. WebAssembly (2019) runs compiled Rust DSP at near-native speed inside Web Workers off the main thread. WebGL paints the spectrum at 60 frames per second on the GPU. The result is a desktop-class receiver where the browser tab is the entire SDR application, the laptop is the server, and sharing a receiver with a friend is a single PeerJS WebRTC link instead of a sysadmin project.

Key Features at a Glance

  • Unlimited multi-VFO tuning: create as many Virtual Frequency Oscillators as needed, each with independent frequency, demodulator, volume, squelch and DSP settings, all fed from one receiver sample stream.
  • Rust and WebAssembly DSP core: FFT, filtering, decimation, mixing and demodulation use RustFFT and hand-tuned Rust compiled to WASM, running in Comlink Web Workers so the UI never stutters.
  • GPU WebGL waterfall and spectrum: time-based scrolling and smoothing stay correct at any frame rate, with a 512-row history holding about 25.6 seconds of continuous reception.
  • Wide demodulation coverage: WFM, NFM, AM, USB, LSB, DSB, CW and raw IQ, with RDS station name, programme type and radiotext decoded live on WFM.
  • Per-VFO DSP toolset: squelch, noise reduction, de-emphasis and stereo controls adjustable independently on every VFO.
  • Frequency activity scanner: visual signal spotting across the sampled band with click-to-tune directly from spectrum or waterfall.
  • Advanced bookmarking: save and categorize favorite frequencies for airbands, ham bands, repeaters and public service channels.
  • AI live transcription: browser-side transcription of demodulated voice audio.
  • Built-in data decoders: ADS-B aircraft with live map, AIS vessels with live map and ITU MID country lookup, VHF ACARS with searchable message list, POCSAG paging, rtl_433 ISM sensors, RS41 radiosonde balloons with live map, and passive BLE advertisement discovery.
  • Remote access sharing: publish every connected SDR over one WebRTC PeerJS link, where each guest gets fully independent VFOs on every receiver.
  • Multiple simultaneous SDRs: mix HackRF, RTL-SDR, Airspy and LimeSDR devices at once, each with its own tab, tuning, sample rate, gains and waterfall, while audio from all enabled VFOs keeps playing when tabs switch.

Under the Hood: Architecture

+----------------------------------------------------------------------------------+
|                              BROWSDR PIPELINE                                  |
+----------------------------------------------------------------------------------+
  USB HARDWARE (HackRF / RTL-SDR / Airspy / LimeSDR)
                   |
                   | WebUSB bulk transfers (Chrome or Edge, HTTPS or localhost)
                   v
+--------------------------------------------------+
| DSP CORE (Rust compiled to WebAssembly)          |
| RustFFT spectrum - channelizer - mixer           |
| decimator - FM/AM/SSB/CW demodulators            |
| RDS / POCSAG / ADS-B / AIS / ACARS / rtl_433     |
| Runs in Comlink Web Workers, off main thread     |
+------------------------+-------------------------+
                         |
        +----------------+----------------+
        |                                 |
        v                                 v
  WebGL waterfall + spectrum       Per-VFO audio + decoders
  (GPU, 60 FPS, 512 rows,          (independent squelch, volume,
   ~25.6 s history)                 transcription, maps, lists)
        |                                 |
        +----------------+----------------+
                         |
                         v
  Vue 3 reactive UI - bookmarks - activity scanner - PeerJS sharing
  Static deployment on Cloudflare Workers (Wrangler)
Layer Technology Role
Hardware I/O WebUSB Raw USB access to the SDR from the browser tab
DSP Rust, RustFFT, WebAssembly FFT, filtering, demodulation and decoders at near-native speed
Threading Web Workers via Comlink DSP off the main thread for a stutter-free UI
Rendering WebGL GPU-accelerated spectrum and waterfall
Interface TypeScript, Vue 3, Vite Reactive per-VFO controls and receiver tabs
Sharing PeerJS over WebRTC Remote users with independent VFOs on each receiver
Hosting Cloudflare Workers Fast edge-served static assets and API proxy
Testing Vitest, cargo test, wasm-bindgen-test Unit, DSP and UI component coverage

Supported Hardware

Device family Models and variants Notes for buyers
HackRF HackRF One, HackRF Pro WebUSB driver using the HackRF protocol and recognized USB IDs. Half-duplex 1 MHz to 6 GHz workhorse, ideal for wideband survey and ISM experiments.
RTL-SDR RTL-SDR Blog V3 and V4, compatible Nooelec and generic RTL2832U dongles Tuners supported: R820T, R820T2, R828D, E4000, FC0012, FC0013, FC2580, including Blog V4-specific configuration. The classic low-cost entry point for VHF and UHF monitoring.
Airspy Airspy One, R2, Mini Dedicated receive driver with device-reported sample rates. Strong dynamic range for crowded city RF environments.
Airspy HF+ Airspy HF+ family Separate HF+ receive driver. Individual variants still need hardware verification by owners, so report results upstream.
LimeSDR LimeSDR-USB WebUSB receive driver with gain and antenna controls, up to 61.44 MSPS. Select RX1 or RX2 plus LNAH, LNAL or LNAW to match the physical connector group. One receiver streams at a time.

Driver availability doesn’t mean every model, firmware revision or feature has been hardware-tested, so treat the table as driver coverage rather than a certification list.

Windows users: the WinUSB step

On Windows, the SDR USB interface must use WinUSB rather than a vendor DVB-T or Cypress CYUSB3 driver, or the browser connection fails with Access denied. Use Device Manager to select an already-installed WinUSB driver, or install one for the LimeSDR-USB only with Zadig, never for hubs or unrelated devices. Reconnect the dongle and select it again in Chrome or Edge afterward. Note that switching to WinUSB can affect native applications that require the original driver, so switch back when those programs need it. Always close other SDR software holding the device before connecting from the browser.

Automatic receive gains

The Auto set gains helper samples raw ADC RMS, peak and clipping measurements and steers LimeSDR LNA, TIA and PGA (or HackRF LNA, VGA and RF amplifier) toward about minus 22 dBFS RMS with at least 6 dB of peak headroom, then holds steady. HackRF steps follow the official gain guidance: LNA in 8 dB steps from 0 to 40 dB, VGA in 2 dB steps from 0 to 62 dB, with the RF amplifier engaged only when levels stay low. Cancel keeps the last applied gains. This optimizes converter level, not antenna matching, so strong signals anywhere in the sampled band can still limit gain and manual tweaking remains available.

Built-in Decoders: Frequencies and Uses

Decoder Band and frequency What you get Typical ham and maker use
ADS-B 1090 MHz Callsigns, altitude, ground speed and live aircraft positions on a map Home flight tracking without a dedicated feeder Pi
AIS 161.975 and 162.025 MHz Class A and B vessel identity, position and movement with country lookup Coastal and port vessel watch from a hilltop
ACARS VHF airband around 131 MHz Airline operational messages with registration, flight number and searchable text The featured screenshot shows nine VFOs decoding A320 reports
POCSAG VHF and UHF paging channels Pager network traffic decoded in the UI Paging infrastructure observation and EmComm study
rtl_433 315, 433, 868 and 915 MHz ISM Weather sensors, remotes, TPMS and ISM gadgets Shack temperature, rain gauge and tire sensor reception
Radiosonde 400 MHz band Vaisala RS41 balloon GPS telemetry with altitude and battery Balloon chase support and upper-air curiosity
BLE 2.4 GHz advertisements Nearby device names, service UUIDs and live device list Foxhunt-adjacent gadget hunting and site surveys
RDS FM broadcast 88 to 108 MHz Station name, programme type and radiotext on WFM Broadcast DX identification during openings
Live transcribe Any voice VFO AI transcription of demodulated audio in the browser Meeting and net logging assistance

Planned work on the public roadmap includes APRS position and message decoding plus additional radiosonde models with calibrated temperature, humidity and pressure, alongside the already completed ACARS, AIS, ADS-B and initial BLE support.

Multi-VFO in Practice: Reading the Featured Screenshot

The featured image is worth studying because it shows a real BrowSDR session doing something nearly impossible with classic desktop SDR software. A LimeSDR-USB is centered on 131 MHz at the full 61.44 MSPS rate, giving roughly 2 MHz of visible airband. Nine color-coded VFOs sit parked on 131.550, 131.450, 131.725, 131.525, 130.025, 129.125, 130.450, 131.125 and 131.650 MHz. VFO 1 on 131.550 MHz is actively decoding VHF ACARS with 88 valid frames, and the lower panel streams decoded Jetstar JQ0298 traffic: an Airbus A320 registration VH-X3E flying Queenstown NZQN to Auckland NZAA, sending automated position report 002 with latitude, longitude, altitude and waypoint data. The left panel shows RX1 selected with LNA gain at 30 dB on the LNAL antenna path, plus live ADC telemetry (RX peak minus 12.3 dBFS, RMS minus 19.9 dBFS, zero clipping). Every VFO has its own mute state and decode target, and the spectrum, blue waterfall and message table update together at full frame rate. One operator, one browser tab, nine simultaneous airband channels.

Remote Access: Share Your Receiver With One Link

BrowSDR can publish all connected SDRs through a single WebRTC link using PeerJS. Each remote guest receives fully independent VFOs on every receiver, so a club member in another state can tune 2 m repeaters on your RTL-SDR while you monitor airband on your LimeSDR, with neither session disturbing the other. There’s no server to configure, no port forwarding and no user account database. For Malaysian clubs this is a practical way to share a hilltop receiver during contests, JOTA weekends or training nights: one member hosts the hardware with a laptop and a data connection, everyone else tunes from home.

Quick Start Guide

Prerequisites

Tool Purpose Install
Node.js 22 or newer Build and dev server Download from nodejs.org
Rust via rustup Compile the WASM DSP module Via the rustup installer script
wasm32-unknown-unknown target Rust to WASM compilation rustup target add wasm32-unknown-unknown
wasm-pack Package the WASM module cargo install wasm-pack
cargo-make Rust task runner cargo install --force cargo-make
Chrome or Edge WebUSB-capable browser Any recent release over HTTPS or localhost

Build and run

  1. Clone the repository from GitHub at jLynx/BrowSDR.
  2. Install dependencies with npm install.
  3. Build the DSP module with npm run build:dsp (first run, or after Rust changes; outputs are committed under wasm/dsp/pkg so deploys work without Rust).
  4. Start the dev server with npm run dev and open http://localhost:5173 in Chrome or Edge.

Connect a radio in six steps

  1. Plug in one supported SDR and finish any WinUSB driver setup on Windows.
  2. Open the app and click Connect Device.
  3. Pick the SDR in the browser USB picker, pairing it through the USB prompt if it is new.
  4. Set the desired center frequency and press Play.
  5. Click anywhere on the spectrum or waterfall to drop a new VFO instantly, or add VFOs manually without limit.
  6. Set each VFO demodulator (WFM, NFM, AM, USB, LSB, DSB, CW or raw IQ), adjust gains, then save bookmarks for stations worth keeping.

Useful extras: run npm run storybook to browse the shared Vue component catalog, npm run test for Vitest suites, npm run test:dsp for native Rust DSP tests, and npm run deploy to build and publish to Cloudflare Workers.

Comparison: BrowSDR vs Popular Alternatives

Feature BrowSDR OpenWebRX+ SDR++ Server KiwiSDR Classic WebSDR
Where DSP runs In your browser (WASM) On the Pi or server On the server On embedded FPGA plus BeagleBone On the server
Install needed None, open a URL Flash and configure a server image Install server plus client Buy the appliance None, but listen only
Hardware support HackRF, RTL-SDR, Airspy, LimeSDR via USB Many SDRs via SoapySDR Many SDRs Fixed onboard HF front end Fixed site hardware
Simultaneous VFOs Unlimited per receiver Multiple virtual receivers Multiple Four channels shared One per user session
Built-in decoders ADS-B, AIS, ACARS, POCSAG, rtl_433, RS41, BLE, RDS, transcribe Deep digital mode library Basic demod plus plugins WSPR, FSK, TDoA SSB, CW, AM, FM
Remote sharing One-click WebRTC link, independent guest VFOs Multi-user server with logins Client-server sessions Four public slots Thousands of passive listeners
Transmit Receive only Receive only Receive only Receive only Receive only
Cost Free, AGPL-3.0, bring your own dongle Free, bring a Pi and SDR Free, bring server and SDR About 400 USD hardware Free to listen
Best for Travel, field kits, clubs, zero-setup demos Permanent home multiband server High-performance remote rig HF propagation and TDoA Quick HF listening

No single row wins everything. A permanent hilltop multiband server still belongs to OpenWebRX+. Pure HF DX with direction finding still belongs to KiwiSDR. BrowSDR wins the zero to signals in sixty seconds race: borrowed laptop, personal dongle, hotel Wi-Fi, full receiver with decoders before the kettle boils.

Practical Uses for Amateur Radio Operators

  • Shack second receiver: keep a 30 USD RTL-SDR on the 2 m calling frequency or a local repeater while the main rig works HF, with POCSAG and rtl_433 decoding running silently alongside.
  • Airband and ACARS monitoring: reproduce the featured screenshot with any VHF-capable SDR parked on 118 to 137 MHz during a lunch break, and log airline position reports without extra software.
  • ADS-B home feeder alternative: pair a 1090 MHz antenna with a Blog V4 dongle for live aircraft maps on the same screen as voice VFOs.
  • Coastal AIS watch: take a laptop, a discone and an RTL-SDR to the beach and plot Class A and B vessel traffic on both AIS channels.
  • Balloon chase support: decode RS41 telemetry during HAB launches and feed positions to the chase team map.
  • EmComm go-kit: a preconfigured BrowSDR bookmark file plus one dongle gives a served agency station instant airband, pager and sensor monitoring with no software to install under stress.
  • Club training nights: one member hosts the receiver over WebRTC while newcomers each tune independent VFOs from their own browsers and learn band plans hands-on.
  • RFI hunting support: combine the wideband waterfall with frequency activity scanning to spot the switching supply hash or LED driver noise before deploying a portable sniffer.

Honest Limitations

  • Chromium only: WebUSB needs Chrome or Edge. Firefox and Safari don’t expose the API, so Apple-locked operators need a Chromium browser.
  • Secure context required: the page must load over HTTPS or localhost, which the public demo and Cloudflare deployment already satisfy.
  • Receive only: all drivers are receive drivers. There’s no transmit path for HackRF or LimeSDR, so it complements rather than replaces SDRangel or GNU Radio for TX experiments.
  • USB and CPU budget: 61.44 MSPS LimeSDR streaming plus WASM DSP and WebGL rendering will warm a thin laptop. Drop sample rate or close VFOs on battery power.
  • Identical dongles need serial numbers: WebUSB can’t reliably tell two identical units apart across reloads if enumeration order changes, so assign unique USB serials where the vendor tool allows it.
  • Strong-signal reality: like every wideband SDR, a nearby broadcast or pager monster in the sampled bandwidth can set the gain ceiling for everything else. Narrow the span or add filtering.
  • APRS is still on the roadmap: packet position decoding is requested but not yet implemented, so keep Dire Wolf or APRSdroid in the loop for now.

Frequently Asked Questions (FAQ)

What is BrowSDR?

BrowSDR is a free open source SDR receiver by jLynx that runs fully in Chrome or Edge. It connects to real radio hardware over WebUSB and demodulates and decodes signals locally with Rust and WebAssembly.

Which SDR hardware does BrowSDR support?

HackRF One and Pro, RTL-SDR Blog V3 and V4 plus compatible RTL2832U dongles, Airspy One, R2, Mini and HF+ family, and LimeSDR-USB. Coverage depends on recognized USB IDs and tuner chips.

Do I need to install drivers or software?

No application install is needed. Open the HTTPS page, connect the dongle and listen. Windows may need a one-time WinUSB assignment via Device Manager or Zadig for the SDR interface.

Does BrowSDR work in Firefox or Safari?

No. WebUSB is a Chromium API, so Chrome or Edge is required. Firefox and Safari can’t grant pages raw USB access, which BrowSDR depends on.

Is BrowSDR really free for club and EmComm use?

Yes. It is licensed AGPL-3.0 with public source, a live demo and self-hosting via Cloudflare Workers. Share receiver links freely, and contribute hardware test reports upstream.


Sources and Further Reading

73 de 9M2PJU

Post Comment