Skip to content

FabricLabs/BrowSDR

 
 

Repository files navigation

📻 BrowSDR

BrowSDR Live Rust WebAssembly

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.


✨ Features

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.

🚀 How It Works

  1. WebUSB — Communicates directly with your HackRF device from Google Chrome or Edge.
  2. WebAssembly — Signal processing (FFT, filtering, decimation, mixer, demodulation) is handled by RustFFT and highly optimized Rust code compiled to WASM.
  3. Web Workers — Multi-threaded DSP via Comlink keeps the event loop entirely free of blocking tasks.
  4. WebGL — Hardware-accelerated FFT rendering.
  5. Vue 3 — A sleek, reactive UI powering complex per-VFO controls.
  6. Cloudflare Workers — Fast edge-deployed static assets and API proxy.

(Note: WebUSB requires a secure context — HTTPS or localhost)


🧰 Tech Stack

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

🛠️ Prerequisites

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)

⚙️ Quick Start

# 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 dev

Then open http://localhost:5173 in Google Chrome or any WebUSB-supported browser.


💻 Build Commands

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

Building the WASM Module

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, so npm run deploy works seamlessly even without Rust installed on the CI/deployment machine.


🎧 Running the App

  1. Connect your HackRF to a USB port.
  2. Open the application and click Connect Device.
  3. Select your HackRF from the browser's USB device prompt.
  4. Set your desired Center Frequency and hit Play.
  5. Click anywhere on the spectrum or waterfall to instantly tune a new VFO, or manually add as many VFOs as you want!
  6. Customize the demodulation mode (WFM, NFM, AM, USB, etc.) and DSP settings for each VFO.
  7. Adjust gains (LNA, VGA, AMP) for optimal signal reception.

🧪 Testing

# TypeScript / Worker tests
npm run test

# Rust / WASM tests
cd hackrf-web
cargo make test

📜 License

Licensed under the AGPL-3.0 — see LICENSE for details.

About

Web-Based SDR Receiver

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 59.0%
  • Rust 15.8%
  • HTML 10.6%
  • CSS 7.5%
  • JavaScript 7.1%