📻 BrowSDR
A blazing fast, next-generation browser-based Software Defined Radio (SDR) receiver for HackRF. Connect a HackRF device directly to your browser via WebUSB and tune into FM, AM, SSB, CW, and more — no drivers, no native software, no hassle.
Enjoy the power of a desktop SDR platform fully within your web browser.
- 🎯 Multi-VFO Mastery Tune into multiple frequencies simultaneously! Create an unlimited number of Virtual Frequency Oscillators (VFOs), each with independent demodulation, volume, squelch, and DSP settings. Listen to multiple broadcasts without dropping a single packet.
- ⚡ High-Speed Rust & WASM Architecture Built for raw performance. FFT and DSP pipelines are written in Rust and compiled to WebAssembly (WASM). Running inside Web Workers off the main thread ensures a crystal-clear, smooth UI and buttery 60 FPS performance, even with multiple active VFOs.
- 🎙️ Live Transcribe Built-in AI-powered live transcription of demodulated audio right in your browser.
- 📟 POCSAG Decoder Instantly decode paging networks straight from the UI.
- 📊 Frequency Activity Visually spot active signals and quickly jump to transmissions using the dynamic frequency activity scanner and interactive waterfall display.
- 🔖 Advanced Bookmarking System Save, organize, and quickly recall your favorite frequencies. Group your bookmarks into custom categories to effortlessly manage airbands, ham frequencies, repeaters, or emergency services.
- 🌊 Real-time WebGL Waterfall & Spectrum Monitor the entire RF band visually with an ultra-responsive, GPU-accelerated waterfall and spectrum analyzer.
- 📻 Wide Demodulation Support Supports WFM, NFM, AM, USB, LSB, DSB, CW, and raw IQ modes.
- 📡 RDS Decoding on the Fly Instantly decode station name, programme type, and radiotext on WFM signals.
- 🎛️ Full DSP Toolset Control squelch, noise reduction, de-emphasis, and stereo output per VFO.
- 🌐 Remote Access Share your SDR with others via WebRTC using PeerJS.
- WebUSB — Communicates directly with your HackRF device from Google Chrome or Edge.
- WebAssembly — Signal processing (FFT, filtering, decimation, mixer, demodulation) is handled by RustFFT and highly optimized Rust code compiled to WASM.
- Web Workers — Multi-threaded DSP via Comlink keeps the event loop entirely free of blocking tasks.
- WebGL — Hardware-accelerated FFT rendering.
- Vue 3 — A sleek, reactive UI powering complex per-VFO controls.
- Cloudflare Workers — Fast edge-deployed static assets and API proxy.
(Note: WebUSB requires a secure context — HTTPS or localhost)
| Layer | Technology |
|---|---|
| Frontend | TypeScript, Vue 3 (Options API), Vite |
| DSP | Rust, RustFFT, WebAssembly, Web Workers |
| Deployment | Cloudflare Workers (Wrangler) |
| Testing | Vitest, wasm-bindgen-test, cargo test |
| Tool | Purpose | Install |
|---|---|---|
| Node.js | Build & dev server | Download from website |
| Rust | Compile WASM module | curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh |
wasm32-unknown-unknown target |
Rust → WASM | rustup target add wasm32-unknown-unknown |
| wasm-pack | Build & package WASM | cargo install wasm-pack |
| cargo-make | Task runner for Rust builds | cargo install --force cargo-make |
| A WebUSB-capable browser | Run the app (e.g., Google Chrome) | — |
# 1. Install dependencies
npm install
# 2. Build the WASM module (first time or after Rust changes)
cd hackrf-web && cargo make build && cd ..
# 3. Start the local dev server
npm run devThen open http://localhost:5173 in Google Chrome or any WebUSB-supported browser.
| Command | Description |
|---|---|
npm run dev |
Start Vite dev server (http://localhost:5173) |
npm run build |
Build client assets into dist/ |
npm run deploy |
Build and deploy to Cloudflare Workers |
npm run typecheck |
Run TypeScript type checking |
npm run test |
Run tests with Vitest |
The Rust/WASM module must be built separately (requires Rust toolchain):
cd hackrf-web
cargo make build # Build for web (output: hackrf-web/pkg/)Note: The WASM build outputs in
hackrf-web/pkg/are committed to the repo, sonpm run deployworks seamlessly even without Rust installed on the CI/deployment machine.
- Connect your HackRF to a USB port.
- Open the application and click Connect Device.
- Select your HackRF from the browser's USB device prompt.
- Set your desired Center Frequency and hit Play.
- Click anywhere on the spectrum or waterfall to instantly tune a new VFO, or manually add as many VFOs as you want!
- Customize the demodulation mode (WFM, NFM, AM, USB, etc.) and DSP settings for each VFO.
- Adjust gains (LNA, VGA, AMP) for optimal signal reception.
# TypeScript / Worker tests
npm run test
# Rust / WASM tests
cd hackrf-web
cargo make testLicensed under the AGPL-3.0 — see LICENSE for details.