
Company News
Socket Named Top Sales Organization by RepVue
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.
@jtarrio/webrtlsdr
Advanced tools
Access RTL-SDR devices and receive and demodulate radio signals from your web application
Access RTL-SDR devices and receive and demodulate radio signals from your web application.
This is a library that provides functions to access and operate an RTL-SDR device from a web application, receive radio signals, demodulate them, and play it through the computer's speakers or headphones.
It provides low-level access to the RTL-SDR stick, and also uses the Signals library to provide a full reception/demodulation pipeline.
This library powers Radio Receiver, my browser-based SDR application, which you can try at radio.ea1iti.es.
Web RTL-SDR was written to work with an RTL-2832U-based DVB-T (European digital TV) USB receiver with a R820/828/860 tuner chip. Support for other chips may be added as required.
Web RTL-SDR uses the WebUSB API, which is only available in Chromium-based browsers (Chrome, Edge, Opera) on computers and Android devices.
npm install @jtarrio/webrtlsdr
See the docs directory for the documentation, or check out the following examples.
This program is a complete stereo FM radio receiver tuned for 88.5 MHz.
import { Demodulator } from "@jtarrio/signals/demod/demodulator.js";
import { getMode } from "@jtarrio/signals/demod/modes.js";
import { Radio, RtlProvider } from "@jtarrio/webrtlsdr/radio.js";
let demodulator = new Demodulator();
let radio = new Radio(new RtlProvider(), demodulator);
radio.setFrequency(88500000);
demodulator.setVolume(1);
demodulator.setMode(getMode("WBFM"));
document
.getElementById("playButton")
.addEventListener("click", () => radio.start());
document
.getElementById("stopButton")
.addEventListener("click", () => radio.stop());
You can also see a full example at examples/highlevel.
This program connects to the RTL-SDR stick, tunes to 88.5 MHz, reads 65536 samples, and closes the connection.
import { RTL2832U_Provider } from "@jtarrio/webrtlsdr/rtlsdr.js";
let provider = new RTL2832U_Provider();
let device = await provider.get();
await device.setSampleRate(1024000);
await device.setCenterFrequency(88500000);
await device.setGain(null);
await device.resetBuffer();
let samples = await device.readSamples(65536);
await device.close();
You can also see a full example at examples/lowlevel.
This is a spinoff of https://github.com/jtarrio/radioreceiver, which is, in turn, a fork of https://github.com/google/radioreceiver. (I am the original author, but I was employed by Google at the time.)
Kudos and thanks to the RTL-SDR project for figuring out the magic numbers needed to drive the USB tuner.
FAQs
Access RTL-SDR devices and receive and demodulate radio signals from your web application
We found that @jtarrio/webrtlsdr demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.

Security News
NIST will stop enriching most CVEs under a new risk-based model, narrowing the NVD's scope as vulnerability submissions continue to surge.

Company News
/Security News
Socket is an initial recipient of OpenAI's Cybersecurity Grant Program, which commits $10M in API credits to defenders securing open source software.