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.

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
- Clone the repository from GitHub at
jLynx/BrowSDR. - Install dependencies with
npm install. - Build the DSP module with
npm run build:dsp(first run, or after Rust changes; outputs are committed underwasm/dsp/pkgso deploys work without Rust). - Start the dev server with
npm run devand openhttp://localhost:5173in Chrome or Edge.
Connect a radio in six steps
- Plug in one supported SDR and finish any WinUSB driver setup on Windows.
- Open the app and click Connect Device.
- Pick the SDR in the browser USB picker, pairing it through the USB prompt if it is new.
- Set the desired center frequency and press Play.
- Click anywhere on the spectrum or waterfall to drop a new VFO instantly, or add VFOs manually without limit.
- 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
- BrowSDR GitHub Repository – Official source, issue tracker, 118 commits, AGPL-3.0 license and build instructions.
- BrowSDR Live Demo – Try the full receiver in Chrome or Edge with your own SDR connected.
- BrowSDR Feature Roadmap – Planned APRS, radiosonde expansion and completed decoder milestones.
- rtl_433 Decoder Build and Reception Guide – ISM sensor decoding details inside BrowSDR.
- RustFFT Library – The FFT engine behind the WASM DSP pipeline.
- Comlink Web Workers Library – Threading layer keeping DSP off the UI thread.
- Chrome WebUSB on Windows – Official WinUSB requirements for browser USB access.
- HackRF Gain Setting Guidance – LNA and VGA staging reference used by the auto-gains helper.
- Zadig USB Driver Installer – Tool for assigning WinUSB to SDR interfaces on Windows.
- OpenWebRX+ Project – The leading server-side open source WebSDR for comparison.
- Vue 3 Framework – Reactive UI framework powering the BrowSDR interface.
73 de 9M2PJU



Post Comment